go-scopes/core/message/address.go

73 lines
1.1 KiB
Go

package message
import (
"fmt"
"strings"
lib "git.sr.ht/~cco/go-scopes"
)
// 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
}
// Addressable interface
func (addr *address) Address() lib.Address {
return addr
}
func (_ *address) Cell() lib.Context {
return nil
}