90 lines
2.2 KiB
Go
90 lines
2.2 KiB
Go
package structure
|
|
|
|
// Struct encapsulates a struct type to provide several high level functions
|
|
// around the structure.
|
|
type Struct struct {
|
|
raw interface{}
|
|
}
|
|
|
|
// New returns a new *Struct with the struct s.
|
|
func New(s interface{}) *Struct {
|
|
return &Struct{
|
|
raw: s,
|
|
}
|
|
}
|
|
|
|
// Map converts the given struct to a map[string]interface{}. For more info
|
|
// refer to Map() function.
|
|
func (s *Struct) Map() map[string]interface{} {
|
|
return Map(s.raw)
|
|
}
|
|
|
|
// Values converts the given struct to a []interface{}. For more info refer to
|
|
// Values() function.
|
|
func (s *Struct) Values() []interface{} {
|
|
return Values(s.raw)
|
|
}
|
|
|
|
// Fields returns a slice of field names For more info refer to Fields()
|
|
// function.
|
|
func (s *Struct) Fields() []string {
|
|
return Fields(s.raw)
|
|
}
|
|
|
|
// Field returns a new Field struct that provides several high level functions
|
|
// around a single struct field entitiy. It panics if the field is not found or
|
|
// is unexported.
|
|
func (s *Struct) Field(name string) *Field {
|
|
f, ok := s.FieldOk(name)
|
|
if !ok {
|
|
panic("field not found")
|
|
}
|
|
|
|
return f
|
|
}
|
|
|
|
// Field returns a new Field struct that provides several high level functions
|
|
// around a single struct field entitiy and a boolean indicating if the field
|
|
// was found. It panics if the or is unexported.
|
|
func (s *Struct) FieldOk(name string) (*Field, bool) {
|
|
v := strctVal(s.raw)
|
|
t := v.Type()
|
|
|
|
field, ok := t.FieldByName(name)
|
|
if !ok {
|
|
return nil, false
|
|
}
|
|
|
|
if field.PkgPath != "" {
|
|
panic("unexported field access is not allowed")
|
|
}
|
|
|
|
return &Field{
|
|
field: field,
|
|
value: v.FieldByName(name),
|
|
}, true
|
|
}
|
|
|
|
// IsZero returns true if all fields is equal to a zero value. For more info
|
|
// refer to IsZero() function.
|
|
func (s *Struct) IsZero() bool {
|
|
return IsZero(s.raw)
|
|
}
|
|
|
|
// HasZero returns true if any field is equal to a zero value. For more info
|
|
// refer to HasZero() function.
|
|
func (s *Struct) HasZero() bool {
|
|
return HasZero(s.raw)
|
|
}
|
|
|
|
// Name returns the structs's type name within its package. For more info refer
|
|
// to Name() function.
|
|
func (s *Struct) Name() string {
|
|
return Name(s)
|
|
}
|
|
|
|
// IsStruct returns true if its a struct or a pointer to struct.
|
|
func (s *Struct) IsStruct() bool {
|
|
return IsStruct(s.raw)
|
|
}
|