2024-07-12 13:30:21 +00:00
|
|
|
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
|
|
|
|
|
2024-07-22 08:42:25 +00:00
|
|
|
// MarshalText casts the HostName to a byte string and returns it.
|
|
|
|
func (h HostName) MarshalText() ([]byte, error) {
|
|
|
|
return []byte(h), nil
|
|
|
|
}
|
|
|
|
|
2024-07-12 13:30:21 +00:00
|
|
|
// 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
|
|
|
|
}
|