structs.go
changeset 26 4d0a369079ce
parent 25 7437d6eed227
child 28 78961db80bae
equal deleted inserted replaced
25:7437d6eed227 26:4d0a369079ce
   407 }
   407 }
   408 
   408 
   409 func (iq *Iq) MarshalXML() ([]byte, os.Error) {
   409 func (iq *Iq) MarshalXML() ([]byte, os.Error) {
   410 	return marshalXML(iq)
   410 	return marshalXML(iq)
   411 }
   411 }
       
   412 
       
   413 // Parse a string into a struct implementing Stanza -- this will be
       
   414 // either an Iq, a Message, or a Presence.
       
   415 func ParseStanza(str string) (Stanza, os.Error) {
       
   416 	r := strings.NewReader(str)
       
   417 	p := xml.NewParser(r)
       
   418 	tok, err := p.Token()
       
   419 	if err != nil {
       
   420 		return nil, err
       
   421 	}
       
   422 	se, ok := tok.(xml.StartElement)
       
   423 	if !ok {
       
   424 		return nil, os.NewError("Not a start element")
       
   425 	}
       
   426 	var stan Stanza
       
   427 	switch se.Name.Local {
       
   428 	case "iq":
       
   429 		stan = &Iq{}
       
   430 	case "message":
       
   431 		stan = &Message{}
       
   432 	case "presence":
       
   433 		stan = &Presence{}
       
   434 	default:
       
   435 		return nil, os.NewError("Not iq, message, or presence")
       
   436 	}
       
   437 	err = p.Unmarshal(stan, &se)
       
   438 	if err != nil {
       
   439 		return nil, err
       
   440 	}
       
   441 	return stan, nil
       
   442 }