Source File
builder.go
Belonging Package
github.com/lann/builder
package builder
import (
)
type Builder struct {
builderMap ps.Map
}
var (
EmptyBuilder = Builder{ps.NewMap()}
emptyBuilderValue = reflect.ValueOf(EmptyBuilder)
)
func ( interface{}) ps.Map {
:= convert(, Builder{}).(Builder)
if .builderMap == nil {
return ps.NewMap()
}
return .builderMap
}
func ( interface{}, string, interface{}) interface{} {
:= Builder{getBuilderMap().Set(, )}
return convert(, )
}
func ( interface{}, string) interface{} {
:= Builder{getBuilderMap().Delete()}
return convert(, )
}
func ( interface{}, string, interface{}) interface{} {
if == nil {
return
}
, := getBuilderMap().Lookup()
var ps.List
if {
, = .(ps.List)
}
if ! {
= ps.NewList()
}
forEach(, func( interface{}) {
= .Cons()
})
return Set(, , )
}
func ( ps.List, reflect.Type) reflect.Value {
:= .Size()
:= reflect.MakeSlice(, , )
for := - 1; >= 0; -- {
:= reflect.ValueOf(.Head())
.Index().Set()
= .Tail()
}
return
}
var anyArrayType = reflect.TypeOf([]interface{}{})
func ( interface{}, string) (interface{}, bool) {
, := getBuilderMap().Lookup()
if ! {
return nil, false
}
, := .(ps.List)
if {
:= anyArrayType
if ast.IsExported() {
:= getBuilderStructType(reflect.TypeOf())
if != nil {
, := (*).FieldByName()
if {
= .Type
}
}
}
= listToSlice(, ).Interface()
}
return , true
}
func ( interface{}) map[string]interface{} {
:= getBuilderMap()
:= getBuilderStructType(reflect.TypeOf())
:= make(map[string]interface{}, .Size())
.ForEach(func( string, ps.Any) {
, := .(ps.List)
if {
:= anyArrayType
if != nil {
, := (*).FieldByName()
if {
= .Type
}
}
= listToSlice(, ).Interface()
}
[] =
})
return
}
func ( interface{}) interface{} {
:= newBuilderStruct(reflect.TypeOf())
if == nil {
return nil
}
return scanStruct(, )
}
func ( interface{}, interface{}) interface{} {
:= reflect.New(reflect.TypeOf()).Elem()
return scanStruct(, &)
}
func ( interface{}, *reflect.Value) interface{} {
getBuilderMap().ForEach(func( string, ps.Any) {
if ast.IsExported() {
:= .FieldByName()
var reflect.Value
switch v := .(type) {
case nil:
switch .Kind() {
case reflect.Chan, reflect.Func, reflect.Interface, reflect.Map, reflect.Ptr, reflect.Slice:
= reflect.Zero(.Type())
![]() |
The pages are generated with Golds v0.3.2-preview. (GOOS=darwin GOARCH=amd64) Golds is a Go 101 project developed by Tapir Liu. PR and bug reports are welcome and can be submitted to the issue list. Please follow @Go100and1 (reachable from the left QR code) to get the latest news of Golds. |