module Network.Pushbullet.Api where
import Network.Pushbullet.Types
import Data.Proxy
import Data.Text ( Text )
import GHC.TypeLits ( Symbol )
import Servant.API
data PushbulletAuth
newtype PushbulletKey = PushbulletKey Text
deriving ToHttpApiData
type PushbulletApi
= "v2" :> PushbulletApiV2
type PushbulletApiV2
= PushAuth (AuthProtect PushbulletAuth) (
"pushes" :> (
ReqBody '[JSON] (Push 'New) :> Post '[JSON] (Push 'Existing)
:<|>
QueryParam "modified_after" PushbulletTime
:> QueryParam "active" Bool
:> QueryParam "limit" Int
:> QueryParam "cursor" Cursor
:> Get '[JSON] (Paginated ExistingPushes)
)
:<|>
"ephemerals"
:> ReqBody '[JSON] Ephemeral :> Post '[JSON] TrivialObject
:<|>
"users"
:> "me"
:> Get '[JSON] User
:<|> "devices" :> (
QueryParam "active" Bool
:> QueryParam "cursor" Cursor
:> Get '[JSON] (Paginated ExistingDevices)
:<|>
ReqBody '[JSON] (Device 'New)
:> Post '[JSON] (Device 'Existing)
:<|>
Capture "deviceId" DeviceId
:> Delete '[JSON] TrivialObject
)
:<|>
"permanents" :> (
Capture "permanent" (Permanent 'ThreadList)
:> Get '[JSON] SmsThreads
:<|>
Capture "permanent" (Permanent 'MessageList)
:> Get '[JSON] SmsMessages
)
)
pushbulletApi :: Proxy PushbulletApi
pushbulletApi = Proxy
type family PushAuth (auth :: *) (api :: *) :: * where
PushAuth auth ((s :: Symbol) :> api) = s :> PushAuth auth api
PushAuth auth (l :<|> r) = PushAuth auth l :<|> PushAuth auth r
PushAuth auth a = auth :> a