module Web.Google.Maps.Common
(
googleMapsApis
, Key (..)
, Location (..)
) where
import Data.Aeson (FromJSON)
import Data.Double.Conversion.Text (toFixed)
import Data.List (intersperse)
import Data.Text (Text)
import qualified Data.Text as T (concat)
import GHC.Generics (Generic)
import Servant.API (ToHttpApiData (..))
import Servant.Client (BaseUrl (..), Scheme (..))
newtype Key = Key Text
deriving (Eq, Show, ToHttpApiData)
data Location = Location
{ lat :: Double
, lng :: Double
} deriving (Eq, Show, Generic)
instance ToHttpApiData Location where
toUrlPiece (Location lat' lng') = T.concat [toFixed precision lat', ",",
toFixed precision lng']
where
precision = 6
instance ToHttpApiData [Location] where
toUrlPiece [] = ""
toUrlPiece ls = T.concat $ intersperse pipe $ map toUrlPiece ls
where
pipe = toUrlPiece ("|" :: Text)
instance FromJSON Location
googleMapsApis :: BaseUrl
googleMapsApis = BaseUrl Https "maps.googleapis.com" 443 "/maps/api"