func()

in lib/xml.go [146:177]


func (l xmlLib) decodeXMLWithXSD(arg0, arg1 ref.Val) ref.Val {
	xsd, ok := arg1.(types.String)
	if !ok {
		return types.ValOrErr(xsd, "no such overload for decode_xml: %s", arg1.Type())
	}
	details, ok := l.xsdDetails[string(xsd)]
	if !ok && xsd != "" {
		return types.NewErr("no xsd %s", xsd)
	}

	var r io.Reader
	switch msg := arg0.(type) {
	case types.Bytes:
		r = bytes.NewReader(msg)
	case types.String:
		r = strings.NewReader(string(msg))
	default:
		return types.NoSuchOverloadErr()
	}
	cdata, v, err := xml.Unmarshal(r, details)
	if err != nil {
		return types.NewErr("failed to unmarshal XML document: %v", err)
	}
	m := make(map[string]any)
	if cdata != "" {
		m["#text"] = cdata
	}
	if v != nil {
		m["doc"] = v
	}
	return l.adapter.NativeToValue(m)
}