diff options
Diffstat (limited to 'lib/OwnTracks.hs')
| -rw-r--r-- | lib/OwnTracks.hs | 44 |
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." |
