packages feed

stratux-types 0.0.4 → 0.0.5

raw patch · 5 files changed

+162/−1 lines, 5 files

Files

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