diff --git a/cmd/rove/main.go b/cmd/rove/main.go index 4e3a1d2..bd98d52 100644 --- a/cmd/rove/main.go +++ b/cmd/rove/main.go @@ -11,7 +11,6 @@ import ( "time" "github.com/mdiluz/rove/cmd/rove/internal" - "github.com/mdiluz/rove/pkg/maths" "github.com/mdiluz/rove/pkg/version" "github.com/mdiluz/rove/proto/roveapi" "golang.org/x/net/context" @@ -124,6 +123,21 @@ func checkAccount(a Account) error { return nil } +// BearingFromString converts a string to a bearing +func BearingFromString(s string) roveapi.Bearing { + switch s { + case "N": + return roveapi.Bearing_North + case "E": + return roveapi.Bearing_East + case "S": + return roveapi.Bearing_South + case "W": + return roveapi.Bearing_West + } + return roveapi.Bearing_BearingUnknown +} + // InnerMain wraps the main function so we can test it func InnerMain(command string, args ...string) error { @@ -215,13 +229,15 @@ func InnerMain(command string, args ...string) error { i++ if len(args) == i { return fmt.Errorf("move command must be passed bearing") - } else if _, err := maths.BearingFromString(args[i]); err != nil { - return err + } + var b roveapi.Bearing + if b = BearingFromString(args[i]); b == roveapi.Bearing_BearingUnknown { + return fmt.Errorf("unrecognised bearing: %s", args[i]) } commands = append(commands, &roveapi.Command{ Command: roveapi.CommandType_move, - Data: &roveapi.Command_Bearing{Bearing: args[i]}, + Data: &roveapi.Command_Bearing{Bearing: b}, }, ) case "broadcast": diff --git a/pkg/rove/world.go b/pkg/rove/world.go index a5ab05f..7c313ba 100644 --- a/pkg/rove/world.go +++ b/pkg/rove/world.go @@ -427,7 +427,7 @@ func (w *World) Enqueue(rover string, commands ...Command) error { switch c.Command { case roveapi.CommandType_move: if c.Bearing == roveapi.Bearing_BearingUnknown { - return fmt.Errorf("bearing must be cardinal") + return fmt.Errorf("bearing must be valid") } case roveapi.CommandType_broadcast: if len(c.Message) > 3 {