From 9010ebe8a581fb9db7bc6e97d40ff062fb18495f Mon Sep 17 00:00:00 2001 From: Sam Anthony Date: Tue, 12 May 2026 15:35:06 -0400 Subject: unmarshal GET /print-jobs response --- phone.go | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 phone.go (limited to 'phone.go') 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 +} -- cgit v1.2.3