github.com/kyleu/dbaudit@v0.0.2-0.20240321155047-ff2f2c940496/app/lib/types/string.go (about) 1 // Package types - Content managed by Project Forge, see [projectforge.md] for details. 2 package types 3 4 import ( 5 "fmt" 6 ) 7 8 const KeyString = "string" 9 10 type String struct { 11 MinLength int `json:"minLength,omitempty"` 12 MaxLength int `json:"maxLength,omitempty"` 13 Pattern string `json:"pattern,omitempty"` 14 } 15 16 var _ Type = (*String)(nil) 17 18 func (x *String) Key() string { 19 return KeyString 20 } 21 22 func (x *String) Sortable() bool { 23 return true 24 } 25 26 func (x *String) Scalar() bool { 27 return true 28 } 29 30 func (x *String) String() string { 31 if x.MaxLength > 0 { 32 return fmt.Sprintf("%s(%d)", x.Key(), x.MaxLength) 33 } 34 return x.Key() 35 } 36 37 func (x *String) From(v any) any { 38 switch t := v.(type) { 39 case string: 40 return t 41 default: 42 return invalidInput(x.Key(), t) 43 } 44 } 45 46 func (x *String) Default(string) any { 47 return "" 48 } 49 50 func NewString() *Wrapped { 51 return Wrap(&String{}) 52 } 53 54 func NewStringArgs(minLength int, maxLength int, pattern string) *Wrapped { 55 return Wrap(&String{MinLength: minLength, MaxLength: maxLength, Pattern: pattern}) 56 }