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.