mirror of
https://github.com/datarhei/core.git
synced 2025-09-26 20:11:29 +08:00
265 lines
3.7 KiB
Go
265 lines
3.7 KiB
Go
package value
|
|
|
|
import (
|
|
"strconv"
|
|
"strings"
|
|
)
|
|
|
|
// string
|
|
|
|
type String string
|
|
|
|
func NewString(p *string, val string) *String {
|
|
*p = val
|
|
return (*String)(p)
|
|
}
|
|
|
|
func (s *String) Set(val string) error {
|
|
*s = String(val)
|
|
return nil
|
|
}
|
|
|
|
func (s *String) String() string {
|
|
return string(*s)
|
|
}
|
|
|
|
func (s *String) Validate() error {
|
|
return nil
|
|
}
|
|
|
|
func (s *String) IsEmpty() bool {
|
|
return len(string(*s)) == 0
|
|
}
|
|
|
|
// array of strings
|
|
|
|
type StringList struct {
|
|
p *[]string
|
|
separator string
|
|
}
|
|
|
|
func NewStringList(p *[]string, val []string, separator string) *StringList {
|
|
v := &StringList{
|
|
p: p,
|
|
separator: separator,
|
|
}
|
|
*p = val
|
|
return v
|
|
}
|
|
|
|
func (s *StringList) Set(val string) error {
|
|
list := []string{}
|
|
|
|
for _, elm := range strings.Split(val, s.separator) {
|
|
elm = strings.TrimSpace(elm)
|
|
if len(elm) != 0 {
|
|
list = append(list, elm)
|
|
}
|
|
}
|
|
|
|
*s.p = list
|
|
|
|
return nil
|
|
}
|
|
|
|
func (s *StringList) String() string {
|
|
if s.IsEmpty() {
|
|
return "(empty)"
|
|
}
|
|
|
|
return strings.Join(*s.p, s.separator)
|
|
}
|
|
|
|
func (s *StringList) Validate() error {
|
|
return nil
|
|
}
|
|
|
|
func (s *StringList) IsEmpty() bool {
|
|
return len(*s.p) == 0
|
|
}
|
|
|
|
// map of strings to strings
|
|
|
|
type StringMapString struct {
|
|
p *map[string]string
|
|
}
|
|
|
|
func NewStringMapString(p *map[string]string, val map[string]string) *StringMapString {
|
|
v := &StringMapString{
|
|
p: p,
|
|
}
|
|
|
|
if *p == nil {
|
|
*p = make(map[string]string)
|
|
}
|
|
|
|
if val != nil {
|
|
*p = val
|
|
}
|
|
|
|
return v
|
|
}
|
|
|
|
func (s *StringMapString) Set(val string) error {
|
|
mappings := make(map[string]string)
|
|
|
|
for _, elm := range strings.Split(val, " ") {
|
|
elm = strings.TrimSpace(elm)
|
|
if len(elm) == 0 {
|
|
continue
|
|
}
|
|
|
|
mapping := strings.SplitN(elm, ":", 2)
|
|
|
|
mappings[mapping[0]] = mapping[1]
|
|
}
|
|
|
|
*s.p = mappings
|
|
|
|
return nil
|
|
}
|
|
|
|
func (s *StringMapString) String() string {
|
|
if s.IsEmpty() {
|
|
return "(empty)"
|
|
}
|
|
|
|
mappings := make([]string, len(*s.p))
|
|
|
|
i := 0
|
|
for k, v := range *s.p {
|
|
mappings[i] = k + ":" + v
|
|
i++
|
|
}
|
|
|
|
return strings.Join(mappings, " ")
|
|
}
|
|
|
|
func (s *StringMapString) Validate() error {
|
|
return nil
|
|
}
|
|
|
|
func (s *StringMapString) IsEmpty() bool {
|
|
return len(*s.p) == 0
|
|
}
|
|
|
|
// boolean
|
|
|
|
type Bool bool
|
|
|
|
func NewBool(p *bool, val bool) *Bool {
|
|
*p = val
|
|
return (*Bool)(p)
|
|
}
|
|
|
|
func (b *Bool) Set(val string) error {
|
|
v, err := strconv.ParseBool(val)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
*b = Bool(v)
|
|
return nil
|
|
}
|
|
|
|
func (b *Bool) String() string {
|
|
return strconv.FormatBool(bool(*b))
|
|
}
|
|
|
|
func (b *Bool) Validate() error {
|
|
return nil
|
|
}
|
|
|
|
func (b *Bool) IsEmpty() bool {
|
|
return !bool(*b)
|
|
}
|
|
|
|
// int
|
|
|
|
type Int int
|
|
|
|
func NewInt(p *int, val int) *Int {
|
|
*p = val
|
|
return (*Int)(p)
|
|
}
|
|
|
|
func (i *Int) Set(val string) error {
|
|
v, err := strconv.Atoi(val)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
*i = Int(v)
|
|
return nil
|
|
}
|
|
|
|
func (i *Int) String() string {
|
|
return strconv.Itoa(int(*i))
|
|
}
|
|
|
|
func (i *Int) Validate() error {
|
|
return nil
|
|
}
|
|
|
|
func (i *Int) IsEmpty() bool {
|
|
return int(*i) == 0
|
|
}
|
|
|
|
// int64
|
|
|
|
type Int64 int64
|
|
|
|
func NewInt64(p *int64, val int64) *Int64 {
|
|
*p = val
|
|
return (*Int64)(p)
|
|
}
|
|
|
|
func (u *Int64) Set(val string) error {
|
|
v, err := strconv.ParseInt(val, 0, 64)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
*u = Int64(v)
|
|
return nil
|
|
}
|
|
|
|
func (u *Int64) String() string {
|
|
return strconv.FormatInt(int64(*u), 10)
|
|
}
|
|
|
|
func (u *Int64) Validate() error {
|
|
return nil
|
|
}
|
|
|
|
func (u *Int64) IsEmpty() bool {
|
|
return int64(*u) == 0
|
|
}
|
|
|
|
// uint64
|
|
|
|
type Uint64 uint64
|
|
|
|
func NewUint64(p *uint64, val uint64) *Uint64 {
|
|
*p = val
|
|
return (*Uint64)(p)
|
|
}
|
|
|
|
func (u *Uint64) Set(val string) error {
|
|
v, err := strconv.ParseUint(val, 0, 64)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
*u = Uint64(v)
|
|
return nil
|
|
}
|
|
|
|
func (u *Uint64) String() string {
|
|
return strconv.FormatUint(uint64(*u), 10)
|
|
}
|
|
|
|
func (u *Uint64) Validate() error {
|
|
return nil
|
|
}
|
|
|
|
func (u *Uint64) IsEmpty() bool {
|
|
return uint64(*u) == 0
|
|
}
|