{-# 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."