github.com/egonelbre/exp@v0.0.0-20240430123955-ed1d3aa93911/fields/03_compose/scan.go (about) 1 package main 2 3 import ( 4 "fmt" 5 "strings" 6 ) 7 8 type jsonConfig struct { 9 Fields []jsonField 10 } 11 12 type jsonField struct { 13 Name string 14 Type string 15 Val interface{} 16 Multiplier interface{} 17 } 18 19 //gistsnip:start:scan 20 func (config *jsonConfig) Scan(fields ...Field) error { 21 for _, dst := range fields { 22 name := dst.Name() 23 src, err := config.findField(name) 24 if err != nil { 25 return err 26 } 27 28 err = dst.Assign(src.Type, src.Val) 29 if err != nil { 30 return err 31 } 32 } 33 return nil 34 } 35 36 //gistsnip:end:scan 37 38 func (config *jsonConfig) findField(name string) (*jsonField, error) { 39 for i := 0; i < len(config.Fields); i++ { 40 field := &config.Fields[i] 41 if strings.EqualFold(field.Name, name) { 42 return field, nil 43 } 44 } 45 return nil, fmt.Errorf("unable to find field " + name) 46 }