{-# LANGUAGE DeriveGeneric #-}
module Battlesnake.Core.Coordinate where
import Data.Aeson
( FromJSON (parseJSON)
, KeyValue ((.=))
, ToJSON (toEncoding)
, pairs
, withObject
, (.:)
)
import GHC.Generics
-- | Represents a coordinate on the game board.
data Coordinate = Coordinate
{ coordX :: Integer
-- ^ The X coordinate (0 indexed, from left to right)
, coordY :: Integer
-- ^ The Y coordinate (0 indexed, from bottom to top)
}
deriving (Show, Eq, Generic)
instance ToJSON Coordinate where
toEncoding (Coordinate x y) = pairs ("x" .= x <> "y" .= y)
instance FromJSON Coordinate where
parseJSON = withObject "Coordinate" $ \v -> Coordinate <$> v .: "x" <*> v .: "y"