equal
deleted
inserted
replaced
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 } |