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  }