func()

in load.go [285:325]


func (f *extensionFields) UnmarshalYAML(dt []byte) error {
	// We need to store the raw yaml data for each extension key.
	// Parse the yaml, grab all the extension keys and store the raw values in f.

	parsed, err := parser.ParseBytes(dt, parser.ParseComments)
	if err != nil {
		return errors.Wrapf(err, "error parsing yaml: \n%s", string(dt))
	}

	if len(parsed.Docs) != 1 {
		return errors.New("expected exactly one yaml document")
	}

	doc := parsed.Docs[0]
	if doc.Body == nil {
		return nil
	}

	body, ok := doc.Body.(*ast.MappingNode)
	if !ok {
		return errors.Errorf("expected a mapping node, got %T", body)
	}

	var ext extensionFields
	for _, v := range body.Values {
		key := v.Key.String()
		if !strings.HasPrefix(key, "x-") && !strings.HasPrefix(key, "X-") {
			return errors.Errorf("extension mapping key %q must not start with x-", key)
		}

		if ext == nil {
			ext = make(extensionFields)
		}
		ext[key] = rawYAML(v.Value.String())
	}

	if ext != nil {
		*f = ext
	}
	return nil
}