Do not marshal 'empty' error elements

This commit is contained in:
Mickael Remond 2018-01-26 11:16:04 +01:00
parent ad6e09a0f6
commit 266ed9b1e4
No known key found for this signature in database
GPG key ID: E6F6045D79965AA3
2 changed files with 20 additions and 5 deletions

14
iq.go
View file

@ -77,16 +77,26 @@ func (x *Err) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
}
func (x Err) MarshalXML(e *xml.Encoder, start xml.StartElement) (err error) {
if x.Code == 0 {
return nil
}
// Encode start element and attributes
start.Name = xml.Name{Local: "error"}
code := xml.Attr{
Name: xml.Name{Local: "code"},
Value: strconv.Itoa(x.Code),
}
start.Attr = append(start.Attr, code)
if len(x.Type) > 0 {
typ := xml.Attr{
Name: xml.Name{Local: "type"},
Value: x.Type,
}
start.Name = xml.Name{Local: "error"}
start.Attr = append(start.Attr, code, typ)
start.Attr = append(start.Attr, typ)
}
err = e.EncodeToken(start)
// SubTags

View file

@ -2,6 +2,7 @@ package xmpp // import "fluux.io/xmpp"
import (
"encoding/xml"
"strings"
"testing"
"github.com/google/go-cmp/cmp"
@ -51,6 +52,10 @@ func TestGenerateIq(t *testing.T) {
t.Errorf("cannot marshal xml structure")
}
if strings.Contains(string(data), "<error ") {
t.Error("empty error should not be serialized")
}
parsedIQ := IQ{}
if err = xml.Unmarshal(data, &parsedIQ); err != nil {
t.Errorf("Unmarshal(%s) returned error", data)