aboutsummaryrefslogtreecommitdiff
path: root/lib/OwnTracks.hs
diff options
context:
space:
mode:
Diffstat (limited to 'lib/OwnTracks.hs')
-rw-r--r--lib/OwnTracks.hs53
1 files changed, 53 insertions, 0 deletions
diff --git a/lib/OwnTracks.hs b/lib/OwnTracks.hs
new file mode 100644
index 0000000..e9bb011
--- /dev/null
+++ b/lib/OwnTracks.hs
@@ -0,0 +1,53 @@
+{-# LANGUAGE ApplicativeDo #-}
+{-# LANGUAGE BlockArguments #-}
+{-# LANGUAGE DeriveAnyClass #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE DerivingVia #-}
+{-# LANGUAGE LambdaCase #-}
+
+
+module OwnTracks
+ (Message(..),
+ module OwnTracks.Location,
+ module OwnTracks.Status,
+ module OwnTracks.Configuration,
+ module OwnTracks.Command,
+ module OwnTracks.Waypoint
+ ) where
+
+import Data.Aeson
+import Data.Aeson.Types (Parser)
+import Data.ByteString (ByteString)
+import Data.ByteString.Base64
+import Data.Functor ((<&>))
+import Data.Maybe (fromMaybe)
+import Data.Text (Text)
+import qualified Data.Text as T
+import Data.Text.Encoding (encodeUtf8)
+import Data.Time (UTCTime, defaultTimeLocale,
+ parseTimeM)
+import Database.Persist
+import GHC.Generics (Generic)
+
+import OwnTracks.Command
+import OwnTracks.Configuration
+import OwnTracks.Location
+import OwnTracks.Status
+import OwnTracks.Waypoint
+
+data Message =
+ MsgLocation Location
+ | MsgStatus Status
+ | MsgConfig Configuration
+ | MsgWaypoints [Waypoint]
+ deriving (Generic, Show, Eq)
+
+instance FromJSON Message where
+ parseJSON v@(Object o) = do
+ ty :: Text <- o .: "_type"
+ case ty of
+ "location" -> MsgLocation <$> parseJSON v
+ "status" -> MsgStatus <$> parseJSON v
+ "configuration" -> MsgConfig <$> parseJSON v
+ "waypoints" -> MsgWaypoints <$> (fmap (fromMaybe []) (o .:? "waypoints"))
+ _ -> fail "unknown _type of owntracks message."