package nebula import ( "errors" "regexp" ) var hostNameRegexp = regexp.MustCompile(`^[a-z][a-z0-9\-]*$`) // HostName is the name of a host in a network. HostNames may only have // lowercase letters, numbers, and hyphens, and must start with a letter. type HostName string // MarshalText casts the HostName to a byte string and returns it. func (h HostName) MarshalText() ([]byte, error) { return []byte(h), nil } // UnmarshalText parses and validates a HostName from a text string. func (h *HostName) UnmarshalText(b []byte) error { if !hostNameRegexp.Match(b) { return errors.New("a host's name must start with a letter and only contain letters, numbers, and dashes") } *h = HostName(b) return nil }