aboutsummaryrefslogtreecommitdiff
path: root/lib/OwnTracks.hs
blob: ae81d0b2c16d91b3932e040d2f666cfde50614e1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
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."