@@ -164,38 +164,50 @@ var _ json.Unmarshaler = &Field{}
164164var _ yaml.Unmarshaler = & Field {}
165165
166166func (in * Field ) UnmarshalJSON (data []byte ) error {
167- rnode , err := yaml .Parse (string (data ))
167+ rNode , err := yaml .Parse (string (data ))
168168 if err != nil {
169169 return fmt .Errorf ("error parsing `field`: %v" , err )
170170 }
171171
172- return in .unmarshalRNode (rnode )
172+ return in .unmarshalRNode (rNode )
173173}
174174
175175func (in * Field ) UnmarshalYAML (value * yaml.Node ) error {
176- rnode := yaml .NewRNode (value )
176+ rNode := yaml .NewRNode (value )
177177
178- return in .unmarshalRNode (rnode )
178+ return in .unmarshalRNode (rNode )
179179}
180180
181- func (in * Field ) unmarshalRNode (rnode * yaml.RNode ) error {
182- if path , err := rnode .GetString ("path" ); err == nil {
181+ func (in * Field ) unmarshalRNode (rNode * yaml.RNode ) error {
182+ if path , err := rNode .GetString ("path" ); err == nil {
183183 in .Path = strings .TrimSpace (path )
184184 }
185185
186- if currentValue , err := rnode .Pipe (yaml .Lookup ("currentValue" )); err == nil {
187- in .CurrentValue , err = currentValue .String ()
188- if err != nil {
189- return fmt .Errorf ("error parsing `field.currentValue`: %v" , err )
186+ if currentValue , err := rNode .Pipe (yaml .Lookup ("currentValue" )); err == nil && currentValue .YNode () != nil {
187+ switch currentValue .YNode ().Kind {
188+ case yaml .ScalarNode :
189+ in .CurrentValue = currentValue .YNode ().Value
190+ default :
191+ in .CurrentValue , err = currentValue .String ()
192+ if err != nil {
193+ return fmt .Errorf ("error parsing `field.currentValue`: %v" , err )
194+ }
190195 }
196+
191197 in .CurrentValue = strings .TrimSpace (in .CurrentValue )
192198 }
193199
194- if proposedValue , err := rnode .Pipe (yaml .Lookup ("proposedValue" )); err == nil {
195- in .ProposedValue , err = proposedValue .String ()
196- if err != nil {
197- return fmt .Errorf ("error parsing `field.proposedValue`: %v" , err )
200+ if proposedValue , err := rNode .Pipe (yaml .Lookup ("proposedValue" )); err == nil && proposedValue .YNode () != nil {
201+ switch proposedValue .YNode ().Kind {
202+ case yaml .ScalarNode :
203+ in .ProposedValue = proposedValue .YNode ().Value
204+ default :
205+ in .ProposedValue , err = proposedValue .String ()
206+ if err != nil {
207+ return fmt .Errorf ("error parsing `field.proposedValue`: %v" , err )
208+ }
198209 }
210+
199211 in .ProposedValue = strings .TrimSpace (in .ProposedValue )
200212 }
201213
0 commit comments