all repos — postern

@ 8bbd7a84fa063eaf76ebf26f4887c9c2644053bf

Modern mail management

clone
git clone https:///postern.git

internal/policy/address.go (view raw)

 1package policy
 2
 3import (
 4	"errors"
 5	"net/mail"
 6
 7	"go.starlark.net/starlark"
 8)
 9
10type Address struct {
11	Address, Name, Raw string
12}
13
14func (a Address) String() string       { return a.Raw }
15func (a Address) Type() string         { return "Address" }
16func (a Address) Freeze()              {}
17func (a Address) Truth() starlark.Bool { return true }
18func (a Address) Hash() (uint32, error) {
19	return 0, errors.New("unhashable")
20}
21
22func (a Address) Attr(name string) (starlark.Value, error) {
23	switch name {
24	case "address":
25		return starlark.String(a.Address), nil
26	case "name":
27		return starlark.String(a.Name), nil
28	case "raw":
29		return starlark.String(a.Raw), nil
30	}
31	return nil, nil
32}
33
34func (a Address) AttrNames() []string {
35	return []string{"address", "name", "raw"}
36}
37
38func ParseAddress(email string) (Address, error) {
39	a, err := mail.ParseAddress(email)
40	if err != nil {
41		return Address{}, err
42	}
43
44	addr := Address{
45		Raw:     email,
46		Address: a.Address,
47		Name:    a.Name,
48	}
49
50	return addr, nil
51}