func()

in internal/azure/types/resource_type.go [66:157]


func (t *ResourceType) UnmarshalJSON(body []byte) error {
	var m map[string]*json.RawMessage
	err := json.Unmarshal(body, &m)
	if err != nil {
		return err
	}
	for k, v := range m {
		switch k {
		case "$type":
			if v != nil {
				var typeRef string
				err := json.Unmarshal(*v, &typeRef)
				if err != nil {
					return err
				}
				t.Type = typeRef
			}
		case "name":
			if v != nil {
				var name string
				err := json.Unmarshal(*v, &name)
				if err != nil {
					return err
				}
				t.Name = name
			}
		case "scopeType":
			if v != nil {
				var scopeType int
				err := json.Unmarshal(*v, &scopeType)
				if err != nil {
					return err
				}
				scopeTypes := make([]ScopeType, 0)
				for _, f := range PossibleScopeTypeValues() {
					if scopeType&int(f) != 0 {
						scopeTypes = append(scopeTypes, f)
					}
				}
				if scopeType == 0 {
					scopeTypes = append(scopeTypes, Unknown)
				}
				t.ScopeTypes = scopeTypes
			}
		case "readOnlyScopes":
			if v != nil {
				var scopeType int
				err := json.Unmarshal(*v, &scopeType)
				if err != nil {
					return err
				}
				scopeTypes := make([]ScopeType, 0)
				for _, f := range PossibleScopeTypeValues() {
					if scopeType&int(f) != 0 {
						scopeTypes = append(scopeTypes, f)
					}
				}
				if scopeType == 0 {
					scopeTypes = append(scopeTypes, Unknown)
				}
				t.ReadOnlyScopeTypes = scopeTypes
			}
		case "body":
			if v != nil {
				var typeRef TypeReference
				err := json.Unmarshal(*v, &typeRef)
				if err != nil {
					return err
				}
				t.Body = &typeRef
			}
		case "flags":
			if v != nil {
				var flag int
				err := json.Unmarshal(*v, &flag)
				if err != nil {
					return err
				}
				flags := make([]ResourceTypeFlag, 0)
				for _, f := range PossibleResourceTypeFlagValues() {
					if flag&int(f) != 0 {
						flags = append(flags, f)
					}
				}
				t.Flags = flags
			}
		default:
			return fmt.Errorf("unmarshalling resource type, unrecognized key: %s", k)
		}
	}
	return nil
}