mlisting

Mailing list service

git clone git://git.lin.moe/go/mlisting.git

 1package service
 2
 3import (
 4	"fmt"
 5	"strings"
 6
 7	"github.com/emersion/go-message/mail"
 8)
 9
10type Address mail.Address
11
12func (a *Address) String() string {
13	return a.Address
14}
15
16func (a *Address) Action() string {
17	_, act, _ := a.Parts()
18	return act
19}
20
21func (a *Address) WithAction(act string) (naddr *Address) {
22	naddr = new(Address)
23	if act == CMD_POST || act == "" {
24		*naddr = *a
25	} else {
26		name, _, host := a.Parts()
27		naddr = &Address{Address: fmt.Sprintf("%s+%s@%s", name, act, host)}
28	}
29	return
30}
31
32func (a *Address) Parts() (name, act, host string) {
33	i := strings.LastIndex(a.Address, "@")
34	if i != -1 {
35		name, host = a.Address[:i], a.Address[i+1:]
36	} else {
37		host = ""
38		name = a.Address
39	}
40
41	name, act, _ = strings.Cut(name, "+")
42	return
43}
44
45func (a *Address) Base() string {
46	name, _, host := a.Parts()
47	return fmt.Sprintf("%s@%s", name, host)
48}