module Twilio.Types
( APIVersion(..)
, module X
, makeTwilioRequest
, makeTwilioRequest'
, makeTwilioPOSTRequest
, makeTwilioPOSTRequest'
, makeTwilioDELETERequest
, makeTwilioDELETERequest'
) where
import Control.Exception
import Control.Monad
import Control.Monad.Reader.Class
import Data.Aeson
import qualified Data.ByteString.Char8 as C
import Data.Monoid
import Data.Text (Text)
import qualified Data.Text as T
import Network.HTTP.Client
import Network.HTTP.Types
import Control.Monad.Twilio
import Twilio.Types.AddressRequirement as X
import Twilio.Types.AuthToken as X
import Twilio.Types.Capability as X
import Twilio.Types.Issue as X
import Twilio.Types.ISOCountryCode as X
import Twilio.Types.List as X
import Twilio.Types.PriceUnit as X
import Twilio.Types.SID as X
import Twilio.Internal.Parser
import Twilio.Internal.Request
data APIVersion
= API_2010_04_01
| API_2008_08_01
deriving Eq
instance Read APIVersion where
readsPrec _ = \case
"2010-04-01" -> return (API_2010_04_01, "")
"2008-08-01" -> return (API_2008_08_01, "")
_ -> mzero
instance Show APIVersion where
show API_2010_04_01 = "2010-04-01"
show API_2008_08_01 = "2008-08-01"
instance FromJSON APIVersion where
parseJSON (String "2010-04-01") = return API_2010_04_01
parseJSON (String "2008-08-01") = return API_2008_08_01
parseJSON _ = mzero
makeTwilioRequest' :: Monad m => Text -> TwilioT m Request
makeTwilioRequest' suffix = do
((accountSID, authToken), _) <- ask
let Just request = parseUrl . T.unpack $ baseURL <> suffix
return $ applyBasicAuth (C.pack . T.unpack $ getSID accountSID)
(C.pack . T.unpack $ getAuthToken authToken) request
makeTwilioRequest :: Monad m => Text -> TwilioT m Request
makeTwilioRequest suffix = do
((_, _), accountSID) <- ask
makeTwilioRequest' $ "/Accounts/" <> getSID accountSID <> suffix
makeTwilioPOSTRequest' :: Monad m
=> Text
-> [(C.ByteString, C.ByteString)]
-> TwilioT m Request
makeTwilioPOSTRequest' resourceURL params =
makeTwilioRequest' resourceURL <&> urlEncodedBody params
makeTwilioPOSTRequest :: Monad m
=> Text
-> [(C.ByteString, C.ByteString)]
-> TwilioT m Request
makeTwilioPOSTRequest resourceURL params =
makeTwilioRequest resourceURL <&> urlEncodedBody params
makeTwilioDELETERequest' :: Monad m
=> Text
-> TwilioT m Request
makeTwilioDELETERequest' resourceURL =
makeTwilioRequest' resourceURL <&> (\req -> req {
method = "DELETE",
checkStatus = \status responseHeaders cookieJar -> case status of
Status 204 _ -> Nothing
_ -> Just . SomeException $ StatusCodeException status responseHeaders cookieJar
})
makeTwilioDELETERequest :: Monad m
=> Text
-> TwilioT m Request
makeTwilioDELETERequest resourceURL =
makeTwilioRequest resourceURL <&> (\req -> req {
method = "DELETE",
checkStatus = \status responseHeaders cookieJar -> case status of
Status 204 _ -> Nothing
_ -> Just . SomeException $ StatusCodeException status responseHeaders cookieJar
})