diff options
| author | Sam Anthony <sam@samanthony.xyz> | 2026-05-12 15:35:06 -0400 |
|---|---|---|
| committer | Sam Anthony <sam@samanthony.xyz> | 2026-05-12 15:37:29 -0400 |
| commit | 9010ebe8a581fb9db7bc6e97d40ff062fb18495f (patch) | |
| tree | 4301a455762a59d4951507c8a8781e99c6f91c6d /phone.go | |
| parent | 329257be8d9fb05d3dcea49823acea0f878ed52c (diff) | |
| download | lulu-9010ebe8a581fb9db7bc6e97d40ff062fb18495f.zip | |
unmarshal GET /print-jobs response
Diffstat (limited to 'phone.go')
| -rw-r--r-- | phone.go | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/phone.go b/phone.go new file mode 100644 index 0000000..ff92cef --- /dev/null +++ b/phone.go @@ -0,0 +1,36 @@ +package lulu + +import ( + "fmt" + "regexp" +) + +var phoneExpr = regexp.MustCompile(`^\+?[\d\s\-.\/()]{8,20}$`) + +type PhoneNumber string + +func ParsePhoneNumber(s string) (PhoneNumber, error) { + if phoneExpr.MatchString(s) { + return PhoneNumber(s), nil + } + return "", fmt.Errorf("malformed phone number %q; must fit pattern `%s`", s, phoneExpr.String()) +} + +// MustParsePhoneNumber is like ParsePhoneNumber but panics if the phone +// number cannot be parsed. +func MustParsePhoneNumber(s string) PhoneNumber { + n, err := ParsePhoneNumber(s) + if err != nil { + panic(fmt.Sprintf("lulu: ParsePhoneNumber(%q): %v", s, err)) + } + return n +} + +func (n *PhoneNumber) UnmarshalText(text []byte) error { + pn, err := ParsePhoneNumber(string(text)) + if err != nil { + return err + } + *n = pn + return nil +} |