Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/gohugoio/hugo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/parser
diff options
context:
space:
mode:
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2020-06-30 17:11:05 +0300
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2020-07-06 21:03:36 +0300
commit12a65e76df9470d9563b91a22969ddb41b7c19aa (patch)
treeab7b7b3cc67fbb9b4a86c1c347081e4e959ed8e8 /parser
parent58c0f5e6171cbf8e3ed8d73ac95a7b85168c5b2f (diff)
Add openapi3.Unmarshal
Fixes #7442 Fixes #7443
Diffstat (limited to 'parser')
-rw-r--r--parser/metadecoders/decoder.go24
1 files changed, 13 insertions, 11 deletions
diff --git a/parser/metadecoders/decoder.go b/parser/metadecoders/decoder.go
index 1a4a57076..2624ad16f 100644
--- a/parser/metadecoders/decoder.go
+++ b/parser/metadecoders/decoder.go
@@ -63,7 +63,7 @@ func (d Decoder) UnmarshalToMap(data []byte, f Format) (map[string]interface{},
return m, nil
}
- err := d.unmarshal(data, f, &m)
+ err := d.UnmarshalTo(data, f, &m)
return m, err
}
@@ -122,13 +122,13 @@ func (d Decoder) Unmarshal(data []byte, f Format) (interface{}, error) {
}
var v interface{}
- err := d.unmarshal(data, f, &v)
+ err := d.UnmarshalTo(data, f, &v)
return v, err
}
-// unmarshal unmarshals data in format f into v.
-func (d Decoder) unmarshal(data []byte, f Format, v interface{}) error {
+// UnmarshalTo unmarshals data in format f into v.
+func (d Decoder) UnmarshalTo(data []byte, f Format, v interface{}) error {
var err error
@@ -156,15 +156,17 @@ func (d Decoder) unmarshal(data []byte, f Format, v interface{}) error {
case *interface{}:
ptr = *v.(*interface{})
default:
- return errors.Errorf("unknown type %T in YAML unmarshal", v)
+ // Not a map.
}
- if mm, changed := stringifyMapKeys(ptr); changed {
- switch v.(type) {
- case *map[string]interface{}:
- *v.(*map[string]interface{}) = mm.(map[string]interface{})
- case *interface{}:
- *v.(*interface{}) = mm
+ if ptr != nil {
+ if mm, changed := stringifyMapKeys(ptr); changed {
+ switch v.(type) {
+ case *map[string]interface{}:
+ *v.(*map[string]interface{}) = mm.(map[string]interface{})
+ case *interface{}:
+ *v.(*interface{}) = mm
+ }
}
}
case CSV: