package domain import ( "golang.org/x/net/idna" ) type Domain string // String converts the Domain to a non-punycode string. func (d Domain) String() (string, error) { unicode, err := idna.ToUnicode(string(d)) if err != nil { return "", err } return unicode, nil } // SafeString converts the Domain to a non-punycode string, falling back to the original string if conversion fails. func (d Domain) SafeString() string { str, err := d.String() if err != nil { str = string(d) } return str } // FromString creates a Domain from a string, converting it to punycode. func FromString(s string) (Domain, error) { ascii, err := idna.ToASCII(s) if err != nil { return "", err } return Domain(ascii), nil }