{-# LANGUAGE OverloadedStrings #-}
module Web.Twitter.Conduit.Parameters
( UserParam(..)
, UserListParam(..)
, ListParam(..)
, MediaData(..)
, mkUserParam
, mkUserListParam
, mkListParam
) where
import qualified Data.Text as T
import Network.HTTP.Client (RequestBody)
import Web.Twitter.Conduit.Request.Internal (APIQuery, PV(..))
import Web.Twitter.Types
data UserParam = UserIdParam UserId | ScreenNameParam String
deriving (Show, Eq)
data UserListParam = UserIdListParam [UserId] | ScreenNameListParam [String]
deriving (Show, Eq)
data ListParam = ListIdParam Integer | ListNameParam String
deriving (Show, Eq)
data MediaData = MediaFromFile FilePath
| MediaRequestBody FilePath RequestBody
mkUserParam :: UserParam -> APIQuery
mkUserParam (UserIdParam uid) = [("user_id", PVInteger uid)]
mkUserParam (ScreenNameParam sn) = [("screen_name", PVString . T.pack $ sn)]
mkUserListParam :: UserListParam -> APIQuery
mkUserListParam (UserIdListParam uids) = [("user_id", PVIntegerArray uids)]
mkUserListParam (ScreenNameListParam sns) = [("screen_name", PVStringArray (map T.pack sns))]
mkListParam :: ListParam -> APIQuery
mkListParam (ListIdParam lid) = [("list_id", PVInteger lid)]
mkListParam (ListNameParam listname) =
[("slug", PVString (T.pack lstName)),
("owner_screen_name", PVString (T.pack screenName))]
where
(screenName, ln) = span (/= '/') listname
lstName = drop 1 ln