github.com/wawandco/oxplugins@v0.7.11/tools/buffalo/model/attributes.go (about) 1 package model 2 3 import ( 4 "strings" 5 6 "github.com/gobuffalo/flect/name" 7 ) 8 9 type attr struct { 10 Name name.Ident 11 goType string 12 } 13 14 // GoType returns the Go type for an Attr based on its type 15 func (a attr) GoType() string { 16 switch strings.ToLower(a.goType) { 17 case "text": 18 return "string" 19 case "timestamp", "datetime", "date", "time": 20 return "time.Time" 21 case "nulls.bool": 22 return "nulls.Bool" 23 case "nulls.int": 24 return "nulls.Int" 25 case "nulls.decimal", "nulls.float": 26 return "nulls.Float64" 27 case "nulls.text": 28 return "nulls.String" 29 case "nulls.time": 30 return "nulls.Time" 31 case "nulls.uuid": 32 return "nulls.UUID" 33 case "uuid": 34 return "uuid.UUID" 35 case "json", "jsonb": 36 return "slices.Map" 37 case "[]string": 38 return "slices.String" 39 case "[]int": 40 return "slices.Int" 41 case "slices.float", "[]float", "[]float32", "[]float64": 42 return "slices.Float" 43 case "decimal", "float": 44 return "float64" 45 case "[]byte", "blob": 46 return "[]byte" 47 default: 48 return a.goType 49 } 50 } 51 52 func buildAttrs(args []string) []attr { 53 var attrs []attr 54 defaults := defaultAttrs(args) 55 args = append(defaults, args...) 56 57 for _, arg := range args { 58 slice := strings.Split(arg, ":") 59 if len(slice) == 1 { 60 slice = append(slice, "string") 61 } 62 63 attrs = append(attrs, attr{ 64 Name: name.New(slice[0]), 65 goType: strings.ToLower(slice[1]), 66 }) 67 } 68 69 return attrs 70 } 71 72 // defaultAttrs appends the default attributes if they are not specified 73 func defaultAttrs(args []string) []string { 74 defaults := []string{"id:uuid", "created_at:timestamp", "updated_at:timestamp"} 75 76 if len(args) == 0 { 77 return defaults 78 } 79 80 m := make(map[string]bool) 81 for _, arg := range args { 82 element := strings.ToLower(strings.Split(arg, ":")[0]) 83 if _, ok := m[element]; !ok { 84 m[element] = true 85 } 86 } 87 88 attrs := []string{} 89 if _, ok := m["id"]; !ok { 90 attrs = append(attrs, defaults[0]) 91 } 92 93 if _, ok := m["created_at"]; !ok { 94 attrs = append(attrs, defaults[1]) 95 } 96 97 if _, ok := m["updated_at"]; !ok { 98 attrs = append(attrs, defaults[2]) 99 } 100 101 return attrs 102 }