{-# LANGUAGE OverloadedStrings #-}
module Web.Twitter.Conduit.Parameters (
UserParam (..),
UserListParam (..),
ListParam (..),
MediaData (..),
TweetMode (..),
mkUserParam,
mkUserListParam,
mkListParam,
) where
import qualified Data.Text as T
import Network.HTTP.Client (RequestBody)
import Web.Twitter.Conduit.Request.Internal (APIQuery, PV (..), ParameterValue (..))
import Web.Twitter.Types
data UserParam = UserIdParam UserId | ScreenNameParam String
deriving (Int -> UserParam -> ShowS
[UserParam] -> ShowS
UserParam -> String
(Int -> UserParam -> ShowS)
-> (UserParam -> String)
-> ([UserParam] -> ShowS)
-> Show UserParam
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [UserParam] -> ShowS
$cshowList :: [UserParam] -> ShowS
show :: UserParam -> String
$cshow :: UserParam -> String
showsPrec :: Int -> UserParam -> ShowS
$cshowsPrec :: Int -> UserParam -> ShowS
Show, UserParam -> UserParam -> Bool
(UserParam -> UserParam -> Bool)
-> (UserParam -> UserParam -> Bool) -> Eq UserParam
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: UserParam -> UserParam -> Bool
$c/= :: UserParam -> UserParam -> Bool
== :: UserParam -> UserParam -> Bool
$c== :: UserParam -> UserParam -> Bool
Eq)
data UserListParam = UserIdListParam [UserId] | ScreenNameListParam [String]
deriving (Int -> UserListParam -> ShowS
[UserListParam] -> ShowS
UserListParam -> String
(Int -> UserListParam -> ShowS)
-> (UserListParam -> String)
-> ([UserListParam] -> ShowS)
-> Show UserListParam
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [UserListParam] -> ShowS
$cshowList :: [UserListParam] -> ShowS
show :: UserListParam -> String
$cshow :: UserListParam -> String
showsPrec :: Int -> UserListParam -> ShowS
$cshowsPrec :: Int -> UserListParam -> ShowS
Show, UserListParam -> UserListParam -> Bool
(UserListParam -> UserListParam -> Bool)
-> (UserListParam -> UserListParam -> Bool) -> Eq UserListParam
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: UserListParam -> UserListParam -> Bool
$c/= :: UserListParam -> UserListParam -> Bool
== :: UserListParam -> UserListParam -> Bool
$c== :: UserListParam -> UserListParam -> Bool
Eq)
data ListParam = ListIdParam Integer | ListNameParam String
deriving (Int -> ListParam -> ShowS
[ListParam] -> ShowS
ListParam -> String
(Int -> ListParam -> ShowS)
-> (ListParam -> String)
-> ([ListParam] -> ShowS)
-> Show ListParam
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ListParam] -> ShowS
$cshowList :: [ListParam] -> ShowS
show :: ListParam -> String
$cshow :: ListParam -> String
showsPrec :: Int -> ListParam -> ShowS
$cshowsPrec :: Int -> ListParam -> ShowS
Show, ListParam -> ListParam -> Bool
(ListParam -> ListParam -> Bool)
-> (ListParam -> ListParam -> Bool) -> Eq ListParam
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ListParam -> ListParam -> Bool
$c/= :: ListParam -> ListParam -> Bool
== :: ListParam -> ListParam -> Bool
$c== :: ListParam -> ListParam -> Bool
Eq)
data MediaData
= MediaFromFile FilePath
| MediaRequestBody FilePath RequestBody
mkUserParam :: UserParam -> APIQuery
mkUserParam :: UserParam -> APIQuery
mkUserParam (UserIdParam UserId
uid) = [(ByteString
"user_id", UserId -> PV
PVInteger UserId
uid)]
mkUserParam (ScreenNameParam String
sn) = [(ByteString
"screen_name", Text -> PV
PVString (Text -> PV) -> (String -> Text) -> String -> PV
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Text
T.pack (String -> PV) -> String -> PV
forall a b. (a -> b) -> a -> b
$ String
sn)]
mkUserListParam :: UserListParam -> APIQuery
mkUserListParam :: UserListParam -> APIQuery
mkUserListParam (UserIdListParam [UserId]
uids) = [(ByteString
"user_id", [UserId] -> PV
PVIntegerArray [UserId]
uids)]
mkUserListParam (ScreenNameListParam [String]
sns) = [(ByteString
"screen_name", [Text] -> PV
PVStringArray ((String -> Text) -> [String] -> [Text]
forall a b. (a -> b) -> [a] -> [b]
map String -> Text
T.pack [String]
sns))]
mkListParam :: ListParam -> APIQuery
mkListParam :: ListParam -> APIQuery
mkListParam (ListIdParam UserId
lid) = [(ByteString
"list_id", UserId -> PV
PVInteger UserId
lid)]
mkListParam (ListNameParam String
listname) =
[ (ByteString
"slug", Text -> PV
PVString (String -> Text
T.pack String
lstName))
, (ByteString
"owner_screen_name", Text -> PV
PVString (String -> Text
T.pack String
screenName))
]
where
(String
screenName, String
ln) = (Char -> Bool) -> String -> (String, String)
forall a. (a -> Bool) -> [a] -> ([a], [a])
span (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
/= Char
'/') String
listname
lstName :: String
lstName = Int -> ShowS
forall a. Int -> [a] -> [a]
drop Int
1 String
ln
data = Extended deriving (Int -> TweetMode -> ShowS
[TweetMode] -> ShowS
TweetMode -> String
(Int -> TweetMode -> ShowS)
-> (TweetMode -> String)
-> ([TweetMode] -> ShowS)
-> Show TweetMode
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [TweetMode] -> ShowS
$cshowList :: [TweetMode] -> ShowS
show :: TweetMode -> String
$cshow :: TweetMode -> String
showsPrec :: Int -> TweetMode -> ShowS
$cshowsPrec :: Int -> TweetMode -> ShowS
Show, TweetMode -> TweetMode -> Bool
(TweetMode -> TweetMode -> Bool)
-> (TweetMode -> TweetMode -> Bool) -> Eq TweetMode
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: TweetMode -> TweetMode -> Bool
$c/= :: TweetMode -> TweetMode -> Bool
== :: TweetMode -> TweetMode -> Bool
$c== :: TweetMode -> TweetMode -> Bool
Eq)
instance ParameterValue TweetMode where
wrap :: TweetMode -> PV
wrap TweetMode
Extended = Text -> PV
PVString Text
"extended"
unwrap :: PV -> TweetMode
unwrap = TweetMode -> PV -> TweetMode
forall a b. a -> b -> a
const TweetMode
Extended