package domain import ( "strconv" "strings" ) type Coords struct { x int y int } var ErrInvalidCoordsString error = simpleError{ msg: "invalid coords string, should be x|y", typ: ErrorTypeIncorrectInput, code: "invalid-coords-string", } const coordsSubstrings = 2 func newCoords(s string) (Coords, error) { coords := strings.SplitN(s, "|", coordsSubstrings) if len(coords) != coordsSubstrings { return Coords{}, ErrInvalidCoordsString } x, err := strconv.Atoi(coords[0]) if err != nil || x <= 0 { return Coords{}, ErrInvalidCoordsString } y, err := strconv.Atoi(coords[1]) if err != nil || y <= 0 { return Coords{}, ErrInvalidCoordsString } return Coords{ x: x, y: y, }, nil } func (c Coords) X() int { return c.x } func (c Coords) Y() int { return c.y } func (c Coords) String() string { return strconv.Itoa(c.x) + "|" + strconv.Itoa(c.y) }