func Decode()

in pkg/asyncapi/v2/decode.go [30:61]


func Decode(b []byte, dst interface{}) error {
	r, err := parser.NewReader(string(b)) // parser should provide another method for parsing []byte
	if err != nil {
		return errors.Wrap(err, "error reading AsyncAPI doc")
	}

	p, err := parser.New()
	if err != nil {
		return err
	}

	w := bytes.NewBuffer(nil)
	if err := p(r, w); err != nil {
		return errors.Wrap(err, "error parsing AsyncAPI doc")
	}

	raw := make(map[string]interface{})
	if err := json.Unmarshal(w.Bytes(), &raw); err != nil {
		return err
	}

	dec, err := mapstructure.NewDecoder(&mapstructure.DecoderConfig{
		DecodeHook: mapstructure.ComposeDecodeHookFunc(setModelIdentifierHook, setDefaultsHook),
		Squash:     true,
		Result:     dst,
	})
	if err != nil {
		return err
	}

	return dec.Decode(raw)
}