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  }