module Facebook.Object.Action
( createAction
, Action(..)
) where
import Control.Arrow (first)
import Data.Function (on)
import Data.String (IsString(..))
import Data.Text (Text)
import qualified Control.Monad.Trans.Resource as R
import Facebook.Types
import Facebook.Monad
import Facebook.Graph
createAction
:: (R.MonadResource m, R.MonadUnliftIO m, R.MonadThrow m)
=> Action
-> [Argument]
-> Maybe AppAccessToken
-> UserAccessToken
-> FacebookT Auth m Id
createAction (Action action) query mapptoken usertoken = do
creds <- getCreds
let post
:: (R.MonadResource m, R.MonadUnliftIO m, R.MonadThrow m)
=> Text -> AccessToken anyKind -> FacebookT Auth m Id
post prepath = postObject (prepath <> appName creds <> ":" <> action) query
case mapptoken of
Nothing -> post "/me/" usertoken
Just apptoken -> post ("/" <> idCode (accessTokenUserId usertoken) <> "/") apptoken
newtype Action = Action
{ unAction :: Text
}
instance Show Action where
show = show . unAction
instance Eq Action where
(==) = (==) `on` unAction
(/=) = (/=) `on` unAction
instance Ord Action where
compare = compare `on` unAction
(<=) = (<=) `on` unAction
(<) = (<) `on` unAction
(>=) = (>=) `on` unAction
(>) = (>) `on` unAction
instance Read Action where
readsPrec = (fmap (first Action) .) . readsPrec
instance IsString Action where
fromString = Action . fromString