github.com/line/ostracon@v1.0.10-0.20230328032236-7f20145f065d/cmd/contract_tests/unmarshaler/unmarshal.go (about) 1 package unmarshaler 2 3 import ( 4 "encoding/json" 5 6 "gopkg.in/yaml.v3" 7 ) 8 9 type UnmarshalledArbitraryObject struct { 10 Body interface{} 11 } 12 13 func (obj *UnmarshalledArbitraryObject) GetProperty(keys ...string) interface{} { 14 body := obj.Body 15 for _, key := range keys { 16 body = body.(map[string]interface{})[key] 17 } 18 return body 19 } 20 21 func (obj *UnmarshalledArbitraryObject) SetProperty(keys []string, value interface{}) { 22 prevKeys := keys[:len(keys)-1] 23 lastKey := keys[len(keys)-1] 24 25 body := obj.Body 26 for _, key := range prevKeys { 27 body = body.(map[string]interface{})[key] 28 } 29 body.(map[string]interface{})[lastKey] = value 30 } 31 32 func (obj *UnmarshalledArbitraryObject) DeleteProperty(keys ...string) { 33 prevKeys := keys[:len(keys)-1] 34 lastKey := keys[len(keys)-1] 35 36 body := obj.Body 37 for _, key := range prevKeys { 38 body = body.(map[string]interface{})[key] 39 } 40 delete(body.(map[string]interface{}), lastKey) 41 } 42 43 func UnmarshalJSON(str *string) UnmarshalledArbitraryObject { 44 return UnmarshalledArbitraryObject{unmarshalArbitraryFormat(json.Unmarshal, str)} 45 } 46 47 func UnmarshalYAML(str *string) UnmarshalledArbitraryObject { 48 return UnmarshalledArbitraryObject{unmarshalArbitraryFormat(yaml.Unmarshal, str)} 49 } 50 51 func unmarshalArbitraryFormat(unmarshal func([]byte, interface{}) error, str *string) interface{} { 52 var body interface{} 53 err := unmarshal([]byte(*str), &body) 54 if err != nil { 55 panic(err) 56 } 57 return body 58 }