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) { 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{ code := xml.Attr{
Name: xml.Name{Local: "code"}, Name: xml.Name{Local: "code"},
Value: strconv.Itoa(x.Code), Value: strconv.Itoa(x.Code),
} }
start.Attr = append(start.Attr, code)
if len(x.Type) > 0 {
typ := xml.Attr{ typ := xml.Attr{
Name: xml.Name{Local: "type"}, Name: xml.Name{Local: "type"},
Value: x.Type, Value: x.Type,
} }
start.Name = xml.Name{Local: "error"} start.Attr = append(start.Attr, typ)
start.Attr = append(start.Attr, code, typ) }
err = e.EncodeToken(start) err = e.EncodeToken(start)
// SubTags // SubTags

View File

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