Documentation
¶
Index ¶
- Constants
- type FieldBindingError
- type FieldFlagSet
- type FieldInfo
- type FieldInfoImpl
- func (f *FieldInfoImpl) Desc() string
- func (f *FieldInfoImpl) FindFlag(predicate func(v string) bool) bool
- func (f *FieldInfoImpl) HasFlag(v string) bool
- func (f *FieldInfoImpl) IDName() string
- func (f *FieldInfoImpl) Index() int
- func (f *FieldInfoImpl) Name() string
- func (f *FieldInfoImpl) Tag() reflect.StructTag
- type FieldValueEntity
- type FieldValueMap
- type FunctionStructBinder
- type Iterator
- type MissingRequiredFieldError
- type Struct
- func (s *Struct) Bind(binder StructBinder) error
- func (s *Struct) BindChan(iterator <-chan FieldValueEntity, buildValueBinder ValueBindProvider) error
- func (s *Struct) BindFields(values []FieldValueEntity, buildValueBinder ValueBindProvider) error
- func (s *Struct) BindIterator(iterator Iterator, buildValueBinder ValueBindProvider) error
- func (s *Struct) BindMap(values map[string]interface{}, buildValueBinder ValueBindProvider) error
- func (s *Struct) Map(mapper StructMapper) error
- func (s *Struct) Visit(visitor StructVisitor)
- type StructBinder
- type StructMapper
- type StructProtoContext
- func (ctx *StructProtoContext) CheckIfMissingRequiredFields(visitFieldProc func() <-chan string) error
- func (ctx *StructProtoContext) Field(name string) (v reflect.Value, ok bool)
- func (ctx *StructProtoContext) FieldInfo(name string) FieldInfo
- func (ctx *StructProtoContext) FieldNames() []string
- func (ctx *StructProtoContext) IsRequired(name string) bool
- func (ctx *StructProtoContext) RequiredFields() []string
- func (ctx *StructProtoContext) Target() reflect.Value
- type StructProtoResolveOption
- type StructProtoResolver
- type StructVisitor
- type Tag
- type TagResolver
- type Unmarshaler
- type ValueBindProvider
- type ValueBinder
Examples ¶
Constants ¶
View Source
const ( RequiredFlag = common.RequiredFlag BlankFlag = common.BlankFlag )
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type FieldBindingError ¶
func (*FieldBindingError) Error ¶
func (e *FieldBindingError) Error() string
func (*FieldBindingError) Unwrap ¶
func (e *FieldBindingError) Unwrap() error
Unwrap returns the underlying error.
type FieldFlagSet ¶
type FieldFlagSet []string
type FieldInfoImpl ¶
type FieldInfoImpl struct {
// contains filtered or unexported fields
}
func (*FieldInfoImpl) FindFlag ¶
func (f *FieldInfoImpl) FindFlag(predicate func(v string) bool) bool
FindFlag implements FieldInfo.
func (*FieldInfoImpl) HasFlag ¶
func (f *FieldInfoImpl) HasFlag(v string) bool
HasFlag implements FieldInfo.
func (*FieldInfoImpl) Tag ¶
func (f *FieldInfoImpl) Tag() reflect.StructTag
Tag implements FieldInfo.
type FieldValueEntity ¶
type FieldValueEntity struct { Field string Value interface{} }
type FieldValueMap ¶
type FieldValueMap map[string]interface{}
Example ¶
package main import ( "fmt" "time" "github.com/Bofry/structproto" "github.com/Bofry/structproto/valuebinder" ) func main() { s := struct { Name string `demo:"*NAME"` Age *int `demo:"*AGE"` Alias []string `demo:"ALIAS"` DateOfBirth time.Time `demo:"DATE_OF_BIRTH;the character's birth of date"` Remark string `demo:"REMARK;note the character's personal favor"` }{} prototype, err := structproto.Prototypify(&s, &structproto.StructProtoResolveOption{ TagName: "demo", }) if err != nil { panic(err) } err = prototype.BindMap(structproto.FieldValueMap{ "NAME": "luffy", "AGE": "19", "ALIAS": "lucy", "DATE_OF_BIRTH": "2020-05-05T00:00:00Z", }, valuebinder.BuildStringBinder) if err != nil { panic(err) } fmt.Printf("Name : %q\n", s.Name) fmt.Printf("Age : %d\n", *s.Age) fmt.Printf("Alias : %q\n", s.Alias) fmt.Printf("DateOfBirth: %q\n", s.DateOfBirth) fmt.Printf("Remark : %q\n", s.Remark) }
Output: Name : "luffy" Age : 19 Alias : ["lucy"] DateOfBirth: "2020-05-05 00:00:00 +0000 UTC" Remark : ""
func (FieldValueMap) Iterate ¶
func (values FieldValueMap) Iterate() <-chan FieldValueEntity
type FunctionStructBinder ¶ added in v0.2.1
type FunctionStructBinder struct {
// contains filtered or unexported fields
}
func (*FunctionStructBinder) Bind ¶ added in v0.2.1
func (binder *FunctionStructBinder) Bind(field FieldInfo, rv reflect.Value) error
Bind implements StructBinder.
func (*FunctionStructBinder) Deinit ¶ added in v0.2.1
func (binder *FunctionStructBinder) Deinit(context *StructProtoContext) error
Deinit implements StructBinder.
func (*FunctionStructBinder) Init ¶ added in v0.2.1
func (binder *FunctionStructBinder) Init(context *StructProtoContext) error
Init implements StructBinder.
type Iterator ¶
type Iterator interface {
Iterate() <-chan FieldValueEntity
}
type MissingRequiredFieldError ¶
A MissingRequiredFieldError represents an error when the required fields cannot be binded or missing.
func (*MissingRequiredFieldError) Error ¶
func (e *MissingRequiredFieldError) Error() string
func (*MissingRequiredFieldError) Unwrap ¶
func (e *MissingRequiredFieldError) Unwrap() error
Unwrap returns the underlying error.
type Struct ¶
type Struct struct {
// contains filtered or unexported fields
}
func Prototypify ¶
func Prototypify(target interface{}, option *StructProtoResolveOption) (*Struct, error)
Example ¶
package main import ( "fmt" "time" "github.com/Bofry/structproto" "github.com/Bofry/structproto/valuebinder" ) func main() { s := struct { Name string `demo:"*NAME"` Age *int `demo:"*AGE"` Alias []string `demo:"ALIAS"` DateOfBirth time.Time `demo:"DATE_OF_BIRTH;the character's birth of date"` Remark string `demo:"REMARK;note the character's personal favor"` }{} prototype, err := structproto.Prototypify(&s, &structproto.StructProtoResolveOption{ TagName: "demo", }) if err != nil { panic(err) } err = prototype.BindMap(map[string]interface{}{ "NAME": "luffy", "AGE": "19", "ALIAS": "lucy", "DATE_OF_BIRTH": "2020-05-05T00:00:00Z", }, valuebinder.BuildStringBinder) if err != nil { panic(err) } fmt.Printf("Name : %q\n", s.Name) fmt.Printf("Age : %d\n", *s.Age) fmt.Printf("Alias : %q\n", s.Alias) fmt.Printf("DateOfBirth: %q\n", s.DateOfBirth) fmt.Printf("Remark : %q\n", s.Remark) }
Output: Name : "luffy" Age : 19 Alias : ["lucy"] DateOfBirth: "2020-05-05 00:00:00 +0000 UTC" Remark : ""
func (*Struct) Bind ¶
func (s *Struct) Bind(binder StructBinder) error
func (*Struct) BindChan ¶
func (s *Struct) BindChan(iterator <-chan FieldValueEntity, buildValueBinder ValueBindProvider) error
func (*Struct) BindFields ¶
func (s *Struct) BindFields(values []FieldValueEntity, buildValueBinder ValueBindProvider) error
Example ¶
package main import ( "fmt" "time" "github.com/Bofry/structproto" "github.com/Bofry/structproto/valuebinder" ) func main() { s := struct { Name string `demo:"*NAME"` Age *int `demo:"*AGE"` Alias []string `demo:"ALIAS"` DateOfBirth time.Time `demo:"DATE_OF_BIRTH;the character's birth of date"` Remark string `demo:"REMARK;note the character's personal favor"` }{} prototype, err := structproto.Prototypify(&s, &structproto.StructProtoResolveOption{ TagName: "demo", }) if err != nil { panic(err) } fieldValues := []structproto.FieldValueEntity{ {Field: "NAME", Value: "luffy"}, {Field: "AGE", Value: "19"}, {Field: "ALIAS", Value: "lucy"}, {Field: "DATE_OF_BIRTH", Value: "2020-05-05T00:00:00Z"}, } err = prototype.BindFields(fieldValues, valuebinder.BuildStringBinder) if err != nil { panic(err) } fmt.Printf("Name : %q\n", s.Name) fmt.Printf("Age : %d\n", *s.Age) fmt.Printf("Alias : %q\n", s.Alias) fmt.Printf("DateOfBirth: %q\n", s.DateOfBirth) fmt.Printf("Remark : %q\n", s.Remark) }
Output: Name : "luffy" Age : 19 Alias : ["lucy"] DateOfBirth: "2020-05-05 00:00:00 +0000 UTC" Remark : ""
func (*Struct) BindIterator ¶
func (s *Struct) BindIterator(iterator Iterator, buildValueBinder ValueBindProvider) error
func (*Struct) BindMap ¶
func (s *Struct) BindMap(values map[string]interface{}, buildValueBinder ValueBindProvider) error
Example ¶
package main import ( "fmt" "time" "github.com/Bofry/structproto" "github.com/Bofry/structproto/valuebinder" ) func main() { s := struct { Name string `demo:"*NAME"` Age *int `demo:"*AGE"` Alias []string `demo:"ALIAS"` DateOfBirth time.Time `demo:"DATE_OF_BIRTH;the character's birth of date"` Remark string `demo:"REMARK;note the character's personal favor"` }{} prototype, err := structproto.Prototypify(&s, &structproto.StructProtoResolveOption{ TagName: "demo", }) if err != nil { panic(err) } err = prototype.BindMap(map[string]interface{}{ "NAME": "luffy", "AGE": "19", "ALIAS": "lucy", "DATE_OF_BIRTH": "2020-05-05T00:00:00Z", }, valuebinder.BuildStringBinder) if err != nil { panic(err) } fmt.Printf("Name : %q\n", s.Name) fmt.Printf("Age : %d\n", *s.Age) fmt.Printf("Alias : %q\n", s.Alias) fmt.Printf("DateOfBirth: %q\n", s.DateOfBirth) fmt.Printf("Remark : %q\n", s.Remark) }
Output: Name : "luffy" Age : 19 Alias : ["lucy"] DateOfBirth: "2020-05-05 00:00:00 +0000 UTC" Remark : ""
func (*Struct) Map ¶ added in v0.2.1
func (s *Struct) Map(mapper StructMapper) error
func (*Struct) Visit ¶
func (s *Struct) Visit(visitor StructVisitor)
type StructBinder ¶
type StructBinder interface { Init(context *StructProtoContext) error Bind(field FieldInfo, rv reflect.Value) error Deinit(context *StructProtoContext) error }
type StructProtoContext ¶
type StructProtoContext Struct
func (*StructProtoContext) CheckIfMissingRequiredFields ¶
func (ctx *StructProtoContext) CheckIfMissingRequiredFields(visitFieldProc func() <-chan string) error
func (*StructProtoContext) Field ¶
func (ctx *StructProtoContext) Field(name string) (v reflect.Value, ok bool)
func (*StructProtoContext) FieldInfo ¶
func (ctx *StructProtoContext) FieldInfo(name string) FieldInfo
func (*StructProtoContext) FieldNames ¶
func (ctx *StructProtoContext) FieldNames() []string
func (*StructProtoContext) IsRequired ¶
func (ctx *StructProtoContext) IsRequired(name string) bool
func (*StructProtoContext) RequiredFields ¶
func (ctx *StructProtoContext) RequiredFields() []string
func (*StructProtoContext) Target ¶
func (ctx *StructProtoContext) Target() reflect.Value
type StructProtoResolveOption ¶
type StructProtoResolveOption struct { TagName string TagResolver TagResolver CheckDuplicateNames bool }
type StructProtoResolver ¶
type StructProtoResolver struct {
// contains filtered or unexported fields
}
func NewStructProtoResolver ¶
func NewStructProtoResolver(option *StructProtoResolveOption) *StructProtoResolver
func (*StructProtoResolver) Resolve ¶
func (r *StructProtoResolver) Resolve(target interface{}) (*Struct, error)
type TagResolver ¶
type TagResolver = common.TagResolver
type Unmarshaler ¶ added in v0.2.2
type Unmarshaler = common.Unmarshaler
type ValueBindProvider ¶
type ValueBindProvider = common.ValueBindProvider
type ValueBinder ¶
type ValueBinder = common.ValueBinder
Source Files
¶
Click to show internal directories.
Click to hide internal directories.