package message import ( "fmt" "strings" "git.sr.ht/~cco/go-scopes/lib" ) // Address implementation type address struct { url, srv, sid, iid string } func (addr *address) String() string { return fmt.Sprintf("%s#%s/%s/%s", addr.url, addr.srv, addr.sid, addr.iid) } func (addr *address) Url() string { return addr.url } func (addr *address) Service() string { return addr.srv } func (addr *address) Interaction() (sid, iid string) { return addr.sid, addr.iid } func (addr *address) SetUrl(url string) { addr.url = url } func (addr *address) SetInteraction(sid, iid string) { addr.sid = sid addr.iid = iid } func SimpleAddress(srv string) lib.Address { return &address{ srv: srv, } } func ParseAddress(s string) lib.Address { addr := address{} p := strings.SplitN(s, "#", 2) if len(p) > 1 { addr.url = p[0] s = p[1] } p = strings.Split(s, "/") addr.srv = p[0] if len(p) > 1 { addr.sid = p[1] if len(p) > 2 { addr.iid = p[2] } } return &addr }