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  }