package message import ( "fmt" "strings" "git.sr.ht/~cco/go-scopes/lib" ) // Message implementation(s) type strMessage string func (msg strMessage) Action() string { return string(msg) } func (msg strMessage) Sender() lib.Address { return nil } func StrMessage(action string) strMessage { return strMessage(action) } var Quit = StrMessage("quit") // 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) *address { return &address{ srv: srv, } } func ParseAddress(astr string) *address { addr := address{} p1 := strings.SplitN(astr, "#", 2) s1 := p1[0] s2 := s1 if len(p1) > 1 { addr.url = s1 s2 = p1[1] } p2 := strings.Split(s2, "/") addr.srv = p2[0] if len(p2) > 1 { addr.sid = p2[1] if len(p2) > 2 { addr.iid = p2[2] } } return &addr }