aboutsummaryrefslogtreecommitdiff
path: root/lib/OwnTracks.hs
diff options
context:
space:
mode:
Diffstat (limited to 'lib/OwnTracks.hs')
-rw-r--r--lib/OwnTracks.hs44
1 files changed, 44 insertions, 0 deletions
diff --git a/lib/OwnTracks.hs b/lib/OwnTracks.hs
new file mode 100644
index 0000000..ae81d0b
--- /dev/null
+++ b/lib/OwnTracks.hs
@@ -0,0 +1,44 @@
+{-# LANGUAGE BlockArguments #-}
+{-# LANGUAGE DeriveAnyClass #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE DerivingVia #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE ApplicativeDo #-}
+
+
+module OwnTracks
+ (Message(..),
+ module OwnTracks.Location,
+ module OwnTracks.Status
+ ) where
+
+import Data.Aeson
+import Data.Aeson.Types (Parser)
+import Data.ByteString (ByteString)
+import Data.ByteString.Base64
+import Data.Functor ((<&>))
+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.Location
+import OwnTracks.Status
+
+data Message =
+ MsgLocation Location
+ | MsgStatus Status -- TODO
+ 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
+ _ -> fail "unknown _type of owntracks message."