package main import ( "encoding/xml" "fmt" "gosrc.io/xmpp/stanza" ) // Implementation of XEP-0402: PEP Native Bookmarks // https://xmpp.org/extensions/xep-0402.html type Bookmark struct { XMLName xml.Name `xml:"urn:xmpp:bookmarks:1 conference"` Name string `xml:"name,attr,omitempty"` Autojoin bool `xml:"autojoin,attr,omitempty"` Nick string `xml:"nick,omitempty"` Password string `xml:"password,omitempty"` Extensions []any `xml:"extensions,omitempty"` } func (b *Bookmark) ToNode() *stanza.Node { node := &stanza.Node{ XMLName: xml.Name{Space: "urn:xmpp:bookmarks:1", Local: "conference"}, Attrs: []xml.Attr{ {Name: xml.Name{Local: "name"}, Value: b.Name}, {Name: xml.Name{Local: "autojoin"}, Value: fmt.Sprintf("%t", b.Autojoin)}, }, } if b.Nick != "" { node.Nodes = append(node.Nodes, stanza.Node{ XMLName: xml.Name{Local: "nick"}, Content: b.Nick, }) } if b.Password != "" { node.Nodes = append(node.Nodes, stanza.Node{ XMLName: xml.Name{Local: "password"}, Content: b.Password, }) } for _, ext := range b.Extensions { if extNode, ok := ext.(stanza.Node); ok { node.Nodes = append(node.Nodes, extNode) } } return node } func init() { stanza.TypeRegistry.MapExtension(stanza.PKTIQ, xml.Name{Space: "urn:xmpp:bookmarks:1", Local: "conference"}, Bookmark{}) }