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)
}