module Uber.Contract where
import WebApi
import Data.Proxy
import Data.Text.Encoding
import Data.Text (Text)
import Uber.Auth
import Uber.Types.Product
import Uber.Types.PriceEstimate
import Uber.Types.TimeEstimate
import Uber.Types.History
import Uber.Types.UserInfo
import Uber.Types.RideRequest
import Uber.Types.Misc
import Uber.Types.Reminder
data UberAPI
type ProductsR = Static "products"
type ProductDetailsR = "products" :/ Text
type PriceEstimateR = "estimates" :/ "price"
type TimeEstimateR = "estimates" :/ "time"
type HistoryR = Static "history"
type UserInfoR = Static "me"
type RequestRideR = Static "requests"
type CurrentRequestR = "requests" :/ "current"
type RideR = "requests" :/ Text
type RideEstimateR = "requests" :/ "estimate"
type TrackingMapR = "requests" :/ Text :/ "map"
type ReceiptR = "requests" :/ Text :/ "receipts"
type PlaceR = "places" :/ Text
type PaymentMethodR = Static "payment-methods"
type CreateReminderR = Static "reminders"
type ReminderR = "reminders" :/ Text
instance WebApi UberAPI where
type Apis UberAPI =
'[ Route '[GET ] ProductsR
, Route '[GET ] ProductDetailsR
, Route '[GET ] PriceEstimateR
, Route '[GET ] TimeEstimateR
, Route '[GET ] HistoryR
, Route '[GET ] UserInfoR
, Route '[POST ] RequestRideR
, Route '[GET, PATCH, DELETE ] CurrentRequestR
, Route '[GET, PATCH, DELETE ] RideR
, Route '[POST ] RideEstimateR
, Route '[GET ] TrackingMapR
, Route '[GET ] ReceiptR
, Route '[GET, PUT ] PlaceR
, Route '[GET ] PaymentMethodR
, Route '[POST ] CreateReminderR
, Route '[GET, PATCH, DELETE ] ReminderR
]
instance ApiContract UberAPI GET ProductsR where
type HeaderIn GET ProductsR = Token
type QueryParam GET ProductsR = LatLng
type ApiOut GET ProductsR = Products
instance ApiContract UberAPI GET ProductDetailsR where
type HeaderIn GET ProductDetailsR = Token
type PathParam GET ProductDetailsR = ProdId
type ApiOut GET ProductDetailsR = Product
instance ApiContract UberAPI GET PriceEstimateR where
type HeaderIn GET PriceEstimateR = Token
type QueryParam GET PriceEstimateR = PriceEstimateParams
type ApiOut GET PriceEstimateR = PriceEstimates
instance ApiContract UberAPI GET TimeEstimateR where
type HeaderIn GET TimeEstimateR = Token
type QueryParam GET TimeEstimateR = TimeEstimateParams
type ApiOut GET TimeEstimateR = TimeEstimates
instance ApiContract UberAPI GET HistoryR where
type HeaderIn GET HistoryR = OAuthToken
type QueryParam GET HistoryR = HistoryParams
type ApiOut GET HistoryR = HistoryResp
instance ApiContract UberAPI GET UserInfoR where
type HeaderIn GET UserInfoR = OAuthToken
type ApiOut GET UserInfoR = UserInfo
instance ApiContract UberAPI POST RequestRideR where
type HeaderIn POST RequestRideR = OAuthToken
type RequestBody POST RequestRideR = '[RideReqParams]
type ApiOut POST RequestRideR = RideInfo
type ApiErr POST RequestRideR = ErrorResponse
instance ApiContract UberAPI GET CurrentRequestR where
type HeaderIn GET CurrentRequestR = OAuthToken
type ApiOut GET CurrentRequestR = RideInfo
instance ApiContract UberAPI PATCH CurrentRequestR where
type HeaderIn PATCH CurrentRequestR = OAuthToken
type RequestBody PATCH CurrentRequestR = '[RidePatchParams]
type ApiOut PATCH CurrentRequestR = HTMLText
type ApiErr PATCH CurrentRequestR = HTMLText
type ContentTypes PATCH CurrentRequestR = '[HTML]
instance ApiContract UberAPI DELETE CurrentRequestR where
type HeaderIn DELETE CurrentRequestR = OAuthToken
type ApiOut DELETE CurrentRequestR = HTMLText
type ApiErr DELETE CurrentRequestR = HTMLText
type ContentTypes DELETE CurrentRequestR = '[HTML]
instance ApiContract UberAPI POST RideEstimateR where
type HeaderIn POST RideEstimateR = OAuthToken
type RequestBody POST RideEstimateR = '[RideReqParams]
type ApiOut POST RideEstimateR = RideEstimate
instance ApiContract UberAPI GET RideR where
type HeaderIn GET RideR = OAuthToken
type PathParam GET RideR = Text
type ApiOut GET RideR = RideInfo
instance ApiContract UberAPI PATCH RideR where
type HeaderIn PATCH RideR = OAuthToken
type PathParam PATCH RideR = Text
type RequestBody PATCH RideR = '[RidePatchParams]
type ApiOut PATCH RideR = HTMLText
type ApiErr PATCH RideR = HTMLText
type ContentTypes PATCH RideR = '[HTML]
instance ApiContract UberAPI DELETE RideR where
type HeaderIn DELETE RideR = OAuthToken
type PathParam DELETE RideR = Text
type ApiOut DELETE RideR = HTMLText
type ApiErr DELETE RideR = HTMLText
type ContentTypes DELETE RideR = '[HTML]
instance ApiContract UberAPI GET TrackingMapR where
type HeaderIn GET TrackingMapR = OAuthToken
type PathParam GET TrackingMapR = Text
type ApiOut GET TrackingMapR = TrackingMap
instance ApiContract UberAPI GET ReceiptR where
type HeaderIn GET ReceiptR = OAuthToken
type PathParam GET ReceiptR = Text
type ApiOut GET ReceiptR = Receipt
instance ApiContract UberAPI GET PlaceR where
type HeaderIn GET PlaceR = OAuthToken
type PathParam GET PlaceR = Text
type ApiOut GET PlaceR = Address
instance ApiContract UberAPI PUT PlaceR where
type HeaderIn PUT PlaceR = OAuthToken
type PathParam PUT PlaceR = Text
type RequestBody PUT PlaceR = '[Address]
type ApiOut PUT PlaceR = Address
instance ApiContract UberAPI GET PaymentMethodR where
type HeaderIn GET PaymentMethodR = OAuthToken
type ApiOut GET PaymentMethodR = PaymentMethods
instance ApiContract UberAPI POST CreateReminderR where
type HeaderIn POST CreateReminderR = ServerToken
type RequestBody POST CreateReminderR = '[ReminderParams]
type ApiOut POST CreateReminderR = Reminder
instance ApiContract UberAPI GET ReminderR where
type HeaderIn GET ReminderR = ServerToken
type PathParam GET ReminderR = Text
type ApiOut GET ReminderR = Reminder
instance ApiContract UberAPI PATCH ReminderR where
type HeaderIn PATCH ReminderR = ServerToken
type PathParam PATCH ReminderR = Text
type RequestBody PATCH ReminderR = '[ReminderPatchParams]
type ApiOut PATCH ReminderR = Reminder
instance ApiContract UberAPI DELETE ReminderR where
type HeaderIn DELETE ReminderR = ServerToken
type PathParam DELETE ReminderR = Text
type ApiOut DELETE ReminderR = HTMLText
type ApiErr DELETE ReminderR = HTMLText
type ContentTypes DELETE ReminderR = '[HTML]
instance Decode HTML HTMLText where
decode _ = (HTMLText <$>) . (decode (Proxy :: Proxy PlainText))
data HTMLText = HTMLText Text deriving Show