{-# LANGUAGE DataKinds #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE MultiParamTypeClasses #-} module Uber.Types.Reminder where import Data.Aeson import Data.Aeson.Types import Data.Char (toLower) import Data.Text (Text) import GHC.Generics (Generic) import WebApi data ReminderParams = ReminderParams { reminder_time :: Integer , phone_number :: Text , event :: Event , trip_branding :: Maybe TripBranding } deriving (Generic, Show) data Event = Event { time :: Integer , name :: Maybe Text , location :: Maybe Text , latitude :: Maybe Double , longitude :: Maybe Double , product_id :: Maybe Text } deriving (Generic, Show) data TripBranding = TripBranding { link_text :: Maybe Text , partner_deeplink :: Maybe Text } deriving (Generic, Show) data Reminder = Reminder { r_event :: Event --, r_product_id :: Maybe Text , r_reminder_id :: Text , r_reminder_time :: Integer , r_reminder_status :: ReminderStatus , r_trip_branding :: Maybe TripBranding } deriving (Generic, Show) data ReminderStatus = Pending | Sent deriving (Generic, Show) data ReminderPatchParams = ReminderPatchParams { p_reminder_time :: Maybe Int , p_phone_number :: Maybe Text , p_event :: Maybe Event --, p_trip_branding :: Maybe TripBranding } deriving (Generic, Show) instance ToJSON ReminderParams instance FromJSON Event instance FromJSON TripBranding instance ToJSON Event instance ToJSON TripBranding instance ToJSON ReminderPatchParams where toJSON = genericToJSON defaultOptions { fieldLabelModifier = drop 2 } instance FromJSON Reminder where parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = drop 2 } instance FromJSON ReminderStatus where parseJSON = genericParseJSON defaultOptions { allNullaryToStringTag = True , constructorTagModifier = map toLower }