23 lines
574 B
Go
23 lines
574 B
Go
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
|
|
|
|
// 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
|
|
}
|