module Uber.Types.Misc where
import Data.Aeson
import Data.Aeson.Types
import Data.Text (Text)
import GHC.Generics (Generic)
import Uber.Types.RideRequest (toUnderscores)
import WebApi
data TrackingMap = TrackingMap
{ t_request_id :: Text
, t_href :: Text
} deriving (Generic, Show)
data Receipt = Receipt
{ request_id :: Text
, charges :: [Charge]
, surge_charge :: Maybe Charge
, charge_adjustments :: [Charge]
, normal_fare :: Text
, subtotal :: Text
, total_charged :: Text
, total_owed :: Maybe Double
, currency_code :: Text
, duration :: Text
, distance :: Text
, distance_label :: Text
} deriving (Generic, Show)
data Charge = Charge
{ name :: Text
, amount :: Double
} deriving (Generic, Show)
data Address = Address
{ address :: Text
} deriving (Generic, Show)
newtype PaymentMethods = PaymentMethods
{ payment_methods :: [PaymentMethod]
} deriving (Generic, Show)
data PaymentMethod = PaymentMethod
{ p_payment_method_id :: Text
, p_type :: PaymentType
, p_description :: Maybe Text
, p_last_used :: Maybe Text
} deriving (Generic, Show)
data PaymentType
= AirtelMoney
| Alipay
| ApplePay
| AmericanExpress
| BaiduWallet
| BusinessAccount
| Cash
| Discover
| GoogleWallet
| Jcb
| Lianlian
| Maestro
| Mastercard
| Paypal
| Paytm
| Ucharge
| Unionpay
| Unknown
| Visa
| Zaakpay
deriving (Generic, Show)
instance FromJSON Receipt where
instance FromJSON Charge where
instance FromJSON Address where
instance FromJSON PaymentMethods where
instance ToJSON Address where
instance FromJSON PaymentMethod where
parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = drop 2 }
instance FromJSON TrackingMap where
parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = drop 2 }
instance FromJSON PaymentType where
parseJSON = genericParseJSON defaultOptions { allNullaryToStringTag = True
, constructorTagModifier = toUnderscores
}