stratux-types 0.0.4 → 0.0.5
raw patch · 5 files changed
+162/−1 lines, 5 files
Files
- changelog.md +4/−0
- src/Data/Aviation/Stratux/Types.hs +2/−0
- src/Data/Aviation/Stratux/Types/NetworkConnection.hs +71/−0
- src/Data/Aviation/Stratux/Types/Settings.hs +82/−0
- stratux-types.cabal +3/−1
changelog.md view
@@ -1,3 +1,7 @@+0.0.5++* Create `Settings` data type.+ 0.0.4 * Create `Status` data type.
src/Data/Aviation/Stratux/Types.hs view
@@ -5,6 +5,8 @@ import Data.Aviation.Stratux.Types.EmitterCategory as T import Data.Aviation.Stratux.Types.GpsSolution as T import Data.Aviation.Stratux.Types.IcaoAddr as T+import Data.Aviation.Stratux.Types.NetworkConnection as T+import Data.Aviation.Stratux.Types.Settings as T import Data.Aviation.Stratux.Types.Status as T import Data.Aviation.Stratux.Types.TargetType as T import Data.Aviation.Stratux.Types.Traffic as T
+ src/Data/Aviation/Stratux/Types/NetworkConnection.hs view
@@ -0,0 +1,71 @@+{-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}++module Data.Aviation.Stratux.Types.NetworkConnection(+ NetworkConnection(..)+, HasNetworkConnection(..)+) where++import Control.Applicative((<*>))+import Control.Lens(makeClassy)+import Data.Aeson(FromJSON(parseJSON), ToJSON(toJSON), (.:), (.=), object, withObject)+import Data.Bool(Bool)+import Data.Eq(Eq)+import Data.Functor((<$>))+import Data.Int(Int)+import Data.Maybe(Maybe)+import Data.Ord(Ord)+import Data.String(String)+import Data.Time(UTCTime)+import Data.Word(Word8)+import Prelude(Show)++-- $setup+-- >>> :set -XOverloadedStrings+-- >>> import Control.Lens+-- >>> import Data.Aeson(decode, encode)+-- >>> import Data.Maybe(Maybe)+-- >>> import Data.Time+-- >>> import Prelude++data NetworkConnection =+ NetworkConnection {+ _conn :: Maybe String -- net.UDPConn+ , _ip :: String+ , _port :: Int+ , _capability :: Word8+ , _lastUnreachable :: UTCTime+ , _sleepFlag :: Bool+ } deriving (Eq, Ord, Show)++makeClassy ''NetworkConnection++-- |+--+-- >>> decode "{\"Conn\":null,\"Ip\":\"\",\"Port\":4000,\"Capability\":5,\"LastUnreachable\":\"0001-01-01T00:00:00Z\",\"SleepFlag\":false}" :: Maybe NetworkConnection+-- Just (NetworkConnection {_conn = Nothing, _ip = "", _port = 4000, _capability = 5, _lastUnreachable = 0001-01-01 00:00:00 UTC, _sleepFlag = False})+instance FromJSON NetworkConnection where+ parseJSON =+ withObject "NetworkConnection" (\x -> + NetworkConnection <$>+ x .: "Conn" <*>+ x .: "Ip" <*>+ x .: "Port" <*>+ x .: "Capability" <*>+ x .: "LastUnreachable" <*>+ x .: "SleepFlag")++-- |+--+-- >>> encode (NetworkConnection Nothing "" 4000 5 (UTCTime (fromGregorian 1 1 1) 597) False)+-- "{\"Ip\":\"\",\"Conn\":null,\"Capability\":5,\"SleepFlag\":false,\"LastUnreachable\":\"0001-01-01T00:09:57Z\",\"Port\":4000}"+instance ToJSON NetworkConnection where+ toJSON (NetworkConnection conn_ ip_ port_ capability_ lastUnreachable_ sleepFlag_) =+ object [+ "Conn" .= conn_+ , "Ip" .= ip_+ , "Port" .= port_+ , "Capability" .= capability_+ , "LastUnreachable" .= lastUnreachable_+ , "SleepFlag" .= sleepFlag_+ ]
+ src/Data/Aviation/Stratux/Types/Settings.hs view
@@ -0,0 +1,82 @@+{-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}++module Data.Aviation.Stratux.Types.Settings(+ Settings(..)+, HasSettings(..)+) where++import Control.Applicative((<*>))+import Control.Lens(makeClassy)+import Data.Aeson(FromJSON(parseJSON), ToJSON(toJSON), (.:), (.=), object, withObject)+import Data.Aviation.Stratux.Types.NetworkConnection+import Data.Bool(Bool)+import Data.Eq(Eq)+import Data.Functor((<$>))+import Data.Int(Int)+import Data.Ord(Ord)+import Data.String(String)+import Prelude(Show)++-- $setup+-- >>> :set -XOverloadedStrings+-- >>> import Control.Lens+-- >>> import Data.Aeson(decode, encode)+-- >>> import Data.Maybe(Maybe)+-- >>> import Data.Time+-- >>> import Prelude++data Settings =+ Settings {+ _uatEnabled :: Bool+ , _esEnabled :: Bool+ , _gpsEnabled :: Bool+ , _networkOutputs :: [NetworkConnection]+ , _ahrsEnabled :: Bool+ , _debug :: Bool+ , _replayLog :: Bool+ , _ppm :: Int+ , _ownshipModeS :: String+ , _watchList :: String+ } deriving (Eq, Ord, Show)++makeClassy ''Settings++-- |+--+-- >>> decode "{\"UAT_Enabled\":true,\"ES_Enabled\":true,\"GPS_Enabled\":true,\"NetworkOutputs\":[{\"Conn\":null,\"Ip\":\"\",\"Port\":4000,\"Capability\":5,\"LastUnreachable\":\"0001-01-01T00:00:00Z\",\"SleepFlag\":false}],\"AHRS_Enabled\":false,\"DEBUG\":false,\"ReplayLog\":true,\"PPM\":0,\"OwnshipModeS\":\"F00000\",\"WatchList\":\"\"}" :: Maybe Settings+-- Just (Settings {_uatEnabled = True, _esEnabled = True, _gpsEnabled = True, _networkOutputs = [NetworkConnection {_conn = Nothing, _ip = "", _port = 4000, _capability = 5, _lastUnreachable = 0001-01-01 00:00:00 UTC, _sleepFlag = False}], _ahrsEnabled = False, _debug = False, _replayLog = True, _ppm = 0, _ownshipModeS = "F00000", _watchList = ""})+instance FromJSON Settings where+ parseJSON =+ withObject "Settings" (\x -> + Settings <$>+ x .: "UAT_Enabled" <*>+ x .: "ES_Enabled" <*>+ x .: "GPS_Enabled" <*>+ x .: "NetworkOutputs" <*>+ x .: "AHRS_Enabled" <*>+ x .: "DEBUG" <*>+ x .: "ReplayLog" <*>+ x .: "PPM" <*>+ x .: "OwnshipModeS" <*>+ x .: "WatchList"+ )++-- |+--+-- >>> encode (Settings True True True [NetworkConnection Nothing "" 4000 5 (UTCTime (fromGregorian 1 1 1) 597) False] False False True 0 "F00000" "")+-- "{\"OwnshipModeS\":\"F00000\",\"AHRS_Enabled\":false,\"NetworkOutputs\":[{\"Ip\":\"\",\"Conn\":null,\"Capability\":5,\"SleepFlag\":false,\"LastUnreachable\":\"0001-01-01T00:09:57Z\",\"Port\":4000}],\"PPM\":0,\"GPS_Enabled\":true,\"DEBUG\":false,\"ES_Enabled\":true,\"ReplayLog\":true,\"UAT_Enabled\":true,\"WatchList\":\"\"}"+instance ToJSON Settings where+ toJSON (Settings uatEnabled_ esEnabled_ gpsEnabled_ networkOutputs_ ahrsEnabled_ debug_ replayLog_ ppm_ ownshipModeS_ watchList_) =+ object [+ "UAT_Enabled" .= uatEnabled_+ , "ES_Enabled" .= esEnabled_+ , "GPS_Enabled" .= gpsEnabled_+ , "NetworkOutputs" .= networkOutputs_+ , "AHRS_Enabled" .= ahrsEnabled_+ , "DEBUG" .= debug_+ , "ReplayLog" .= replayLog_+ , "PPM" .= ppm_+ , "OwnshipModeS" .= ownshipModeS_+ , "WatchList" .= watchList_+ ]
stratux-types.cabal view
@@ -1,5 +1,5 @@ name: stratux-types-version: 0.0.4+version: 0.0.5 license: BSD3 license-file: LICENCE author: Tony Morris <ʇǝu˙sıɹɹoɯʇ@ןןǝʞsɐɥ>@@ -47,6 +47,8 @@ Data.Aviation.Stratux.Types.EmitterCategory Data.Aviation.Stratux.Types.GpsSolution Data.Aviation.Stratux.Types.IcaoAddr+ Data.Aviation.Stratux.Types.NetworkConnection+ Data.Aviation.Stratux.Types.Settings Data.Aviation.Stratux.Types.Status Data.Aviation.Stratux.Types.TargetType Data.Aviation.Stratux.Types.Traffic