2025-04-21 09:31:22 +00:00

40 lines
854 B
Go

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
}
// PunycodeString returns the punycode representation of the Domain.
func (d Domain) PunycodeString() string {
return string(d)
}
// 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
}