module MixPanel.Types.Core
( AuthToken(..)
, Toggle(..)
, DidSucceed(..)
) where
import Data.Aeson ( ToJSON
, FromJSON
, parseJSON
, toJSON
, withObject
, (.:)
)
import Data.Text ( Text )
import GHC.Generics ( Generic )
import Servant.API
newtype AuthToken = AuthToken Text
deriving (Generic, ToJSON)
data Toggle = On | Off
deriving (Show)
instance ToJSON Toggle where
toJSON On = "1"
toJSON Off = "0"
instance ToHttpApiData Toggle where
toUrlPiece On = "1"
toUrlPiece Off = "0"
data DidSucceed = Success | Fail Text
deriving (Show)
instance FromJSON DidSucceed where
parseJSON = withObject "success or failure" $ \o -> do
status <- o .: "status"
case (status :: Int) of
1 -> return Success
0 -> Fail <$> o .: "error"
_ -> fail ("unknown status: " ++ show status)