github.com/benma/gogen@v0.0.0-20160826115606-cf49914b915a/unmarshalmap/testpkg/nested_unmarshalmap.go (about) 1 /* 2 * CODE GENERATED AUTOMATICALLY WITH github.com/ernesto-jimenez/gogen/unmarshalmap 3 * THIS FILE SHOULD NOT BE EDITED BY HAND 4 */ 5 6 package testpkg 7 8 import ( 9 "fmt" 10 ) 11 12 // UnmarshalMap takes a map and unmarshals the fieds into the struct 13 func (s *Nested) UnmarshalMap(m map[string]interface{}) error { 14 15 // Struct First 16 if m, ok := m["First"].(map[string]interface{}); ok { 17 var s *Embedded = &s.First 18 // Fill object 19 20 if v, ok := m["Field"].(string); ok { 21 s.Field = v 22 23 } else if v, exists := m["Field"]; exists && v != nil { 24 return fmt.Errorf("expected field Field to be string but got %T", m["Field"]) 25 } 26 27 } else if v, exists := m["First"]; exists && v != nil { 28 return fmt.Errorf("expected field First to be map[string]interface{} but got %T", m["First"]) 29 } 30 31 // Pointer Second 32 if p, ok := m["Second"]; ok { 33 34 if m, ok := p.(map[string]interface{}); ok { 35 if s.Second == nil { 36 s.Second = &Embedded{} 37 } 38 s := s.Second 39 40 if v, ok := m["Field"].(string); ok { 41 s.Field = v 42 43 } else if v, exists := m["Field"]; exists && v != nil { 44 return fmt.Errorf("expected field Field to be string but got %T", m["Field"]) 45 } 46 47 } else if p == nil { 48 s.Second = nil 49 } else { 50 return fmt.Errorf("expected field Second to be map[string]interface{} but got %T", p) 51 } 52 53 } 54 55 // ArrayOrSlice Third 56 57 if v, ok := m["Third"].([]interface{}); ok { 58 59 s.Third = make([]Embedded, len(v)) 60 61 prev := s 62 for i, el := range v { 63 var s *Embedded 64 65 s = &prev.Third[i] 66 67 if m, ok := el.(map[string]interface{}); ok { 68 // Fill object 69 70 if v, ok := m["Field"].(string); ok { 71 s.Field = v 72 73 } else if v, exists := m["Field"]; exists && v != nil { 74 return fmt.Errorf("expected field Field to be string but got %T", m["Field"]) 75 } 76 77 } 78 } 79 } else if v, exists := m["Third"]; exists && v != nil { 80 return fmt.Errorf("expected field Third to be []interface{} but got %T", m["Third"]) 81 } 82 83 // ArrayOrSlice Fourth 84 85 if v, ok := m["Fourth"].([]interface{}); ok { 86 87 s.Fourth = make([]*Embedded, len(v)) 88 89 prev := s 90 for i, el := range v { 91 var s *Embedded 92 93 if el == nil { 94 continue 95 } 96 prev.Fourth[i] = &Embedded{} 97 s = prev.Fourth[i] 98 99 if m, ok := el.(map[string]interface{}); ok { 100 // Fill object 101 102 if v, ok := m["Field"].(string); ok { 103 s.Field = v 104 105 } else if v, exists := m["Field"]; exists && v != nil { 106 return fmt.Errorf("expected field Field to be string but got %T", m["Field"]) 107 } 108 109 } 110 } 111 } else if v, exists := m["Fourth"]; exists && v != nil { 112 return fmt.Errorf("expected field Fourth to be []interface{} but got %T", m["Fourth"]) 113 } 114 115 // ArrayOrSlice Fifth 116 117 if v, ok := m["Fifth"].([]interface{}); ok { 118 119 if len(s.Fifth) < len(v) { 120 return fmt.Errorf("expected field Fifth to be an array with %d elements, but got an array with %d", len(s.Fifth), len(v)) 121 } 122 123 prev := s 124 for i, el := range v { 125 var s *Embedded 126 127 s = &prev.Fifth[i] 128 129 if m, ok := el.(map[string]interface{}); ok { 130 // Fill object 131 132 if v, ok := m["Field"].(string); ok { 133 s.Field = v 134 135 } else if v, exists := m["Field"]; exists && v != nil { 136 return fmt.Errorf("expected field Field to be string but got %T", m["Field"]) 137 } 138 139 } 140 } 141 } else if v, exists := m["Fifth"]; exists && v != nil { 142 return fmt.Errorf("expected field Fifth to be []interface{} but got %T", m["Fifth"]) 143 } 144 145 // ArrayOrSlice Sixth 146 147 if v, ok := m["Sixth"].([]interface{}); ok { 148 149 if len(s.Sixth) < len(v) { 150 return fmt.Errorf("expected field Sixth to be an array with %d elements, but got an array with %d", len(s.Sixth), len(v)) 151 } 152 153 prev := s 154 for i, el := range v { 155 var s *Embedded 156 157 if el == nil { 158 continue 159 } 160 prev.Sixth[i] = &Embedded{} 161 s = prev.Sixth[i] 162 163 if m, ok := el.(map[string]interface{}); ok { 164 // Fill object 165 166 if v, ok := m["Field"].(string); ok { 167 s.Field = v 168 169 } else if v, exists := m["Field"]; exists && v != nil { 170 return fmt.Errorf("expected field Field to be string but got %T", m["Field"]) 171 } 172 173 } 174 } 175 } else if v, exists := m["Sixth"]; exists && v != nil { 176 return fmt.Errorf("expected field Sixth to be []interface{} but got %T", m["Sixth"]) 177 } 178 179 return nil 180 }