{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE OverloadedStrings #-}
module Data.Aviation.Stratux.Types.GpsSolution(
GpsSolution(..)
, AsGpsSolution(..)
) where
import Control.Lens(makeClassyPrisms)
import Control.Monad(Monad(return), mzero)
import Data.Aeson(FromJSON(parseJSON), ToJSON(toJSON), withText, Value(String))
import Data.Eq(Eq)
import Data.Ord(Ord)
import Prelude(Show)
data GpsSolution =
GpsSbasWaas
| GpsSbasWaasEgnos
| ThreeDGPS
| DeadReckoning
| NoFix
| Unknown
deriving (Eq, Ord, Show)
makeClassyPrisms ''GpsSolution
instance FromJSON GpsSolution where
parseJSON =
withText "GPS_solution" (\t ->
case t of
"DGPS (SBAS / WAAS)" ->
return GpsSbasWaas
"GPS + SBAS (WAAS / EGNOS)" ->
return GpsSbasWaasEgnos
"3D GPS" ->
return ThreeDGPS
"Dead Reckoning" ->
return DeadReckoning
"No Fix" ->
return NoFix
"Unknown" ->
return Unknown
_ ->
mzero)
instance ToJSON GpsSolution where
toJSON x =
String (
case x of
GpsSbasWaas ->
"DGPS (SBAS / WAAS)"
GpsSbasWaasEgnos ->
"GPS + SBAS (WAAS / EGNOS)"
ThreeDGPS ->
"3D GPS"
DeadReckoning ->
"Dead Reckoning"
NoFix ->
"No Fix"
Unknown ->
"Unknown"
)