package person import "strings" // Name represents a person's first and last name as a reusable value object. type Name struct { FirstName string `bson:"firstName,omitempty" json:"first_name,omitempty"` LastName string `bson:"lastName,omitempty" json:"last_name,omitempty"` } func (n Name) Trim() Name { return Name{ FirstName: strings.TrimSpace(n.FirstName), LastName: strings.TrimSpace(n.LastName), } } func (n Name) WithFallback(fallback Name) Name { n = n.Trim() fallback = fallback.Trim() if n.FirstName == "" { n.FirstName = fallback.FirstName } if n.LastName == "" { n.LastName = fallback.LastName } return n } func (n Name) FullName() string { n = n.Trim() return strings.TrimSpace(n.FirstName + " " + n.LastName) } func (n Name) IsZero() bool { n = n.Trim() return n.FirstName == "" && n.LastName == "" }