Exemple #1
0
func (elm *Mood) Decode(d *xmlencoder.Decoder, tag *xml.StartElement) error {
	var err error
	var t xml.Token
Loop:
	for {
		if t, err = d.Token(); err != nil {
			return err
		}
		switch t := t.(type) {
		case xml.EndElement:
			break Loop
		case xml.StartElement:
			switch {
			case t.Name.Space == NS && t.Name.Local == "text":
				var s string
				if s, err = d.Text(); err != nil {
					return err
				}
				*elm.Text = s
			default:
				if t.Name.Space == NS {
					*elm.Mood = MoodMood(t.Name.Local)
					if err = d.Skip(); err != nil {
						return err
					}
				}
			}
		}
	}
	return err
}
Exemple #2
0
func (elm *Features) Decode(d *xmlencoder.Decoder, tag *xml.StartElement) error {
	var err error
	var t xml.Token
Loop:
	for {
		if t, err = d.Token(); err != nil {
			return err
		}
		switch t := t.(type) {
		case xml.StartElement:
			if newel, ok := xmlencoder.GetExtension(t.Name); ok {
				if err = newel.(xmlencoder.Extension).Decode(d, &t); err != nil {
					return err
				}
				*elm = append(*elm, newel)
			} else {
				if err = d.Skip(); err != nil {
					return err
				}
			}
		case xml.EndElement:
			break Loop
		}
	}
	return err
}
Exemple #3
0
func (elm *Failure) Decode(d *xmlencoder.Decoder, tag *xml.StartElement) error {
	var err error
	var t xml.Token
Loop:
	for {
		if t, err = d.Token(); err != nil {
			return err
		}
		switch t := t.(type) {
		case xml.EndElement:
			break Loop
		case xml.StartElement:
			switch {
			case t.Name.Space == NS && t.Name.Local == "text":
				if err = elm.Text.Decode(d, &t); err != nil {
					return err
				}
			default:
				if t.Name.Space == NS {
					*elm.Condition = FailureCondition(t.Name.Local)
					if err = d.Skip(); err != nil {
						return err
					}
				}
			}
		}
	}
	return err
}
Exemple #4
0
func (elm *CLASS) Decode(d *xmlencoder.Decoder, tag *xml.StartElement) error {
	var err error
	var t xml.Token
Loop:
	for {
		if t, err = d.Token(); err != nil {
			return err
		}
		switch t := t.(type) {
		case xml.EndElement:
			break Loop
		case xml.StartElement:
			switch {
			default:
				if t.Name.Space == NS {
					*elm.Type = CLASSType(t.Name.Local)
					if err = d.Skip(); err != nil {
						return err
					}
				}
			}
		}
	}
	return err
}
Exemple #5
0
func (elm *Configure) Decode(d *xmlencoder.Decoder, tag *xml.StartElement) error {
	var err error
	var t xml.Token
Loop:
	for {
		if t, err = d.Token(); err != nil {
			return err
		}
		switch t := t.(type) {
		case xml.StartElement:
			if t.Name.Space == "jabber:x:data" && t.Name.Local == "x" {
				newel := &xdata.X{}
				if err = newel.Decode(d, &t); err != nil {
					return err
				}
				*elm = Configure(*newel)
			} else {
				if err = d.Skip(); err != nil {
					return err
				}
			}
		case xml.EndElement:
			break Loop
		}
	}
	return err
}
Exemple #6
0
func (elm *Session) Decode(d *xmlencoder.Decoder, tag *xml.StartElement) error {
	var err error
	if err = d.Skip(); err != nil {
		return err
	}
	return err
}
Exemple #7
0
func (elm *Iq) Decode(d *xmlencoder.Decoder, tag *xml.StartElement) error {
	var err error
	for _, x := range tag.Attr {
		switch {
		case x.Name.Space == "" && x.Name.Local == "from":
			var j *jid.JID
			if j, err = jid.New(x.Value); err != nil {
				return err
			}
			elm.From = j
		case x.Name.Space == "" && x.Name.Local == "to":
			var j *jid.JID
			if j, err = jid.New(x.Value); err != nil {
				return err
			}
			elm.To = j
		case x.Name.Space == "" && x.Name.Local == "id":
			elm.Id = xmlencoder.Copystring(x.Value)
		case x.Name.Space == "" && x.Name.Local == "type":
			value := IqType(x.Value)
			elm.Type = &value
		case x.Name.Space == "http://www.w3.org/XML/1998/namespace" && x.Name.Local == "lang":
			elm.Lang = &x.Value
		}
	}
	var t xml.Token
Loop:
	for {
		if t, err = d.Token(); err != nil {
			return err
		}
		switch t := t.(type) {
		case xml.EndElement:
			break Loop
		case xml.StartElement:
			switch {
			default:
				if newel, ok := xmlencoder.GetExtension(t.Name); ok {
					if err = newel.(xmlencoder.Extension).Decode(d, &t); err != nil {
						return err
					}
					elm.Payload = newel
				} else {
					if err = d.Skip(); err != nil {
						return err
					}
				}
			case t.Name.Space == "urn:ietf:params:xml:ns:xmpp-stanzas" && t.Name.Local == "error":
				newel := &stanza.Error{}
				if err = newel.Decode(d, &t); err != nil {
					return err
				}
				elm.Error = newel
			}
		}
	}
	return err
}
Exemple #8
0
func (elm *EMAIL) Decode(d *xmlencoder.Decoder, tag *xml.StartElement) error {
	var err error
	var t xml.Token
Loop:
	for {
		if t, err = d.Token(); err != nil {
			return err
		}
		switch t := t.(type) {
		case xml.EndElement:
			break Loop
		case xml.StartElement:
			switch {
			case t.Name.Space == NS && t.Name.Local == "HOME":
				elm.HOME = true
				if err = d.Skip(); err != nil {
					return err
				}
				continue
			case t.Name.Space == NS && t.Name.Local == "WORK":
				elm.WORK = true
				if err = d.Skip(); err != nil {
					return err
				}
				continue
			case t.Name.Space == NS && t.Name.Local == "INTERNET":
				elm.INTERNET = true
				if err = d.Skip(); err != nil {
					return err
				}
				continue
			case t.Name.Space == NS && t.Name.Local == "PREF":
				elm.PREF = true
				if err = d.Skip(); err != nil {
					return err
				}
				continue
			case t.Name.Space == NS && t.Name.Local == "X400":
				elm.X400 = true
				if err = d.Skip(); err != nil {
					return err
				}
				continue
			case t.Name.Space == NS && t.Name.Local == "USERID":
				var s string
				if s, err = d.Text(); err != nil {
					return err
				}
				*elm.USERID = s
			}
		}
	}
	return err
}
Exemple #9
0
func (elm *Field) Decode(d *xmlencoder.Decoder, tag *xml.StartElement) error {
	var err error
	for _, x := range tag.Attr {
		switch {
		case x.Name.Space == "" && x.Name.Local == "label":
			elm.Label = xmlencoder.Copystring(x.Value)
		case x.Name.Space == "" && x.Name.Local == "type":
			value := FieldType(x.Value)
			elm.Type = &value
		case x.Name.Space == "" && x.Name.Local == "var":
			elm.Var = xmlencoder.Copystring(x.Value)
		}
	}
	var t xml.Token
Loop:
	for {
		if t, err = d.Token(); err != nil {
			return err
		}
		switch t := t.(type) {
		case xml.EndElement:
			break Loop
		case xml.StartElement:
			switch {
			case t.Name.Space == NS && t.Name.Local == "desc":
				var s string
				if s, err = d.Text(); err != nil {
					return err
				}
				*elm.Desc = s
			case t.Name.Space == NS && t.Name.Local == "required":
				elm.Required = true
				if err = d.Skip(); err != nil {
					return err
				}
				continue
			case t.Name.Space == NS && t.Name.Local == "value":
				var s string
				if s, err = d.Text(); err != nil {
					return err
				}
				*elm.Value = s
			case t.Name.Space == NS && t.Name.Local == "option":
				newel := &Option{}
				if err = newel.Decode(d, &t); err != nil {
					return err
				}
				elm.Option = append(elm.Option, newel)
			}
		}
	}
	return err
}
Exemple #10
0
func (elm *Item) Decode(d *xmlencoder.Decoder, tag *xml.StartElement) error {
	var err error
	for _, x := range tag.Attr {
		switch {
		case x.Name.Space == "" && x.Name.Local == "action":
			value := ItemAction(x.Value)
			elm.Action = &value
		case x.Name.Space == "" && x.Name.Local == "order":
			var i uint64
			i, err = strconv.ParseUint(x.Value, 10, 0)
			if err == nil {
				*elm.Order = uint(i)
			}
		case x.Name.Space == "" && x.Name.Local == "type":
			value := ItemType(x.Value)
			elm.Type = &value
		case x.Name.Space == "" && x.Name.Local == "value":
			elm.Value = xmlencoder.Copystring(x.Value)
		}
	}
	var t xml.Token
Loop:
	for {
		if t, err = d.Token(); err != nil {
			return err
		}
		switch t := t.(type) {
		case xml.EndElement:
			break Loop
		case xml.StartElement:
			switch {
			case t.Name.Space == NS && t.Name.Local == "iq":
				elm.Iq = true
				if err = d.Skip(); err != nil {
					return err
				}
				continue
			case t.Name.Space == NS && t.Name.Local == "message":
				elm.Message = true
				if err = d.Skip(); err != nil {
					return err
				}
				continue
			case t.Name.Space == NS && t.Name.Local == "presence-in":
				elm.PresenceIn = true
				if err = d.Skip(); err != nil {
					return err
				}
				continue
			case t.Name.Space == NS && t.Name.Local == "presence-out":
				elm.PresenceOut = true
				if err = d.Skip(); err != nil {
					return err
				}
				continue
			}
		}
	}
	return err
}
Exemple #11
0
func (elm *Item) Decode(d *xmlencoder.Decoder, tag *xml.StartElement) error {
var err error
for _, x := range tag.Attr {
switch {
case x.Name.Space == "" && x.Name.Local == "affiliation":
value := ItemAffiliation(x.Value)
elm.Affiliation = &value
case x.Name.Space == "" && x.Name.Local == "jid":
var j *jid.JID
if j, err = jid.New(x.Value); err != nil { return err }
elm.Jid = j
case x.Name.Space == "" && x.Name.Local == "nick":
elm.Nick = xmlencoder.Copystring(x.Value)
case x.Name.Space == "" && x.Name.Local == "role":
value := ItemRole(x.Value)
elm.Role = &value
}
}
var t xml.Token
Loop:
for {
if t, err = d.Token(); err != nil { return err }
switch t := t.(type) {
case xml.EndElement:
break Loop
case xml.StartElement:
switch {
case t.Name.Space == NS && t.Name.Local == "actor":
for _, x := range tag.Attr {
switch {
case x.Name.Space == "" && x.Name.Local == "jid":
var j *jid.JID
if j, err = jid.New(x.Value); err != nil { return err }
elm.Actor.Jid = j
}
}
case t.Name.Space == NS && t.Name.Local == "reason":
var s string
if s, err = d.Text(); err != nil { return err }
*elm.Reason = s
case t.Name.Space == NS && t.Name.Local == "continue":
elm.Continue = true
if err = d.Skip(); err != nil { return err }
continue
}
}
}
return err
}
Exemple #12
0
func (elm *Item) Decode(d *xmlencoder.Decoder, tag *xml.StartElement) error {
	var err error
	for _, x := range tag.Attr {
		switch {
		case x.Name.Space == "" && x.Name.Local == "id":
			elm.Id = xmlencoder.Copystring(x.Value)
		case x.Name.Space == "" && x.Name.Local == "node":
			elm.Node = xmlencoder.Copystring(x.Value)
		case x.Name.Space == "" && x.Name.Local == "publisher":
			elm.Publisher = xmlencoder.Copystring(x.Value)
		}
	}
	var t xml.Token
Loop:
	for {
		if t, err = d.Token(); err != nil {
			return err
		}
		switch t := t.(type) {
		case xml.EndElement:
			break Loop
		case xml.StartElement:
			switch {
			default:
				if newel, ok := xmlencoder.GetExtension(t.Name); ok {
					if err = newel.(xmlencoder.Extension).Decode(d, &t); err != nil {
						return err
					}
					elm.Event = newel
				} else {
					if err = d.Skip(); err != nil {
						return err
					}
				}
			}
		}
	}
	return err
}
Exemple #13
0
func (elm *Starttls) Decode(d *xmlencoder.Decoder, tag *xml.StartElement) error {
	var err error
	var t xml.Token
Loop:
	for {
		if t, err = d.Token(); err != nil {
			return err
		}
		switch t := t.(type) {
		case xml.EndElement:
			break Loop
		case xml.StartElement:
			switch {
			case t.Name.Space == NS && t.Name.Local == "required":
				elm.Required = true
				if err = d.Skip(); err != nil {
					return err
				}
				continue
			}
		}
	}
	return err
}
Exemple #14
0
func (elm *TEL) Decode(d *xmlencoder.Decoder, tag *xml.StartElement) error {
	var err error
	var t xml.Token
Loop:
	for {
		if t, err = d.Token(); err != nil {
			return err
		}
		switch t := t.(type) {
		case xml.EndElement:
			break Loop
		case xml.StartElement:
			switch {
			case t.Name.Space == NS && t.Name.Local == "HOME":
				elm.HOME = true
				if err = d.Skip(); err != nil {
					return err
				}
				continue
			case t.Name.Space == NS && t.Name.Local == "WORK":
				elm.WORK = true
				if err = d.Skip(); err != nil {
					return err
				}
				continue
			case t.Name.Space == NS && t.Name.Local == "VOICE":
				elm.VOICE = true
				if err = d.Skip(); err != nil {
					return err
				}
				continue
			case t.Name.Space == NS && t.Name.Local == "FAX":
				elm.FAX = true
				if err = d.Skip(); err != nil {
					return err
				}
				continue
			case t.Name.Space == NS && t.Name.Local == "PAGER":
				elm.PAGER = true
				if err = d.Skip(); err != nil {
					return err
				}
				continue
			case t.Name.Space == NS && t.Name.Local == "MSG":
				elm.MSG = true
				if err = d.Skip(); err != nil {
					return err
				}
				continue
			case t.Name.Space == NS && t.Name.Local == "CELL":
				elm.CELL = true
				if err = d.Skip(); err != nil {
					return err
				}
				continue
			case t.Name.Space == NS && t.Name.Local == "VIDEO":
				elm.VIDEO = true
				if err = d.Skip(); err != nil {
					return err
				}
				continue
			case t.Name.Space == NS && t.Name.Local == "BBS":
				elm.BBS = true
				if err = d.Skip(); err != nil {
					return err
				}
				continue
			case t.Name.Space == NS && t.Name.Local == "MODEM":
				elm.MODEM = true
				if err = d.Skip(); err != nil {
					return err
				}
				continue
			case t.Name.Space == NS && t.Name.Local == "ISDN":
				elm.ISDN = true
				if err = d.Skip(); err != nil {
					return err
				}
				continue
			case t.Name.Space == NS && t.Name.Local == "PCS":
				elm.PCS = true
				if err = d.Skip(); err != nil {
					return err
				}
				continue
			case t.Name.Space == NS && t.Name.Local == "PREF":
				elm.PREF = true
				if err = d.Skip(); err != nil {
					return err
				}
				continue
			case t.Name.Space == NS && t.Name.Local == "NUMBER":
				var s string
				if s, err = d.Text(); err != nil {
					return err
				}
				*elm.NUMBER = s
			}
		}
	}
	return err
}
Exemple #15
0
func (elm *ADR) Decode(d *xmlencoder.Decoder, tag *xml.StartElement) error {
	var err error
	var t xml.Token
Loop:
	for {
		if t, err = d.Token(); err != nil {
			return err
		}
		switch t := t.(type) {
		case xml.EndElement:
			break Loop
		case xml.StartElement:
			switch {
			case t.Name.Space == NS && t.Name.Local == "HOME":
				elm.HOME = true
				if err = d.Skip(); err != nil {
					return err
				}
				continue
			case t.Name.Space == NS && t.Name.Local == "WORK":
				elm.WORK = true
				if err = d.Skip(); err != nil {
					return err
				}
				continue
			case t.Name.Space == NS && t.Name.Local == "POSTAL":
				elm.POSTAL = true
				if err = d.Skip(); err != nil {
					return err
				}
				continue
			case t.Name.Space == NS && t.Name.Local == "PARCEL":
				elm.PARCEL = true
				if err = d.Skip(); err != nil {
					return err
				}
				continue
			case t.Name.Space == NS && t.Name.Local == "PREF":
				elm.PREF = true
				if err = d.Skip(); err != nil {
					return err
				}
				continue
			case t.Name.Space == NS && t.Name.Local == "POBOX":
				var s string
				if s, err = d.Text(); err != nil {
					return err
				}
				*elm.POBOX = s
			case t.Name.Space == NS && t.Name.Local == "EXTADD":
				var s string
				if s, err = d.Text(); err != nil {
					return err
				}
				*elm.EXTADD = s
			case t.Name.Space == NS && t.Name.Local == "STREET":
				var s string
				if s, err = d.Text(); err != nil {
					return err
				}
				*elm.STREET = s
			case t.Name.Space == NS && t.Name.Local == "LOCALITY":
				var s string
				if s, err = d.Text(); err != nil {
					return err
				}
				*elm.LOCALITY = s
			case t.Name.Space == NS && t.Name.Local == "REGION":
				var s string
				if s, err = d.Text(); err != nil {
					return err
				}
				*elm.REGION = s
			case t.Name.Space == NS && t.Name.Local == "PCODE":
				var s string
				if s, err = d.Text(); err != nil {
					return err
				}
				*elm.PCODE = s
			case t.Name.Space == NS && t.Name.Local == "CTRY":
				var s string
				if s, err = d.Text(); err != nil {
					return err
				}
				*elm.CTRY = s
			default:
				if t.Name.Space == NS {
					*elm.DOMINTL = DOMINTL(t.Name.Local)
					if err = d.Skip(); err != nil {
						return err
					}
				}
			}
		}
	}
	return err
}
Exemple #16
0
func (elm *Query) Decode(d *xmlencoder.Decoder, tag *xml.StartElement) error {
	var err error
	var t xml.Token
Loop:
	for {
		if t, err = d.Token(); err != nil {
			return err
		}
		switch t := t.(type) {
		case xml.EndElement:
			break Loop
		case xml.StartElement:
			switch {
			case t.Name.Space == NS && t.Name.Local == "registered":
				if err = d.Skip(); err != nil {
					return err
				}
			case t.Name.Space == NS && t.Name.Local == "instructions":
				var s string
				if s, err = d.Text(); err != nil {
					return err
				}
				*elm.Fields.Instructions = s
			case t.Name.Space == NS && t.Name.Local == "username":
				var s string
				if s, err = d.Text(); err != nil {
					return err
				}
				*elm.Fields.Username = s
			case t.Name.Space == NS && t.Name.Local == "nick":
				var s string
				if s, err = d.Text(); err != nil {
					return err
				}
				*elm.Fields.Nick = s
			case t.Name.Space == NS && t.Name.Local == "password":
				var s string
				if s, err = d.Text(); err != nil {
					return err
				}
				*elm.Fields.Password = s
			case t.Name.Space == NS && t.Name.Local == "name":
				var s string
				if s, err = d.Text(); err != nil {
					return err
				}
				*elm.Fields.Name = s
			case t.Name.Space == NS && t.Name.Local == "first":
				var s string
				if s, err = d.Text(); err != nil {
					return err
				}
				*elm.Fields.First = s
			case t.Name.Space == NS && t.Name.Local == "last":
				var s string
				if s, err = d.Text(); err != nil {
					return err
				}
				*elm.Fields.Last = s
			case t.Name.Space == NS && t.Name.Local == "email":
				var s string
				if s, err = d.Text(); err != nil {
					return err
				}
				*elm.Fields.Email = s
			case t.Name.Space == NS && t.Name.Local == "address":
				var s string
				if s, err = d.Text(); err != nil {
					return err
				}
				*elm.Fields.Address = s
			case t.Name.Space == NS && t.Name.Local == "city":
				var s string
				if s, err = d.Text(); err != nil {
					return err
				}
				*elm.Fields.City = s
			case t.Name.Space == NS && t.Name.Local == "state":
				var s string
				if s, err = d.Text(); err != nil {
					return err
				}
				*elm.Fields.State = s
			case t.Name.Space == NS && t.Name.Local == "zip":
				var s string
				if s, err = d.Text(); err != nil {
					return err
				}
				*elm.Fields.Zip = s
			case t.Name.Space == NS && t.Name.Local == "phone":
				var s string
				if s, err = d.Text(); err != nil {
					return err
				}
				*elm.Fields.Phone = s
			case t.Name.Space == NS && t.Name.Local == "url":
				var s string
				if s, err = d.Text(); err != nil {
					return err
				}
				*elm.Fields.Url = s
			case t.Name.Space == NS && t.Name.Local == "date":
				var s string
				if s, err = d.Text(); err != nil {
					return err
				}
				*elm.Fields.Date = s
			case t.Name.Space == NS && t.Name.Local == "misc":
				var s string
				if s, err = d.Text(); err != nil {
					return err
				}
				*elm.Fields.Misc = s
			case t.Name.Space == NS && t.Name.Local == "text":
				var s string
				if s, err = d.Text(); err != nil {
					return err
				}
				*elm.Fields.Text = s
			case t.Name.Space == NS && t.Name.Local == "key":
				var s string
				if s, err = d.Text(); err != nil {
					return err
				}
				*elm.Fields.Key = s
			case t.Name.Space == NS && t.Name.Local == "remove":
				elm.Remove = true
				if err = d.Skip(); err != nil {
					return err
				}
				continue
			case t.Name.Space == "jabber:x:data" && t.Name.Local == "x":
				newel := &xdata.X{}
				if err = newel.Decode(d, &t); err != nil {
					return err
				}
				elm.Xdata = newel
			case t.Name.Space == "jabber:x:oob" && t.Name.Local == "x":
				newel := &xoob.X{}
				if err = newel.Decode(d, &t); err != nil {
					return err
				}
				elm.Xoob = newel
			}
		}
	}
	return err
}
Exemple #17
0
func (elm *LABEL) Decode(d *xmlencoder.Decoder, tag *xml.StartElement) error {
	var err error
	var t xml.Token
Loop:
	for {
		if t, err = d.Token(); err != nil {
			return err
		}
		switch t := t.(type) {
		case xml.EndElement:
			break Loop
		case xml.StartElement:
			switch {
			case t.Name.Space == NS && t.Name.Local == "HOME":
				elm.HOME = true
				if err = d.Skip(); err != nil {
					return err
				}
				continue
			case t.Name.Space == NS && t.Name.Local == "WORK":
				elm.WORK = true
				if err = d.Skip(); err != nil {
					return err
				}
				continue
			case t.Name.Space == NS && t.Name.Local == "POSTAL":
				elm.POSTAL = true
				if err = d.Skip(); err != nil {
					return err
				}
				continue
			case t.Name.Space == NS && t.Name.Local == "PARCEL":
				elm.PARCEL = true
				if err = d.Skip(); err != nil {
					return err
				}
				continue
			case t.Name.Space == NS && t.Name.Local == "PREF":
				elm.PREF = true
				if err = d.Skip(); err != nil {
					return err
				}
				continue
			case t.Name.Space == NS && t.Name.Local == "LINE":
				var s string
				if s, err = d.Text(); err != nil {
					return err
				}
				elm.LINE = append(elm.LINE, s)
			default:
				if t.Name.Space == NS {
					*elm.DOMINTL = DOMINTL(t.Name.Local)
					if err = d.Skip(); err != nil {
						return err
					}
				}
			}
		}
	}
	return err
}
Exemple #18
0
func (elm *Presence) Decode(d *xmlencoder.Decoder, tag *xml.StartElement) error {
	var err error
	for _, x := range tag.Attr {
		switch {
		case x.Name.Space == "" && x.Name.Local == "from":
			var j *jid.JID
			if j, err = jid.New(x.Value); err != nil {
				return err
			}
			elm.From = j
		case x.Name.Space == "" && x.Name.Local == "to":
			var j *jid.JID
			if j, err = jid.New(x.Value); err != nil {
				return err
			}
			elm.To = j
		case x.Name.Space == "" && x.Name.Local == "id":
			elm.Id = xmlencoder.Copystring(x.Value)
		case x.Name.Space == "" && x.Name.Local == "type":
			value := PresenceType(x.Value)
			elm.Type = &value
		case x.Name.Space == "http://www.w3.org/XML/1998/namespace" && x.Name.Local == "lang":
			elm.Lang = &x.Value
		}
	}
	var t xml.Token
Loop:
	for {
		if t, err = d.Token(); err != nil {
			return err
		}
		switch t := t.(type) {
		case xml.EndElement:
			break Loop
		case xml.StartElement:
			switch {
			case t.Name.Space == NS && t.Name.Local == "show":
				var s string
				if s, err = d.Text(); err != nil {
					return err
				}
				*elm.Show = PresenceShow(s)
			case t.Name.Space == NS && t.Name.Local == "status":
				var s string
				if s, err = d.Text(); err != nil {
					return err
				}
				*elm.Status = s
			case t.Name.Space == NS && t.Name.Local == "priority":
				var s string
				if s, err = d.Text(); err != nil {
					return err
				}
				var i int64
				if i, err = strconv.ParseInt(s, 10, 0); err == nil {
					*elm.Priority = int(i)
				}
			default:
				if newel, ok := xmlencoder.GetExtension(t.Name); ok {
					if err = newel.(xmlencoder.Extension).Decode(d, &t); err != nil {
						return err
					}
					elm.X = append(elm.X, newel)
				} else {
					if err = d.Skip(); err != nil {
						return err
					}
				}
			case t.Name.Space == "urn:ietf:params:xml:ns:xmpp-stanzas" && t.Name.Local == "error":
				newel := &stanza.Error{}
				if err = newel.Decode(d, &t); err != nil {
					return err
				}
				elm.Error = newel
			}
		}
	}
	return err
}