{-# LANGUAGE CPP #-}
{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}

module Web.Twitter.Types (
    UserId,
    Friends,
    URIString,
    UserName,
    StatusId,
    LanguageCode,
    StreamingAPI (..),
    Status (..),
    SearchResult (..),
    SearchStatus (..),
    SearchMetadata (..),
    RetweetedStatus (..),
    DirectMessage (..),
    EventTarget (..),
    Event (..),
    Delete (..),
    User (..),
    List (..),
    Entities (..),
    EntityIndices,
    ExtendedEntities (..),
    Variant (..),
    VideoInfo (..),
    ExtendedEntity (..),
    Entity (..),
    HashTagEntity (..),
    UserEntity (..),
    URLEntity (..),
    MediaEntity (..),
    MediaSize (..),
    Coordinates (..),
    Place (..),
    BoundingBox (..),
    Contributor (..),
    UploadedMedia (..),
    ImageSizeType (..),
    DisplayTextRange (..),
    checkError,
    twitterTimeFormat,
) where

import Control.Applicative
import Control.Monad
import Data.Aeson
import Data.Aeson.Types (Parser)
import Data.Data
import Data.HashMap.Strict (HashMap)

#if MIN_VERSION_aeson(2, 0, 0)
import qualified Data.Aeson.KeyMap as KeyMap
#else
import qualified Data.HashMap.Strict as KeyMap
#endif
import Data.Int
import Data.Ratio
import Data.Text (Text, pack, unpack)
import Data.Text.Read (decimal)
import Data.Time
import Data.Time.Clock.POSIX
import GHC.Generics

newtype TwitterTime = TwitterTime {TwitterTime -> UTCTime
fromTwitterTime :: UTCTime}

type UserId = Integer
type Friends = [UserId]
type URIString = Text
type UserName = Text
type StatusId = Integer
type LanguageCode = String

data StreamingAPI
    = SStatus Status
    | SRetweetedStatus RetweetedStatus
    | SEvent Event
    | SDelete Delete
    | -- | SScrubGeo ScrubGeo
      SFriends Friends
    | SDirectMessage DirectMessage
    | SUnknown Value
    deriving (Int -> StreamingAPI -> ShowS
[StreamingAPI] -> ShowS
StreamingAPI -> String
(Int -> StreamingAPI -> ShowS)
-> (StreamingAPI -> String)
-> ([StreamingAPI] -> ShowS)
-> Show StreamingAPI
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [StreamingAPI] -> ShowS
$cshowList :: [StreamingAPI] -> ShowS
show :: StreamingAPI -> String
$cshow :: StreamingAPI -> String
showsPrec :: Int -> StreamingAPI -> ShowS
$cshowsPrec :: Int -> StreamingAPI -> ShowS
Show, StreamingAPI -> StreamingAPI -> Bool
(StreamingAPI -> StreamingAPI -> Bool)
-> (StreamingAPI -> StreamingAPI -> Bool) -> Eq StreamingAPI
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: StreamingAPI -> StreamingAPI -> Bool
$c/= :: StreamingAPI -> StreamingAPI -> Bool
== :: StreamingAPI -> StreamingAPI -> Bool
$c== :: StreamingAPI -> StreamingAPI -> Bool
Eq, Typeable StreamingAPI
DataType
Constr
Typeable StreamingAPI
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> StreamingAPI -> c StreamingAPI)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c StreamingAPI)
-> (StreamingAPI -> Constr)
-> (StreamingAPI -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c StreamingAPI))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e))
    -> Maybe (c StreamingAPI))
-> ((forall b. Data b => b -> b) -> StreamingAPI -> StreamingAPI)
-> (forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> StreamingAPI -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> StreamingAPI -> r)
-> (forall u. (forall d. Data d => d -> u) -> StreamingAPI -> [u])
-> (forall u.
    Int -> (forall d. Data d => d -> u) -> StreamingAPI -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> StreamingAPI -> m StreamingAPI)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> StreamingAPI -> m StreamingAPI)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> StreamingAPI -> m StreamingAPI)
-> Data StreamingAPI
StreamingAPI -> DataType
StreamingAPI -> Constr
(forall b. Data b => b -> b) -> StreamingAPI -> StreamingAPI
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> StreamingAPI -> c StreamingAPI
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c StreamingAPI
forall a.
Typeable a
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> StreamingAPI -> u
forall u. (forall d. Data d => d -> u) -> StreamingAPI -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> StreamingAPI -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> StreamingAPI -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> StreamingAPI -> m StreamingAPI
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> StreamingAPI -> m StreamingAPI
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c StreamingAPI
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> StreamingAPI -> c StreamingAPI
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c StreamingAPI)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c StreamingAPI)
$cSUnknown :: Constr
$cSDirectMessage :: Constr
$cSFriends :: Constr
$cSDelete :: Constr
$cSEvent :: Constr
$cSRetweetedStatus :: Constr
$cSStatus :: Constr
$tStreamingAPI :: DataType
gmapMo :: (forall d. Data d => d -> m d) -> StreamingAPI -> m StreamingAPI
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> StreamingAPI -> m StreamingAPI
gmapMp :: (forall d. Data d => d -> m d) -> StreamingAPI -> m StreamingAPI
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> StreamingAPI -> m StreamingAPI
gmapM :: (forall d. Data d => d -> m d) -> StreamingAPI -> m StreamingAPI
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> StreamingAPI -> m StreamingAPI
gmapQi :: Int -> (forall d. Data d => d -> u) -> StreamingAPI -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> StreamingAPI -> u
gmapQ :: (forall d. Data d => d -> u) -> StreamingAPI -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> StreamingAPI -> [u]
gmapQr :: (r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> StreamingAPI -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> StreamingAPI -> r
gmapQl :: (r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> StreamingAPI -> r
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> StreamingAPI -> r
gmapT :: (forall b. Data b => b -> b) -> StreamingAPI -> StreamingAPI
$cgmapT :: (forall b. Data b => b -> b) -> StreamingAPI -> StreamingAPI
dataCast2 :: (forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c StreamingAPI)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c StreamingAPI)
dataCast1 :: (forall d. Data d => c (t d)) -> Maybe (c StreamingAPI)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c StreamingAPI)
dataTypeOf :: StreamingAPI -> DataType
$cdataTypeOf :: StreamingAPI -> DataType
toConstr :: StreamingAPI -> Constr
$ctoConstr :: StreamingAPI -> Constr
gunfold :: (forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c StreamingAPI
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c StreamingAPI
gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> StreamingAPI -> c StreamingAPI
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> StreamingAPI -> c StreamingAPI
$cp1Data :: Typeable StreamingAPI
Data, Typeable, (forall x. StreamingAPI -> Rep StreamingAPI x)
-> (forall x. Rep StreamingAPI x -> StreamingAPI)
-> Generic StreamingAPI
forall x. Rep StreamingAPI x -> StreamingAPI
forall x. StreamingAPI -> Rep StreamingAPI x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep StreamingAPI x -> StreamingAPI
$cfrom :: forall x. StreamingAPI -> Rep StreamingAPI x
Generic)

checkError :: Object -> Parser ()
checkError :: Object -> Parser ()
checkError Object
o = do
    Maybe String
err <- Object
o Object -> Key -> Parser (Maybe String)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"error"
    case Maybe String
err of
        Just String
msg -> String -> Parser ()
forall (m :: * -> *) a. MonadFail m => String -> m a
fail String
msg
        Maybe String
Nothing -> () -> Parser ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()

twitterTimeFormat :: String
twitterTimeFormat :: String
twitterTimeFormat = String
"%a %b %d %T %z %Y"

instance FromJSON TwitterTime where
    parseJSON :: Value -> Parser TwitterTime
parseJSON = String
-> (Text -> Parser TwitterTime) -> Value -> Parser TwitterTime
forall a. String -> (Text -> Parser a) -> Value -> Parser a
withText String
"TwitterTime" ((Text -> Parser TwitterTime) -> Value -> Parser TwitterTime)
-> (Text -> Parser TwitterTime) -> Value -> Parser TwitterTime
forall a b. (a -> b) -> a -> b
$ \Text
t ->
        case Bool -> TimeLocale -> String -> String -> Maybe UTCTime
forall (m :: * -> *) t.
(MonadFail m, ParseTime t) =>
Bool -> TimeLocale -> String -> String -> m t
parseTimeM Bool
True TimeLocale
defaultTimeLocale String
twitterTimeFormat (Text -> String
unpack Text
t) of
            Just UTCTime
d -> TwitterTime -> Parser TwitterTime
forall (f :: * -> *) a. Applicative f => a -> f a
pure (TwitterTime -> Parser TwitterTime)
-> TwitterTime -> Parser TwitterTime
forall a b. (a -> b) -> a -> b
$ UTCTime -> TwitterTime
TwitterTime UTCTime
d
            Maybe UTCTime
Nothing -> String -> Parser TwitterTime
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> Parser TwitterTime) -> String -> Parser TwitterTime
forall a b. (a -> b) -> a -> b
$ String
"Could not parse twitter time. Text was: " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Text -> String
unpack Text
t

instance ToJSON TwitterTime where
    toJSON :: TwitterTime -> Value
toJSON TwitterTime
t = Text -> Value
String (Text -> Value) -> Text -> Value
forall a b. (a -> b) -> a -> b
$ String -> Text
pack (String -> Text) -> String -> Text
forall a b. (a -> b) -> a -> b
$ TimeLocale -> String -> UTCTime -> String
forall t. FormatTime t => TimeLocale -> String -> t -> String
formatTime TimeLocale
defaultTimeLocale String
twitterTimeFormat (UTCTime -> String) -> UTCTime -> String
forall a b. (a -> b) -> a -> b
$ TwitterTime -> UTCTime
fromTwitterTime TwitterTime
t

instance FromJSON StreamingAPI where
    parseJSON :: Value -> Parser StreamingAPI
parseJSON v :: Value
v@(Object Object
o) =
        RetweetedStatus -> StreamingAPI
SRetweetedStatus (RetweetedStatus -> StreamingAPI)
-> Parser RetweetedStatus -> Parser StreamingAPI
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser RetweetedStatus
forall a. FromJSON a => Parser a
js
            Parser StreamingAPI -> Parser StreamingAPI -> Parser StreamingAPI
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Status -> StreamingAPI
SStatus (Status -> StreamingAPI) -> Parser Status -> Parser StreamingAPI
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser Status
forall a. FromJSON a => Parser a
js
            Parser StreamingAPI -> Parser StreamingAPI -> Parser StreamingAPI
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Event -> StreamingAPI
SEvent (Event -> StreamingAPI) -> Parser Event -> Parser StreamingAPI
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser Event
forall a. FromJSON a => Parser a
js
            Parser StreamingAPI -> Parser StreamingAPI -> Parser StreamingAPI
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Delete -> StreamingAPI
SDelete (Delete -> StreamingAPI) -> Parser Delete -> Parser StreamingAPI
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser Delete
forall a. FromJSON a => Parser a
js
            Parser StreamingAPI -> Parser StreamingAPI -> Parser StreamingAPI
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Friends -> StreamingAPI
SFriends (Friends -> StreamingAPI) -> Parser Friends -> Parser StreamingAPI
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Object
o Object -> Key -> Parser Friends
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"friends")
            Parser StreamingAPI -> Parser StreamingAPI -> Parser StreamingAPI
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> DirectMessage -> StreamingAPI
SDirectMessage (DirectMessage -> StreamingAPI)
-> Parser DirectMessage -> Parser StreamingAPI
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Object
o Object -> Key -> Parser DirectMessage
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"direct_message")
            Parser StreamingAPI -> Parser StreamingAPI -> Parser StreamingAPI
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> StreamingAPI -> Parser StreamingAPI
forall (m :: * -> *) a. Monad m => a -> m a
return (Value -> StreamingAPI
SUnknown Value
v)
      where
        js :: FromJSON a => Parser a
        js :: Parser a
js = Value -> Parser a
forall a. FromJSON a => Value -> Parser a
parseJSON Value
v
    parseJSON Value
v = String -> Parser StreamingAPI
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> Parser StreamingAPI) -> String -> Parser StreamingAPI
forall a b. (a -> b) -> a -> b
$ String
"couldn't parse StreamingAPI from: " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Value -> String
forall a. Show a => a -> String
show Value
v

instance ToJSON StreamingAPI where
    toJSON :: StreamingAPI -> Value
toJSON (SStatus Status
s) = Status -> Value
forall a. ToJSON a => a -> Value
toJSON Status
s
    toJSON (SRetweetedStatus RetweetedStatus
s) = RetweetedStatus -> Value
forall a. ToJSON a => a -> Value
toJSON RetweetedStatus
s
    toJSON (SEvent Event
e) = Event -> Value
forall a. ToJSON a => a -> Value
toJSON Event
e
    toJSON (SDelete Delete
d) = Delete -> Value
forall a. ToJSON a => a -> Value
toJSON Delete
d
    toJSON (SFriends Friends
f) = Friends -> Value
forall a. ToJSON a => a -> Value
toJSON Friends
f
    toJSON (SDirectMessage DirectMessage
m) = DirectMessage -> Value
forall a. ToJSON a => a -> Value
toJSON DirectMessage
m
    toJSON (SUnknown Value
v) = Value
v

-- | This type represents a Twitter tweet structure.
-- See <https://dev.twitter.com/docs/platform-objects/tweets>.
data Status = Status
    { Status -> Maybe [Contributor]
statusContributors :: Maybe [Contributor]
    , Status -> Maybe Coordinates
statusCoordinates :: Maybe Coordinates
    , Status -> UTCTime
statusCreatedAt :: UTCTime
    , Status -> Maybe StatusId
statusCurrentUserRetweet :: Maybe StatusId
    , Status -> Maybe Entities
statusEntities :: Maybe Entities
    , Status -> Maybe ExtendedEntities
statusExtendedEntities :: Maybe ExtendedEntities
    , Status -> StatusId
statusFavoriteCount :: Integer
    , Status -> Maybe Bool
statusFavorited :: Maybe Bool
    , Status -> Maybe Text
statusFilterLevel :: Maybe Text
    , Status -> StatusId
statusId :: StatusId
    , Status -> Maybe Text
statusInReplyToScreenName :: Maybe Text
    , Status -> Maybe StatusId
statusInReplyToStatusId :: Maybe StatusId
    , Status -> Maybe StatusId
statusInReplyToUserId :: Maybe UserId
    , Status -> Maybe String
statusLang :: Maybe LanguageCode
    , Status -> Maybe Place
statusPlace :: Maybe Place
    , Status -> Maybe Bool
statusPossiblySensitive :: Maybe Bool
    , Status -> Maybe Object
statusScopes :: Maybe Object
    , Status -> Maybe StatusId
statusQuotedStatusId :: Maybe StatusId
    , Status -> Maybe Status
statusQuotedStatus :: Maybe Status
    , Status -> StatusId
statusRetweetCount :: Integer
    , Status -> Maybe Bool
statusRetweeted :: Maybe Bool
    , Status -> Maybe Status
statusRetweetedStatus :: Maybe Status
    , Status -> Text
statusSource :: Text
    , Status -> Text
statusText :: Text
    , Status -> Bool
statusTruncated :: Bool
    , Status -> User
statusUser :: User
    , Status -> Maybe Bool
statusWithheldCopyright :: Maybe Bool
    , Status -> Maybe [Text]
statusWithheldInCountries :: Maybe [Text]
    , Status -> Maybe Text
statusWithheldScope :: Maybe Text
    , Status -> Maybe DisplayTextRange
statusDisplayTextRange :: Maybe DisplayTextRange
    }
    deriving (Int -> Status -> ShowS
[Status] -> ShowS
Status -> String
(Int -> Status -> ShowS)
-> (Status -> String) -> ([Status] -> ShowS) -> Show Status
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Status] -> ShowS
$cshowList :: [Status] -> ShowS
show :: Status -> String
$cshow :: Status -> String
showsPrec :: Int -> Status -> ShowS
$cshowsPrec :: Int -> Status -> ShowS
Show, Status -> Status -> Bool
(Status -> Status -> Bool)
-> (Status -> Status -> Bool) -> Eq Status
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Status -> Status -> Bool
$c/= :: Status -> Status -> Bool
== :: Status -> Status -> Bool
$c== :: Status -> Status -> Bool
Eq, Typeable Status
DataType
Constr
Typeable Status
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> Status -> c Status)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c Status)
-> (Status -> Constr)
-> (Status -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c Status))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Status))
-> ((forall b. Data b => b -> b) -> Status -> Status)
-> (forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> Status -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> Status -> r)
-> (forall u. (forall d. Data d => d -> u) -> Status -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> Status -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> Status -> m Status)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> Status -> m Status)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> Status -> m Status)
-> Data Status
Status -> DataType
Status -> Constr
(forall b. Data b => b -> b) -> Status -> Status
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Status -> c Status
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Status
forall a.
Typeable a
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> Status -> u
forall u. (forall d. Data d => d -> u) -> Status -> [u]
forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Status -> r
forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Status -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Status -> m Status
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Status -> m Status
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Status
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Status -> c Status
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c Status)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Status)
$cStatus :: Constr
$tStatus :: DataType
gmapMo :: (forall d. Data d => d -> m d) -> Status -> m Status
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Status -> m Status
gmapMp :: (forall d. Data d => d -> m d) -> Status -> m Status
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Status -> m Status
gmapM :: (forall d. Data d => d -> m d) -> Status -> m Status
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Status -> m Status
gmapQi :: Int -> (forall d. Data d => d -> u) -> Status -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> Status -> u
gmapQ :: (forall d. Data d => d -> u) -> Status -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> Status -> [u]
gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Status -> r
$cgmapQr :: forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Status -> r
gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Status -> r
$cgmapQl :: forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Status -> r
gmapT :: (forall b. Data b => b -> b) -> Status -> Status
$cgmapT :: (forall b. Data b => b -> b) -> Status -> Status
dataCast2 :: (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Status)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Status)
dataCast1 :: (forall d. Data d => c (t d)) -> Maybe (c Status)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c Status)
dataTypeOf :: Status -> DataType
$cdataTypeOf :: Status -> DataType
toConstr :: Status -> Constr
$ctoConstr :: Status -> Constr
gunfold :: (forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Status
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Status
gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Status -> c Status
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Status -> c Status
$cp1Data :: Typeable Status
Data, Typeable, (forall x. Status -> Rep Status x)
-> (forall x. Rep Status x -> Status) -> Generic Status
forall x. Rep Status x -> Status
forall x. Status -> Rep Status x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep Status x -> Status
$cfrom :: forall x. Status -> Rep Status x
Generic)

instance FromJSON Status where
    parseJSON :: Value -> Parser Status
parseJSON (Object Object
o) =
        Object -> Parser ()
checkError Object
o
            Parser () -> Parser Status -> Parser Status
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Maybe [Contributor]
-> Maybe Coordinates
-> UTCTime
-> Maybe StatusId
-> Maybe Entities
-> Maybe ExtendedEntities
-> StatusId
-> Maybe Bool
-> Maybe Text
-> StatusId
-> Maybe Text
-> Maybe StatusId
-> Maybe StatusId
-> Maybe String
-> Maybe Place
-> Maybe Bool
-> Maybe Object
-> Maybe StatusId
-> Maybe Status
-> StatusId
-> Maybe Bool
-> Maybe Status
-> Text
-> Text
-> Bool
-> User
-> Maybe Bool
-> Maybe [Text]
-> Maybe Text
-> Maybe DisplayTextRange
-> Status
Status (Maybe [Contributor]
 -> Maybe Coordinates
 -> UTCTime
 -> Maybe StatusId
 -> Maybe Entities
 -> Maybe ExtendedEntities
 -> StatusId
 -> Maybe Bool
 -> Maybe Text
 -> StatusId
 -> Maybe Text
 -> Maybe StatusId
 -> Maybe StatusId
 -> Maybe String
 -> Maybe Place
 -> Maybe Bool
 -> Maybe Object
 -> Maybe StatusId
 -> Maybe Status
 -> StatusId
 -> Maybe Bool
 -> Maybe Status
 -> Text
 -> Text
 -> Bool
 -> User
 -> Maybe Bool
 -> Maybe [Text]
 -> Maybe Text
 -> Maybe DisplayTextRange
 -> Status)
-> Parser (Maybe [Contributor])
-> Parser
     (Maybe Coordinates
      -> UTCTime
      -> Maybe StatusId
      -> Maybe Entities
      -> Maybe ExtendedEntities
      -> StatusId
      -> Maybe Bool
      -> Maybe Text
      -> StatusId
      -> Maybe Text
      -> Maybe StatusId
      -> Maybe StatusId
      -> Maybe String
      -> Maybe Place
      -> Maybe Bool
      -> Maybe Object
      -> Maybe StatusId
      -> Maybe Status
      -> StatusId
      -> Maybe Bool
      -> Maybe Status
      -> Text
      -> Text
      -> Bool
      -> User
      -> Maybe Bool
      -> Maybe [Text]
      -> Maybe Text
      -> Maybe DisplayTextRange
      -> Status)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser (Maybe (Maybe [Contributor]))
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"contributors" Parser (Maybe (Maybe [Contributor]))
-> Maybe [Contributor] -> Parser (Maybe [Contributor])
forall a. Parser (Maybe a) -> a -> Parser a
.!= Maybe [Contributor]
forall a. Maybe a
Nothing
            Parser
  (Maybe Coordinates
   -> UTCTime
   -> Maybe StatusId
   -> Maybe Entities
   -> Maybe ExtendedEntities
   -> StatusId
   -> Maybe Bool
   -> Maybe Text
   -> StatusId
   -> Maybe Text
   -> Maybe StatusId
   -> Maybe StatusId
   -> Maybe String
   -> Maybe Place
   -> Maybe Bool
   -> Maybe Object
   -> Maybe StatusId
   -> Maybe Status
   -> StatusId
   -> Maybe Bool
   -> Maybe Status
   -> Text
   -> Text
   -> Bool
   -> User
   -> Maybe Bool
   -> Maybe [Text]
   -> Maybe Text
   -> Maybe DisplayTextRange
   -> Status)
-> Parser (Maybe Coordinates)
-> Parser
     (UTCTime
      -> Maybe StatusId
      -> Maybe Entities
      -> Maybe ExtendedEntities
      -> StatusId
      -> Maybe Bool
      -> Maybe Text
      -> StatusId
      -> Maybe Text
      -> Maybe StatusId
      -> Maybe StatusId
      -> Maybe String
      -> Maybe Place
      -> Maybe Bool
      -> Maybe Object
      -> Maybe StatusId
      -> Maybe Status
      -> StatusId
      -> Maybe Bool
      -> Maybe Status
      -> Text
      -> Text
      -> Bool
      -> User
      -> Maybe Bool
      -> Maybe [Text]
      -> Maybe Text
      -> Maybe DisplayTextRange
      -> Status)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe (Maybe Coordinates))
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"coordinates" Parser (Maybe (Maybe Coordinates))
-> Maybe Coordinates -> Parser (Maybe Coordinates)
forall a. Parser (Maybe a) -> a -> Parser a
.!= Maybe Coordinates
forall a. Maybe a
Nothing
            Parser
  (UTCTime
   -> Maybe StatusId
   -> Maybe Entities
   -> Maybe ExtendedEntities
   -> StatusId
   -> Maybe Bool
   -> Maybe Text
   -> StatusId
   -> Maybe Text
   -> Maybe StatusId
   -> Maybe StatusId
   -> Maybe String
   -> Maybe Place
   -> Maybe Bool
   -> Maybe Object
   -> Maybe StatusId
   -> Maybe Status
   -> StatusId
   -> Maybe Bool
   -> Maybe Status
   -> Text
   -> Text
   -> Bool
   -> User
   -> Maybe Bool
   -> Maybe [Text]
   -> Maybe Text
   -> Maybe DisplayTextRange
   -> Status)
-> Parser UTCTime
-> Parser
     (Maybe StatusId
      -> Maybe Entities
      -> Maybe ExtendedEntities
      -> StatusId
      -> Maybe Bool
      -> Maybe Text
      -> StatusId
      -> Maybe Text
      -> Maybe StatusId
      -> Maybe StatusId
      -> Maybe String
      -> Maybe Place
      -> Maybe Bool
      -> Maybe Object
      -> Maybe StatusId
      -> Maybe Status
      -> StatusId
      -> Maybe Bool
      -> Maybe Status
      -> Text
      -> Text
      -> Bool
      -> User
      -> Maybe Bool
      -> Maybe [Text]
      -> Maybe Text
      -> Maybe DisplayTextRange
      -> Status)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Object
o Object -> Key -> Parser TwitterTime
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"created_at" Parser TwitterTime
-> (TwitterTime -> Parser UTCTime) -> Parser UTCTime
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= UTCTime -> Parser UTCTime
forall (m :: * -> *) a. Monad m => a -> m a
return (UTCTime -> Parser UTCTime)
-> (TwitterTime -> UTCTime) -> TwitterTime -> Parser UTCTime
forall b c a. (b -> c) -> (a -> b) -> a -> c
. TwitterTime -> UTCTime
fromTwitterTime)
            Parser
  (Maybe StatusId
   -> Maybe Entities
   -> Maybe ExtendedEntities
   -> StatusId
   -> Maybe Bool
   -> Maybe Text
   -> StatusId
   -> Maybe Text
   -> Maybe StatusId
   -> Maybe StatusId
   -> Maybe String
   -> Maybe Place
   -> Maybe Bool
   -> Maybe Object
   -> Maybe StatusId
   -> Maybe Status
   -> StatusId
   -> Maybe Bool
   -> Maybe Status
   -> Text
   -> Text
   -> Bool
   -> User
   -> Maybe Bool
   -> Maybe [Text]
   -> Maybe Text
   -> Maybe DisplayTextRange
   -> Status)
-> Parser (Maybe StatusId)
-> Parser
     (Maybe Entities
      -> Maybe ExtendedEntities
      -> StatusId
      -> Maybe Bool
      -> Maybe Text
      -> StatusId
      -> Maybe Text
      -> Maybe StatusId
      -> Maybe StatusId
      -> Maybe String
      -> Maybe Place
      -> Maybe Bool
      -> Maybe Object
      -> Maybe StatusId
      -> Maybe Status
      -> StatusId
      -> Maybe Bool
      -> Maybe Status
      -> Text
      -> Text
      -> Bool
      -> User
      -> Maybe Bool
      -> Maybe [Text]
      -> Maybe Text
      -> Maybe DisplayTextRange
      -> Status)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ((Object
o Object -> Key -> Parser Object
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"current_user_retweet" Parser Object
-> (Object -> Parser (Maybe StatusId)) -> Parser (Maybe StatusId)
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (Object -> Key -> Parser (Maybe StatusId)
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"id")) Parser (Maybe StatusId)
-> Parser (Maybe StatusId) -> Parser (Maybe StatusId)
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Maybe StatusId -> Parser (Maybe StatusId)
forall (m :: * -> *) a. Monad m => a -> m a
return Maybe StatusId
forall a. Maybe a
Nothing)
            Parser
  (Maybe Entities
   -> Maybe ExtendedEntities
   -> StatusId
   -> Maybe Bool
   -> Maybe Text
   -> StatusId
   -> Maybe Text
   -> Maybe StatusId
   -> Maybe StatusId
   -> Maybe String
   -> Maybe Place
   -> Maybe Bool
   -> Maybe Object
   -> Maybe StatusId
   -> Maybe Status
   -> StatusId
   -> Maybe Bool
   -> Maybe Status
   -> Text
   -> Text
   -> Bool
   -> User
   -> Maybe Bool
   -> Maybe [Text]
   -> Maybe Text
   -> Maybe DisplayTextRange
   -> Status)
-> Parser (Maybe Entities)
-> Parser
     (Maybe ExtendedEntities
      -> StatusId
      -> Maybe Bool
      -> Maybe Text
      -> StatusId
      -> Maybe Text
      -> Maybe StatusId
      -> Maybe StatusId
      -> Maybe String
      -> Maybe Place
      -> Maybe Bool
      -> Maybe Object
      -> Maybe StatusId
      -> Maybe Status
      -> StatusId
      -> Maybe Bool
      -> Maybe Status
      -> Text
      -> Text
      -> Bool
      -> User
      -> Maybe Bool
      -> Maybe [Text]
      -> Maybe Text
      -> Maybe DisplayTextRange
      -> Status)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Entities)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"entities"
            Parser
  (Maybe ExtendedEntities
   -> StatusId
   -> Maybe Bool
   -> Maybe Text
   -> StatusId
   -> Maybe Text
   -> Maybe StatusId
   -> Maybe StatusId
   -> Maybe String
   -> Maybe Place
   -> Maybe Bool
   -> Maybe Object
   -> Maybe StatusId
   -> Maybe Status
   -> StatusId
   -> Maybe Bool
   -> Maybe Status
   -> Text
   -> Text
   -> Bool
   -> User
   -> Maybe Bool
   -> Maybe [Text]
   -> Maybe Text
   -> Maybe DisplayTextRange
   -> Status)
-> Parser (Maybe ExtendedEntities)
-> Parser
     (StatusId
      -> Maybe Bool
      -> Maybe Text
      -> StatusId
      -> Maybe Text
      -> Maybe StatusId
      -> Maybe StatusId
      -> Maybe String
      -> Maybe Place
      -> Maybe Bool
      -> Maybe Object
      -> Maybe StatusId
      -> Maybe Status
      -> StatusId
      -> Maybe Bool
      -> Maybe Status
      -> Text
      -> Text
      -> Bool
      -> User
      -> Maybe Bool
      -> Maybe [Text]
      -> Maybe Text
      -> Maybe DisplayTextRange
      -> Status)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe ExtendedEntities)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"extended_entities"
            Parser
  (StatusId
   -> Maybe Bool
   -> Maybe Text
   -> StatusId
   -> Maybe Text
   -> Maybe StatusId
   -> Maybe StatusId
   -> Maybe String
   -> Maybe Place
   -> Maybe Bool
   -> Maybe Object
   -> Maybe StatusId
   -> Maybe Status
   -> StatusId
   -> Maybe Bool
   -> Maybe Status
   -> Text
   -> Text
   -> Bool
   -> User
   -> Maybe Bool
   -> Maybe [Text]
   -> Maybe Text
   -> Maybe DisplayTextRange
   -> Status)
-> Parser StatusId
-> Parser
     (Maybe Bool
      -> Maybe Text
      -> StatusId
      -> Maybe Text
      -> Maybe StatusId
      -> Maybe StatusId
      -> Maybe String
      -> Maybe Place
      -> Maybe Bool
      -> Maybe Object
      -> Maybe StatusId
      -> Maybe Status
      -> StatusId
      -> Maybe Bool
      -> Maybe Status
      -> Text
      -> Text
      -> Bool
      -> User
      -> Maybe Bool
      -> Maybe [Text]
      -> Maybe Text
      -> Maybe DisplayTextRange
      -> Status)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe StatusId)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"favorite_count" Parser (Maybe StatusId) -> StatusId -> Parser StatusId
forall a. Parser (Maybe a) -> a -> Parser a
.!= StatusId
0
            Parser
  (Maybe Bool
   -> Maybe Text
   -> StatusId
   -> Maybe Text
   -> Maybe StatusId
   -> Maybe StatusId
   -> Maybe String
   -> Maybe Place
   -> Maybe Bool
   -> Maybe Object
   -> Maybe StatusId
   -> Maybe Status
   -> StatusId
   -> Maybe Bool
   -> Maybe Status
   -> Text
   -> Text
   -> Bool
   -> User
   -> Maybe Bool
   -> Maybe [Text]
   -> Maybe Text
   -> Maybe DisplayTextRange
   -> Status)
-> Parser (Maybe Bool)
-> Parser
     (Maybe Text
      -> StatusId
      -> Maybe Text
      -> Maybe StatusId
      -> Maybe StatusId
      -> Maybe String
      -> Maybe Place
      -> Maybe Bool
      -> Maybe Object
      -> Maybe StatusId
      -> Maybe Status
      -> StatusId
      -> Maybe Bool
      -> Maybe Status
      -> Text
      -> Text
      -> Bool
      -> User
      -> Maybe Bool
      -> Maybe [Text]
      -> Maybe Text
      -> Maybe DisplayTextRange
      -> Status)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Bool)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"favorited"
            Parser
  (Maybe Text
   -> StatusId
   -> Maybe Text
   -> Maybe StatusId
   -> Maybe StatusId
   -> Maybe String
   -> Maybe Place
   -> Maybe Bool
   -> Maybe Object
   -> Maybe StatusId
   -> Maybe Status
   -> StatusId
   -> Maybe Bool
   -> Maybe Status
   -> Text
   -> Text
   -> Bool
   -> User
   -> Maybe Bool
   -> Maybe [Text]
   -> Maybe Text
   -> Maybe DisplayTextRange
   -> Status)
-> Parser (Maybe Text)
-> Parser
     (StatusId
      -> Maybe Text
      -> Maybe StatusId
      -> Maybe StatusId
      -> Maybe String
      -> Maybe Place
      -> Maybe Bool
      -> Maybe Object
      -> Maybe StatusId
      -> Maybe Status
      -> StatusId
      -> Maybe Bool
      -> Maybe Status
      -> Text
      -> Text
      -> Bool
      -> User
      -> Maybe Bool
      -> Maybe [Text]
      -> Maybe Text
      -> Maybe DisplayTextRange
      -> Status)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"filter_level"
            Parser
  (StatusId
   -> Maybe Text
   -> Maybe StatusId
   -> Maybe StatusId
   -> Maybe String
   -> Maybe Place
   -> Maybe Bool
   -> Maybe Object
   -> Maybe StatusId
   -> Maybe Status
   -> StatusId
   -> Maybe Bool
   -> Maybe Status
   -> Text
   -> Text
   -> Bool
   -> User
   -> Maybe Bool
   -> Maybe [Text]
   -> Maybe Text
   -> Maybe DisplayTextRange
   -> Status)
-> Parser StatusId
-> Parser
     (Maybe Text
      -> Maybe StatusId
      -> Maybe StatusId
      -> Maybe String
      -> Maybe Place
      -> Maybe Bool
      -> Maybe Object
      -> Maybe StatusId
      -> Maybe Status
      -> StatusId
      -> Maybe Bool
      -> Maybe Status
      -> Text
      -> Text
      -> Bool
      -> User
      -> Maybe Bool
      -> Maybe [Text]
      -> Maybe Text
      -> Maybe DisplayTextRange
      -> Status)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser StatusId
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"id"
            Parser
  (Maybe Text
   -> Maybe StatusId
   -> Maybe StatusId
   -> Maybe String
   -> Maybe Place
   -> Maybe Bool
   -> Maybe Object
   -> Maybe StatusId
   -> Maybe Status
   -> StatusId
   -> Maybe Bool
   -> Maybe Status
   -> Text
   -> Text
   -> Bool
   -> User
   -> Maybe Bool
   -> Maybe [Text]
   -> Maybe Text
   -> Maybe DisplayTextRange
   -> Status)
-> Parser (Maybe Text)
-> Parser
     (Maybe StatusId
      -> Maybe StatusId
      -> Maybe String
      -> Maybe Place
      -> Maybe Bool
      -> Maybe Object
      -> Maybe StatusId
      -> Maybe Status
      -> StatusId
      -> Maybe Bool
      -> Maybe Status
      -> Text
      -> Text
      -> Bool
      -> User
      -> Maybe Bool
      -> Maybe [Text]
      -> Maybe Text
      -> Maybe DisplayTextRange
      -> Status)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe (Maybe Text))
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"in_reply_to_screen_name" Parser (Maybe (Maybe Text)) -> Maybe Text -> Parser (Maybe Text)
forall a. Parser (Maybe a) -> a -> Parser a
.!= Maybe Text
forall a. Maybe a
Nothing
            Parser
  (Maybe StatusId
   -> Maybe StatusId
   -> Maybe String
   -> Maybe Place
   -> Maybe Bool
   -> Maybe Object
   -> Maybe StatusId
   -> Maybe Status
   -> StatusId
   -> Maybe Bool
   -> Maybe Status
   -> Text
   -> Text
   -> Bool
   -> User
   -> Maybe Bool
   -> Maybe [Text]
   -> Maybe Text
   -> Maybe DisplayTextRange
   -> Status)
-> Parser (Maybe StatusId)
-> Parser
     (Maybe StatusId
      -> Maybe String
      -> Maybe Place
      -> Maybe Bool
      -> Maybe Object
      -> Maybe StatusId
      -> Maybe Status
      -> StatusId
      -> Maybe Bool
      -> Maybe Status
      -> Text
      -> Text
      -> Bool
      -> User
      -> Maybe Bool
      -> Maybe [Text]
      -> Maybe Text
      -> Maybe DisplayTextRange
      -> Status)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe (Maybe StatusId))
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"in_reply_to_status_id" Parser (Maybe (Maybe StatusId))
-> Maybe StatusId -> Parser (Maybe StatusId)
forall a. Parser (Maybe a) -> a -> Parser a
.!= Maybe StatusId
forall a. Maybe a
Nothing
            Parser
  (Maybe StatusId
   -> Maybe String
   -> Maybe Place
   -> Maybe Bool
   -> Maybe Object
   -> Maybe StatusId
   -> Maybe Status
   -> StatusId
   -> Maybe Bool
   -> Maybe Status
   -> Text
   -> Text
   -> Bool
   -> User
   -> Maybe Bool
   -> Maybe [Text]
   -> Maybe Text
   -> Maybe DisplayTextRange
   -> Status)
-> Parser (Maybe StatusId)
-> Parser
     (Maybe String
      -> Maybe Place
      -> Maybe Bool
      -> Maybe Object
      -> Maybe StatusId
      -> Maybe Status
      -> StatusId
      -> Maybe Bool
      -> Maybe Status
      -> Text
      -> Text
      -> Bool
      -> User
      -> Maybe Bool
      -> Maybe [Text]
      -> Maybe Text
      -> Maybe DisplayTextRange
      -> Status)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe (Maybe StatusId))
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"in_reply_to_user_id" Parser (Maybe (Maybe StatusId))
-> Maybe StatusId -> Parser (Maybe StatusId)
forall a. Parser (Maybe a) -> a -> Parser a
.!= Maybe StatusId
forall a. Maybe a
Nothing
            Parser
  (Maybe String
   -> Maybe Place
   -> Maybe Bool
   -> Maybe Object
   -> Maybe StatusId
   -> Maybe Status
   -> StatusId
   -> Maybe Bool
   -> Maybe Status
   -> Text
   -> Text
   -> Bool
   -> User
   -> Maybe Bool
   -> Maybe [Text]
   -> Maybe Text
   -> Maybe DisplayTextRange
   -> Status)
-> Parser (Maybe String)
-> Parser
     (Maybe Place
      -> Maybe Bool
      -> Maybe Object
      -> Maybe StatusId
      -> Maybe Status
      -> StatusId
      -> Maybe Bool
      -> Maybe Status
      -> Text
      -> Text
      -> Bool
      -> User
      -> Maybe Bool
      -> Maybe [Text]
      -> Maybe Text
      -> Maybe DisplayTextRange
      -> Status)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe String)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"lang"
            Parser
  (Maybe Place
   -> Maybe Bool
   -> Maybe Object
   -> Maybe StatusId
   -> Maybe Status
   -> StatusId
   -> Maybe Bool
   -> Maybe Status
   -> Text
   -> Text
   -> Bool
   -> User
   -> Maybe Bool
   -> Maybe [Text]
   -> Maybe Text
   -> Maybe DisplayTextRange
   -> Status)
-> Parser (Maybe Place)
-> Parser
     (Maybe Bool
      -> Maybe Object
      -> Maybe StatusId
      -> Maybe Status
      -> StatusId
      -> Maybe Bool
      -> Maybe Status
      -> Text
      -> Text
      -> Bool
      -> User
      -> Maybe Bool
      -> Maybe [Text]
      -> Maybe Text
      -> Maybe DisplayTextRange
      -> Status)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe (Maybe Place))
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"place" Parser (Maybe (Maybe Place)) -> Maybe Place -> Parser (Maybe Place)
forall a. Parser (Maybe a) -> a -> Parser a
.!= Maybe Place
forall a. Maybe a
Nothing
            Parser
  (Maybe Bool
   -> Maybe Object
   -> Maybe StatusId
   -> Maybe Status
   -> StatusId
   -> Maybe Bool
   -> Maybe Status
   -> Text
   -> Text
   -> Bool
   -> User
   -> Maybe Bool
   -> Maybe [Text]
   -> Maybe Text
   -> Maybe DisplayTextRange
   -> Status)
-> Parser (Maybe Bool)
-> Parser
     (Maybe Object
      -> Maybe StatusId
      -> Maybe Status
      -> StatusId
      -> Maybe Bool
      -> Maybe Status
      -> Text
      -> Text
      -> Bool
      -> User
      -> Maybe Bool
      -> Maybe [Text]
      -> Maybe Text
      -> Maybe DisplayTextRange
      -> Status)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Bool)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"possibly_sensitive"
            Parser
  (Maybe Object
   -> Maybe StatusId
   -> Maybe Status
   -> StatusId
   -> Maybe Bool
   -> Maybe Status
   -> Text
   -> Text
   -> Bool
   -> User
   -> Maybe Bool
   -> Maybe [Text]
   -> Maybe Text
   -> Maybe DisplayTextRange
   -> Status)
-> Parser (Maybe Object)
-> Parser
     (Maybe StatusId
      -> Maybe Status
      -> StatusId
      -> Maybe Bool
      -> Maybe Status
      -> Text
      -> Text
      -> Bool
      -> User
      -> Maybe Bool
      -> Maybe [Text]
      -> Maybe Text
      -> Maybe DisplayTextRange
      -> Status)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Object)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"scopes"
            Parser
  (Maybe StatusId
   -> Maybe Status
   -> StatusId
   -> Maybe Bool
   -> Maybe Status
   -> Text
   -> Text
   -> Bool
   -> User
   -> Maybe Bool
   -> Maybe [Text]
   -> Maybe Text
   -> Maybe DisplayTextRange
   -> Status)
-> Parser (Maybe StatusId)
-> Parser
     (Maybe Status
      -> StatusId
      -> Maybe Bool
      -> Maybe Status
      -> Text
      -> Text
      -> Bool
      -> User
      -> Maybe Bool
      -> Maybe [Text]
      -> Maybe Text
      -> Maybe DisplayTextRange
      -> Status)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe StatusId)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"quoted_status_id"
            Parser
  (Maybe Status
   -> StatusId
   -> Maybe Bool
   -> Maybe Status
   -> Text
   -> Text
   -> Bool
   -> User
   -> Maybe Bool
   -> Maybe [Text]
   -> Maybe Text
   -> Maybe DisplayTextRange
   -> Status)
-> Parser (Maybe Status)
-> Parser
     (StatusId
      -> Maybe Bool
      -> Maybe Status
      -> Text
      -> Text
      -> Bool
      -> User
      -> Maybe Bool
      -> Maybe [Text]
      -> Maybe Text
      -> Maybe DisplayTextRange
      -> Status)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Status)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"quoted_status"
            Parser
  (StatusId
   -> Maybe Bool
   -> Maybe Status
   -> Text
   -> Text
   -> Bool
   -> User
   -> Maybe Bool
   -> Maybe [Text]
   -> Maybe Text
   -> Maybe DisplayTextRange
   -> Status)
-> Parser StatusId
-> Parser
     (Maybe Bool
      -> Maybe Status
      -> Text
      -> Text
      -> Bool
      -> User
      -> Maybe Bool
      -> Maybe [Text]
      -> Maybe Text
      -> Maybe DisplayTextRange
      -> Status)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe StatusId)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"retweet_count" Parser (Maybe StatusId) -> StatusId -> Parser StatusId
forall a. Parser (Maybe a) -> a -> Parser a
.!= StatusId
0
            Parser
  (Maybe Bool
   -> Maybe Status
   -> Text
   -> Text
   -> Bool
   -> User
   -> Maybe Bool
   -> Maybe [Text]
   -> Maybe Text
   -> Maybe DisplayTextRange
   -> Status)
-> Parser (Maybe Bool)
-> Parser
     (Maybe Status
      -> Text
      -> Text
      -> Bool
      -> User
      -> Maybe Bool
      -> Maybe [Text]
      -> Maybe Text
      -> Maybe DisplayTextRange
      -> Status)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Bool)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"retweeted"
            Parser
  (Maybe Status
   -> Text
   -> Text
   -> Bool
   -> User
   -> Maybe Bool
   -> Maybe [Text]
   -> Maybe Text
   -> Maybe DisplayTextRange
   -> Status)
-> Parser (Maybe Status)
-> Parser
     (Text
      -> Text
      -> Bool
      -> User
      -> Maybe Bool
      -> Maybe [Text]
      -> Maybe Text
      -> Maybe DisplayTextRange
      -> Status)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Status)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"retweeted_status"
            Parser
  (Text
   -> Text
   -> Bool
   -> User
   -> Maybe Bool
   -> Maybe [Text]
   -> Maybe Text
   -> Maybe DisplayTextRange
   -> Status)
-> Parser Text
-> Parser
     (Text
      -> Bool
      -> User
      -> Maybe Bool
      -> Maybe [Text]
      -> Maybe Text
      -> Maybe DisplayTextRange
      -> Status)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"source"
            Parser
  (Text
   -> Bool
   -> User
   -> Maybe Bool
   -> Maybe [Text]
   -> Maybe Text
   -> Maybe DisplayTextRange
   -> Status)
-> Parser Text
-> Parser
     (Bool
      -> User
      -> Maybe Bool
      -> Maybe [Text]
      -> Maybe Text
      -> Maybe DisplayTextRange
      -> Status)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Object
o Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"full_text" Parser Text -> Parser Text -> Parser Text
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Object
o Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"text")
            Parser
  (Bool
   -> User
   -> Maybe Bool
   -> Maybe [Text]
   -> Maybe Text
   -> Maybe DisplayTextRange
   -> Status)
-> Parser Bool
-> Parser
     (User
      -> Maybe Bool
      -> Maybe [Text]
      -> Maybe Text
      -> Maybe DisplayTextRange
      -> Status)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Bool
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"truncated"
            Parser
  (User
   -> Maybe Bool
   -> Maybe [Text]
   -> Maybe Text
   -> Maybe DisplayTextRange
   -> Status)
-> Parser User
-> Parser
     (Maybe Bool
      -> Maybe [Text] -> Maybe Text -> Maybe DisplayTextRange -> Status)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser User
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"user"
            Parser
  (Maybe Bool
   -> Maybe [Text] -> Maybe Text -> Maybe DisplayTextRange -> Status)
-> Parser (Maybe Bool)
-> Parser
     (Maybe [Text] -> Maybe Text -> Maybe DisplayTextRange -> Status)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Bool)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"withheld_copyright"
            Parser
  (Maybe [Text] -> Maybe Text -> Maybe DisplayTextRange -> Status)
-> Parser (Maybe [Text])
-> Parser (Maybe Text -> Maybe DisplayTextRange -> Status)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe [Text])
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"withheld_in_countries"
            Parser (Maybe Text -> Maybe DisplayTextRange -> Status)
-> Parser (Maybe Text) -> Parser (Maybe DisplayTextRange -> Status)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"withheld_scope"
            Parser (Maybe DisplayTextRange -> Status)
-> Parser (Maybe DisplayTextRange) -> Parser Status
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe DisplayTextRange)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"display_text_range"
    parseJSON Value
v = String -> Parser Status
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> Parser Status) -> String -> Parser Status
forall a b. (a -> b) -> a -> b
$ String
"couldn't parse status from: " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Value -> String
forall a. Show a => a -> String
show Value
v

instance ToJSON Status where
    toJSON :: Status -> Value
toJSON Status {Bool
StatusId
Maybe Bool
Maybe StatusId
Maybe String
Maybe [Text]
Maybe [Contributor]
Maybe Text
Maybe Object
Maybe DisplayTextRange
Maybe ExtendedEntities
Maybe Entities
Maybe Place
Maybe Coordinates
Maybe Status
UTCTime
Text
User
statusDisplayTextRange :: Maybe DisplayTextRange
statusWithheldScope :: Maybe Text
statusWithheldInCountries :: Maybe [Text]
statusWithheldCopyright :: Maybe Bool
statusUser :: User
statusTruncated :: Bool
statusText :: Text
statusSource :: Text
statusRetweetedStatus :: Maybe Status
statusRetweeted :: Maybe Bool
statusRetweetCount :: StatusId
statusQuotedStatus :: Maybe Status
statusQuotedStatusId :: Maybe StatusId
statusScopes :: Maybe Object
statusPossiblySensitive :: Maybe Bool
statusPlace :: Maybe Place
statusLang :: Maybe String
statusInReplyToUserId :: Maybe StatusId
statusInReplyToStatusId :: Maybe StatusId
statusInReplyToScreenName :: Maybe Text
statusId :: StatusId
statusFilterLevel :: Maybe Text
statusFavorited :: Maybe Bool
statusFavoriteCount :: StatusId
statusExtendedEntities :: Maybe ExtendedEntities
statusEntities :: Maybe Entities
statusCurrentUserRetweet :: Maybe StatusId
statusCreatedAt :: UTCTime
statusCoordinates :: Maybe Coordinates
statusContributors :: Maybe [Contributor]
statusDisplayTextRange :: Status -> Maybe DisplayTextRange
statusWithheldScope :: Status -> Maybe Text
statusWithheldInCountries :: Status -> Maybe [Text]
statusWithheldCopyright :: Status -> Maybe Bool
statusUser :: Status -> User
statusTruncated :: Status -> Bool
statusText :: Status -> Text
statusSource :: Status -> Text
statusRetweetedStatus :: Status -> Maybe Status
statusRetweeted :: Status -> Maybe Bool
statusRetweetCount :: Status -> StatusId
statusQuotedStatus :: Status -> Maybe Status
statusQuotedStatusId :: Status -> Maybe StatusId
statusScopes :: Status -> Maybe Object
statusPossiblySensitive :: Status -> Maybe Bool
statusPlace :: Status -> Maybe Place
statusLang :: Status -> Maybe String
statusInReplyToUserId :: Status -> Maybe StatusId
statusInReplyToStatusId :: Status -> Maybe StatusId
statusInReplyToScreenName :: Status -> Maybe Text
statusId :: Status -> StatusId
statusFilterLevel :: Status -> Maybe Text
statusFavorited :: Status -> Maybe Bool
statusFavoriteCount :: Status -> StatusId
statusExtendedEntities :: Status -> Maybe ExtendedEntities
statusEntities :: Status -> Maybe Entities
statusCurrentUserRetweet :: Status -> Maybe StatusId
statusCreatedAt :: Status -> UTCTime
statusCoordinates :: Status -> Maybe Coordinates
statusContributors :: Status -> Maybe [Contributor]
..} =
        [Pair] -> Value
object
            [ Key
"contributors" Key -> Maybe [Contributor] -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe [Contributor]
statusContributors
            , Key
"coordinates" Key -> Maybe Coordinates -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe Coordinates
statusCoordinates
            , Key
"created_at" Key -> TwitterTime -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= UTCTime -> TwitterTime
TwitterTime UTCTime
statusCreatedAt
            , Key
"current_user_retweet"
                Key -> Value -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= [Pair] -> Value
object
                    [ Key
"id" Key -> Maybe StatusId -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe StatusId
statusCurrentUserRetweet
                    , Key
"id_str" Key -> String -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe StatusId -> String
forall a. Show a => a -> String
show Maybe StatusId
statusCurrentUserRetweet
                    ]
            , Key
"entities" Key -> Maybe Entities -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe Entities
statusEntities
            , Key
"extended_entities" Key -> Maybe ExtendedEntities -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe ExtendedEntities
statusExtendedEntities
            , Key
"favorite_count" Key -> StatusId -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= StatusId
statusFavoriteCount
            , Key
"favorited" Key -> Maybe Bool -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe Bool
statusFavorited
            , Key
"filter_level" Key -> Maybe Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe Text
statusFilterLevel
            , Key
"id" Key -> StatusId -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= StatusId
statusId
            , Key
"in_reply_to_screen_name" Key -> Maybe Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe Text
statusInReplyToScreenName
            , Key
"in_reply_to_status_id" Key -> Maybe StatusId -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe StatusId
statusInReplyToStatusId
            , Key
"in_reply_to_user_id" Key -> Maybe StatusId -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe StatusId
statusInReplyToUserId
            , Key
"lang" Key -> Maybe String -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe String
statusLang
            , Key
"place" Key -> Maybe Place -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe Place
statusPlace
            , Key
"possibly_sensitive" Key -> Maybe Bool -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe Bool
statusPossiblySensitive
            , Key
"scopes" Key -> Maybe Object -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe Object
statusScopes
            , Key
"quoted_status_id" Key -> Maybe StatusId -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe StatusId
statusQuotedStatusId
            , Key
"quoted_status" Key -> Maybe Status -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe Status
statusQuotedStatus
            , Key
"retweet_count" Key -> StatusId -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= StatusId
statusRetweetCount
            , Key
"retweeted" Key -> Maybe Bool -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe Bool
statusRetweeted
            , Key
"retweeted_status" Key -> Maybe Status -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe Status
statusRetweetedStatus
            , Key
"source" Key -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Text
statusSource
            , Key
"text" Key -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Text
statusText
            , Key
"truncated" Key -> Bool -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Bool
statusTruncated
            , Key
"user" Key -> User -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= User
statusUser
            , Key
"withheld_copyright" Key -> Maybe Bool -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe Bool
statusWithheldCopyright
            , Key
"withheld_in_countries" Key -> Maybe [Text] -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe [Text]
statusWithheldInCountries
            , Key
"withheld_scope" Key -> Maybe Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe Text
statusWithheldScope
            , Key
"display_text_range" Key -> Maybe DisplayTextRange -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe DisplayTextRange
statusDisplayTextRange
            ]

data SearchResult body = SearchResult
    { SearchResult body -> body
searchResultStatuses :: body
    , SearchResult body -> SearchMetadata
searchResultSearchMetadata :: SearchMetadata
    }
    deriving (Int -> SearchResult body -> ShowS
[SearchResult body] -> ShowS
SearchResult body -> String
(Int -> SearchResult body -> ShowS)
-> (SearchResult body -> String)
-> ([SearchResult body] -> ShowS)
-> Show (SearchResult body)
forall body. Show body => Int -> SearchResult body -> ShowS
forall body. Show body => [SearchResult body] -> ShowS
forall body. Show body => SearchResult body -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [SearchResult body] -> ShowS
$cshowList :: forall body. Show body => [SearchResult body] -> ShowS
show :: SearchResult body -> String
$cshow :: forall body. Show body => SearchResult body -> String
showsPrec :: Int -> SearchResult body -> ShowS
$cshowsPrec :: forall body. Show body => Int -> SearchResult body -> ShowS
Show, SearchResult body -> SearchResult body -> Bool
(SearchResult body -> SearchResult body -> Bool)
-> (SearchResult body -> SearchResult body -> Bool)
-> Eq (SearchResult body)
forall body.
Eq body =>
SearchResult body -> SearchResult body -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: SearchResult body -> SearchResult body -> Bool
$c/= :: forall body.
Eq body =>
SearchResult body -> SearchResult body -> Bool
== :: SearchResult body -> SearchResult body -> Bool
$c== :: forall body.
Eq body =>
SearchResult body -> SearchResult body -> Bool
Eq, Typeable (SearchResult body)
DataType
Constr
Typeable (SearchResult body)
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g)
    -> SearchResult body
    -> c (SearchResult body))
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c (SearchResult body))
-> (SearchResult body -> Constr)
-> (SearchResult body -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c (SearchResult body)))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e))
    -> Maybe (c (SearchResult body)))
-> ((forall b. Data b => b -> b)
    -> SearchResult body -> SearchResult body)
-> (forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> SearchResult body -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> SearchResult body -> r)
-> (forall u.
    (forall d. Data d => d -> u) -> SearchResult body -> [u])
-> (forall u.
    Int -> (forall d. Data d => d -> u) -> SearchResult body -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d)
    -> SearchResult body -> m (SearchResult body))
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> SearchResult body -> m (SearchResult body))
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> SearchResult body -> m (SearchResult body))
-> Data (SearchResult body)
SearchResult body -> DataType
SearchResult body -> Constr
(forall d. Data d => c (t d)) -> Maybe (c (SearchResult body))
(forall b. Data b => b -> b)
-> SearchResult body -> SearchResult body
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g)
-> SearchResult body
-> c (SearchResult body)
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (SearchResult body)
forall body. Data body => Typeable (SearchResult body)
forall body. Data body => SearchResult body -> DataType
forall body. Data body => SearchResult body -> Constr
forall body.
Data body =>
(forall b. Data b => b -> b)
-> SearchResult body -> SearchResult body
forall body u.
Data body =>
Int -> (forall d. Data d => d -> u) -> SearchResult body -> u
forall body u.
Data body =>
(forall d. Data d => d -> u) -> SearchResult body -> [u]
forall body r r'.
Data body =>
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> SearchResult body -> r
forall body r r'.
Data body =>
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> SearchResult body -> r
forall body (m :: * -> *).
(Data body, Monad m) =>
(forall d. Data d => d -> m d)
-> SearchResult body -> m (SearchResult body)
forall body (m :: * -> *).
(Data body, MonadPlus m) =>
(forall d. Data d => d -> m d)
-> SearchResult body -> m (SearchResult body)
forall body (c :: * -> *).
Data body =>
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (SearchResult body)
forall body (c :: * -> *).
Data body =>
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g)
-> SearchResult body
-> c (SearchResult body)
forall body (t :: * -> *) (c :: * -> *).
(Data body, Typeable t) =>
(forall d. Data d => c (t d)) -> Maybe (c (SearchResult body))
forall body (t :: * -> * -> *) (c :: * -> *).
(Data body, Typeable t) =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c (SearchResult body))
forall a.
Typeable a
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u.
Int -> (forall d. Data d => d -> u) -> SearchResult body -> u
forall u. (forall d. Data d => d -> u) -> SearchResult body -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> SearchResult body -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> SearchResult body -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> SearchResult body -> m (SearchResult body)
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> SearchResult body -> m (SearchResult body)
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (SearchResult body)
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g)
-> SearchResult body
-> c (SearchResult body)
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c (SearchResult body))
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c (SearchResult body))
$cSearchResult :: Constr
$tSearchResult :: DataType
gmapMo :: (forall d. Data d => d -> m d)
-> SearchResult body -> m (SearchResult body)
$cgmapMo :: forall body (m :: * -> *).
(Data body, MonadPlus m) =>
(forall d. Data d => d -> m d)
-> SearchResult body -> m (SearchResult body)
gmapMp :: (forall d. Data d => d -> m d)
-> SearchResult body -> m (SearchResult body)
$cgmapMp :: forall body (m :: * -> *).
(Data body, MonadPlus m) =>
(forall d. Data d => d -> m d)
-> SearchResult body -> m (SearchResult body)
gmapM :: (forall d. Data d => d -> m d)
-> SearchResult body -> m (SearchResult body)
$cgmapM :: forall body (m :: * -> *).
(Data body, Monad m) =>
(forall d. Data d => d -> m d)
-> SearchResult body -> m (SearchResult body)
gmapQi :: Int -> (forall d. Data d => d -> u) -> SearchResult body -> u
$cgmapQi :: forall body u.
Data body =>
Int -> (forall d. Data d => d -> u) -> SearchResult body -> u
gmapQ :: (forall d. Data d => d -> u) -> SearchResult body -> [u]
$cgmapQ :: forall body u.
Data body =>
(forall d. Data d => d -> u) -> SearchResult body -> [u]
gmapQr :: (r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> SearchResult body -> r
$cgmapQr :: forall body r r'.
Data body =>
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> SearchResult body -> r
gmapQl :: (r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> SearchResult body -> r
$cgmapQl :: forall body r r'.
Data body =>
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> SearchResult body -> r
gmapT :: (forall b. Data b => b -> b)
-> SearchResult body -> SearchResult body
$cgmapT :: forall body.
Data body =>
(forall b. Data b => b -> b)
-> SearchResult body -> SearchResult body
dataCast2 :: (forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c (SearchResult body))
$cdataCast2 :: forall body (t :: * -> * -> *) (c :: * -> *).
(Data body, Typeable t) =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c (SearchResult body))
dataCast1 :: (forall d. Data d => c (t d)) -> Maybe (c (SearchResult body))
$cdataCast1 :: forall body (t :: * -> *) (c :: * -> *).
(Data body, Typeable t) =>
(forall d. Data d => c (t d)) -> Maybe (c (SearchResult body))
dataTypeOf :: SearchResult body -> DataType
$cdataTypeOf :: forall body. Data body => SearchResult body -> DataType
toConstr :: SearchResult body -> Constr
$ctoConstr :: forall body. Data body => SearchResult body -> Constr
gunfold :: (forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (SearchResult body)
$cgunfold :: forall body (c :: * -> *).
Data body =>
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (SearchResult body)
gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g)
-> SearchResult body
-> c (SearchResult body)
$cgfoldl :: forall body (c :: * -> *).
Data body =>
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g)
-> SearchResult body
-> c (SearchResult body)
$cp1Data :: forall body. Data body => Typeable (SearchResult body)
Data, Typeable, (forall x. SearchResult body -> Rep (SearchResult body) x)
-> (forall x. Rep (SearchResult body) x -> SearchResult body)
-> Generic (SearchResult body)
forall x. Rep (SearchResult body) x -> SearchResult body
forall x. SearchResult body -> Rep (SearchResult body) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall body x. Rep (SearchResult body) x -> SearchResult body
forall body x. SearchResult body -> Rep (SearchResult body) x
$cto :: forall body x. Rep (SearchResult body) x -> SearchResult body
$cfrom :: forall body x. SearchResult body -> Rep (SearchResult body) x
Generic)

instance
    FromJSON body =>
    FromJSON (SearchResult body)
    where
    parseJSON :: Value -> Parser (SearchResult body)
parseJSON (Object Object
o) =
        Object -> Parser ()
checkError Object
o
            Parser ()
-> Parser (SearchResult body) -> Parser (SearchResult body)
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> body -> SearchMetadata -> SearchResult body
forall body. body -> SearchMetadata -> SearchResult body
SearchResult (body -> SearchMetadata -> SearchResult body)
-> Parser body -> Parser (SearchMetadata -> SearchResult body)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser body
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"statuses"
            Parser (SearchMetadata -> SearchResult body)
-> Parser SearchMetadata -> Parser (SearchResult body)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser SearchMetadata
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"search_metadata"
    parseJSON Value
v = String -> Parser (SearchResult body)
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> Parser (SearchResult body))
-> String -> Parser (SearchResult body)
forall a b. (a -> b) -> a -> b
$ String
"couldn't parse search result from: " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Value -> String
forall a. Show a => a -> String
show Value
v

instance
    ToJSON body =>
    ToJSON (SearchResult body)
    where
    toJSON :: SearchResult body -> Value
toJSON SearchResult {body
SearchMetadata
searchResultSearchMetadata :: SearchMetadata
searchResultStatuses :: body
searchResultSearchMetadata :: forall body. SearchResult body -> SearchMetadata
searchResultStatuses :: forall body. SearchResult body -> body
..} =
        [Pair] -> Value
object
            [ Key
"statuses" Key -> body -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= body
searchResultStatuses
            , Key
"search_metadata" Key -> SearchMetadata -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= SearchMetadata
searchResultSearchMetadata
            ]

data SearchStatus = SearchStatus
    { SearchStatus -> UTCTime
searchStatusCreatedAt :: UTCTime
    , SearchStatus -> StatusId
searchStatusId :: StatusId
    , SearchStatus -> Text
searchStatusText :: Text
    , SearchStatus -> Text
searchStatusSource :: Text
    , SearchStatus -> User
searchStatusUser :: User
    , SearchStatus -> Maybe Coordinates
searchStatusCoordinates :: Maybe Coordinates
    }
    deriving (Int -> SearchStatus -> ShowS
[SearchStatus] -> ShowS
SearchStatus -> String
(Int -> SearchStatus -> ShowS)
-> (SearchStatus -> String)
-> ([SearchStatus] -> ShowS)
-> Show SearchStatus
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [SearchStatus] -> ShowS
$cshowList :: [SearchStatus] -> ShowS
show :: SearchStatus -> String
$cshow :: SearchStatus -> String
showsPrec :: Int -> SearchStatus -> ShowS
$cshowsPrec :: Int -> SearchStatus -> ShowS
Show, SearchStatus -> SearchStatus -> Bool
(SearchStatus -> SearchStatus -> Bool)
-> (SearchStatus -> SearchStatus -> Bool) -> Eq SearchStatus
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: SearchStatus -> SearchStatus -> Bool
$c/= :: SearchStatus -> SearchStatus -> Bool
== :: SearchStatus -> SearchStatus -> Bool
$c== :: SearchStatus -> SearchStatus -> Bool
Eq, Typeable SearchStatus
DataType
Constr
Typeable SearchStatus
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> SearchStatus -> c SearchStatus)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c SearchStatus)
-> (SearchStatus -> Constr)
-> (SearchStatus -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c SearchStatus))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e))
    -> Maybe (c SearchStatus))
-> ((forall b. Data b => b -> b) -> SearchStatus -> SearchStatus)
-> (forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> SearchStatus -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> SearchStatus -> r)
-> (forall u. (forall d. Data d => d -> u) -> SearchStatus -> [u])
-> (forall u.
    Int -> (forall d. Data d => d -> u) -> SearchStatus -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> SearchStatus -> m SearchStatus)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> SearchStatus -> m SearchStatus)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> SearchStatus -> m SearchStatus)
-> Data SearchStatus
SearchStatus -> DataType
SearchStatus -> Constr
(forall b. Data b => b -> b) -> SearchStatus -> SearchStatus
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> SearchStatus -> c SearchStatus
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c SearchStatus
forall a.
Typeable a
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> SearchStatus -> u
forall u. (forall d. Data d => d -> u) -> SearchStatus -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> SearchStatus -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> SearchStatus -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> SearchStatus -> m SearchStatus
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> SearchStatus -> m SearchStatus
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c SearchStatus
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> SearchStatus -> c SearchStatus
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c SearchStatus)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c SearchStatus)
$cSearchStatus :: Constr
$tSearchStatus :: DataType
gmapMo :: (forall d. Data d => d -> m d) -> SearchStatus -> m SearchStatus
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> SearchStatus -> m SearchStatus
gmapMp :: (forall d. Data d => d -> m d) -> SearchStatus -> m SearchStatus
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> SearchStatus -> m SearchStatus
gmapM :: (forall d. Data d => d -> m d) -> SearchStatus -> m SearchStatus
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> SearchStatus -> m SearchStatus
gmapQi :: Int -> (forall d. Data d => d -> u) -> SearchStatus -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> SearchStatus -> u
gmapQ :: (forall d. Data d => d -> u) -> SearchStatus -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> SearchStatus -> [u]
gmapQr :: (r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> SearchStatus -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> SearchStatus -> r
gmapQl :: (r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> SearchStatus -> r
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> SearchStatus -> r
gmapT :: (forall b. Data b => b -> b) -> SearchStatus -> SearchStatus
$cgmapT :: (forall b. Data b => b -> b) -> SearchStatus -> SearchStatus
dataCast2 :: (forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c SearchStatus)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c SearchStatus)
dataCast1 :: (forall d. Data d => c (t d)) -> Maybe (c SearchStatus)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c SearchStatus)
dataTypeOf :: SearchStatus -> DataType
$cdataTypeOf :: SearchStatus -> DataType
toConstr :: SearchStatus -> Constr
$ctoConstr :: SearchStatus -> Constr
gunfold :: (forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c SearchStatus
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c SearchStatus
gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> SearchStatus -> c SearchStatus
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> SearchStatus -> c SearchStatus
$cp1Data :: Typeable SearchStatus
Data, Typeable, (forall x. SearchStatus -> Rep SearchStatus x)
-> (forall x. Rep SearchStatus x -> SearchStatus)
-> Generic SearchStatus
forall x. Rep SearchStatus x -> SearchStatus
forall x. SearchStatus -> Rep SearchStatus x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep SearchStatus x -> SearchStatus
$cfrom :: forall x. SearchStatus -> Rep SearchStatus x
Generic)

instance FromJSON SearchStatus where
    parseJSON :: Value -> Parser SearchStatus
parseJSON (Object Object
o) =
        Object -> Parser ()
checkError Object
o
            Parser () -> Parser SearchStatus -> Parser SearchStatus
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> UTCTime
-> StatusId
-> Text
-> Text
-> User
-> Maybe Coordinates
-> SearchStatus
SearchStatus (UTCTime
 -> StatusId
 -> Text
 -> Text
 -> User
 -> Maybe Coordinates
 -> SearchStatus)
-> Parser UTCTime
-> Parser
     (StatusId
      -> Text -> Text -> User -> Maybe Coordinates -> SearchStatus)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Object
o Object -> Key -> Parser TwitterTime
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"created_at" Parser TwitterTime
-> (TwitterTime -> Parser UTCTime) -> Parser UTCTime
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= UTCTime -> Parser UTCTime
forall (m :: * -> *) a. Monad m => a -> m a
return (UTCTime -> Parser UTCTime)
-> (TwitterTime -> UTCTime) -> TwitterTime -> Parser UTCTime
forall b c a. (b -> c) -> (a -> b) -> a -> c
. TwitterTime -> UTCTime
fromTwitterTime)
            Parser
  (StatusId
   -> Text -> Text -> User -> Maybe Coordinates -> SearchStatus)
-> Parser StatusId
-> Parser
     (Text -> Text -> User -> Maybe Coordinates -> SearchStatus)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser StatusId
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"id"
            Parser (Text -> Text -> User -> Maybe Coordinates -> SearchStatus)
-> Parser Text
-> Parser (Text -> User -> Maybe Coordinates -> SearchStatus)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"text"
            Parser (Text -> User -> Maybe Coordinates -> SearchStatus)
-> Parser Text
-> Parser (User -> Maybe Coordinates -> SearchStatus)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"source"
            Parser (User -> Maybe Coordinates -> SearchStatus)
-> Parser User -> Parser (Maybe Coordinates -> SearchStatus)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser User
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"user"
            Parser (Maybe Coordinates -> SearchStatus)
-> Parser (Maybe Coordinates) -> Parser SearchStatus
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Coordinates)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"coordinates"
    parseJSON Value
v = String -> Parser SearchStatus
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> Parser SearchStatus) -> String -> Parser SearchStatus
forall a b. (a -> b) -> a -> b
$ String
"couldn't parse status search result from: " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Value -> String
forall a. Show a => a -> String
show Value
v

instance ToJSON SearchStatus where
    toJSON :: SearchStatus -> Value
toJSON SearchStatus {StatusId
Maybe Coordinates
UTCTime
Text
User
searchStatusCoordinates :: Maybe Coordinates
searchStatusUser :: User
searchStatusSource :: Text
searchStatusText :: Text
searchStatusId :: StatusId
searchStatusCreatedAt :: UTCTime
searchStatusCoordinates :: SearchStatus -> Maybe Coordinates
searchStatusUser :: SearchStatus -> User
searchStatusSource :: SearchStatus -> Text
searchStatusText :: SearchStatus -> Text
searchStatusId :: SearchStatus -> StatusId
searchStatusCreatedAt :: SearchStatus -> UTCTime
..} =
        [Pair] -> Value
object
            [ Key
"created_at" Key -> TwitterTime -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= UTCTime -> TwitterTime
TwitterTime UTCTime
searchStatusCreatedAt
            , Key
"id" Key -> StatusId -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= StatusId
searchStatusId
            , Key
"text" Key -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Text
searchStatusText
            , Key
"source" Key -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Text
searchStatusSource
            , Key
"user" Key -> User -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= User
searchStatusUser
            , Key
"coordinates" Key -> Maybe Coordinates -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe Coordinates
searchStatusCoordinates
            ]

data SearchMetadata = SearchMetadata
    { SearchMetadata -> StatusId
searchMetadataMaxId :: StatusId
    , SearchMetadata -> StatusId
searchMetadataSinceId :: StatusId
    , SearchMetadata -> Text
searchMetadataRefreshURL :: URIString
    , SearchMetadata -> Maybe Text
searchMetadataNextResults :: Maybe URIString
    , SearchMetadata -> Int
searchMetadataCount :: Int
    , SearchMetadata -> Maybe Float
searchMetadataCompletedIn :: Maybe Float
    , SearchMetadata -> String
searchMetadataSinceIdStr :: String
    , SearchMetadata -> String
searchMetadataQuery :: String
    , SearchMetadata -> String
searchMetadataMaxIdStr :: String
    }
    deriving (Int -> SearchMetadata -> ShowS
[SearchMetadata] -> ShowS
SearchMetadata -> String
(Int -> SearchMetadata -> ShowS)
-> (SearchMetadata -> String)
-> ([SearchMetadata] -> ShowS)
-> Show SearchMetadata
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [SearchMetadata] -> ShowS
$cshowList :: [SearchMetadata] -> ShowS
show :: SearchMetadata -> String
$cshow :: SearchMetadata -> String
showsPrec :: Int -> SearchMetadata -> ShowS
$cshowsPrec :: Int -> SearchMetadata -> ShowS
Show, SearchMetadata -> SearchMetadata -> Bool
(SearchMetadata -> SearchMetadata -> Bool)
-> (SearchMetadata -> SearchMetadata -> Bool) -> Eq SearchMetadata
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: SearchMetadata -> SearchMetadata -> Bool
$c/= :: SearchMetadata -> SearchMetadata -> Bool
== :: SearchMetadata -> SearchMetadata -> Bool
$c== :: SearchMetadata -> SearchMetadata -> Bool
Eq, Typeable SearchMetadata
DataType
Constr
Typeable SearchMetadata
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> SearchMetadata -> c SearchMetadata)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c SearchMetadata)
-> (SearchMetadata -> Constr)
-> (SearchMetadata -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c SearchMetadata))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e))
    -> Maybe (c SearchMetadata))
-> ((forall b. Data b => b -> b)
    -> SearchMetadata -> SearchMetadata)
-> (forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> SearchMetadata -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> SearchMetadata -> r)
-> (forall u.
    (forall d. Data d => d -> u) -> SearchMetadata -> [u])
-> (forall u.
    Int -> (forall d. Data d => d -> u) -> SearchMetadata -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d)
    -> SearchMetadata -> m SearchMetadata)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> SearchMetadata -> m SearchMetadata)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> SearchMetadata -> m SearchMetadata)
-> Data SearchMetadata
SearchMetadata -> DataType
SearchMetadata -> Constr
(forall b. Data b => b -> b) -> SearchMetadata -> SearchMetadata
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> SearchMetadata -> c SearchMetadata
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c SearchMetadata
forall a.
Typeable a
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u.
Int -> (forall d. Data d => d -> u) -> SearchMetadata -> u
forall u. (forall d. Data d => d -> u) -> SearchMetadata -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> SearchMetadata -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> SearchMetadata -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> SearchMetadata -> m SearchMetadata
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> SearchMetadata -> m SearchMetadata
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c SearchMetadata
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> SearchMetadata -> c SearchMetadata
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c SearchMetadata)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c SearchMetadata)
$cSearchMetadata :: Constr
$tSearchMetadata :: DataType
gmapMo :: (forall d. Data d => d -> m d)
-> SearchMetadata -> m SearchMetadata
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> SearchMetadata -> m SearchMetadata
gmapMp :: (forall d. Data d => d -> m d)
-> SearchMetadata -> m SearchMetadata
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> SearchMetadata -> m SearchMetadata
gmapM :: (forall d. Data d => d -> m d)
-> SearchMetadata -> m SearchMetadata
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> SearchMetadata -> m SearchMetadata
gmapQi :: Int -> (forall d. Data d => d -> u) -> SearchMetadata -> u
$cgmapQi :: forall u.
Int -> (forall d. Data d => d -> u) -> SearchMetadata -> u
gmapQ :: (forall d. Data d => d -> u) -> SearchMetadata -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> SearchMetadata -> [u]
gmapQr :: (r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> SearchMetadata -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> SearchMetadata -> r
gmapQl :: (r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> SearchMetadata -> r
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> SearchMetadata -> r
gmapT :: (forall b. Data b => b -> b) -> SearchMetadata -> SearchMetadata
$cgmapT :: (forall b. Data b => b -> b) -> SearchMetadata -> SearchMetadata
dataCast2 :: (forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c SearchMetadata)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c SearchMetadata)
dataCast1 :: (forall d. Data d => c (t d)) -> Maybe (c SearchMetadata)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c SearchMetadata)
dataTypeOf :: SearchMetadata -> DataType
$cdataTypeOf :: SearchMetadata -> DataType
toConstr :: SearchMetadata -> Constr
$ctoConstr :: SearchMetadata -> Constr
gunfold :: (forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c SearchMetadata
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c SearchMetadata
gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> SearchMetadata -> c SearchMetadata
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> SearchMetadata -> c SearchMetadata
$cp1Data :: Typeable SearchMetadata
Data, Typeable, (forall x. SearchMetadata -> Rep SearchMetadata x)
-> (forall x. Rep SearchMetadata x -> SearchMetadata)
-> Generic SearchMetadata
forall x. Rep SearchMetadata x -> SearchMetadata
forall x. SearchMetadata -> Rep SearchMetadata x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep SearchMetadata x -> SearchMetadata
$cfrom :: forall x. SearchMetadata -> Rep SearchMetadata x
Generic)

instance FromJSON SearchMetadata where
    parseJSON :: Value -> Parser SearchMetadata
parseJSON (Object Object
o) =
        Object -> Parser ()
checkError Object
o
            Parser () -> Parser SearchMetadata -> Parser SearchMetadata
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> StatusId
-> StatusId
-> Text
-> Maybe Text
-> Int
-> Maybe Float
-> String
-> String
-> String
-> SearchMetadata
SearchMetadata (StatusId
 -> StatusId
 -> Text
 -> Maybe Text
 -> Int
 -> Maybe Float
 -> String
 -> String
 -> String
 -> SearchMetadata)
-> Parser StatusId
-> Parser
     (StatusId
      -> Text
      -> Maybe Text
      -> Int
      -> Maybe Float
      -> String
      -> String
      -> String
      -> SearchMetadata)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser StatusId
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"max_id"
            Parser
  (StatusId
   -> Text
   -> Maybe Text
   -> Int
   -> Maybe Float
   -> String
   -> String
   -> String
   -> SearchMetadata)
-> Parser StatusId
-> Parser
     (Text
      -> Maybe Text
      -> Int
      -> Maybe Float
      -> String
      -> String
      -> String
      -> SearchMetadata)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser StatusId
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"since_id"
            Parser
  (Text
   -> Maybe Text
   -> Int
   -> Maybe Float
   -> String
   -> String
   -> String
   -> SearchMetadata)
-> Parser Text
-> Parser
     (Maybe Text
      -> Int
      -> Maybe Float
      -> String
      -> String
      -> String
      -> SearchMetadata)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"refresh_url"
            Parser
  (Maybe Text
   -> Int
   -> Maybe Float
   -> String
   -> String
   -> String
   -> SearchMetadata)
-> Parser (Maybe Text)
-> Parser
     (Int
      -> Maybe Float -> String -> String -> String -> SearchMetadata)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"next_results"
            Parser
  (Int
   -> Maybe Float -> String -> String -> String -> SearchMetadata)
-> Parser Int
-> Parser
     (Maybe Float -> String -> String -> String -> SearchMetadata)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Int
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"count"
            Parser
  (Maybe Float -> String -> String -> String -> SearchMetadata)
-> Parser (Maybe Float)
-> Parser (String -> String -> String -> SearchMetadata)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Float)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"completed_in"
            Parser (String -> String -> String -> SearchMetadata)
-> Parser String -> Parser (String -> String -> SearchMetadata)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser String
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"since_id_str"
            Parser (String -> String -> SearchMetadata)
-> Parser String -> Parser (String -> SearchMetadata)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser String
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"query"
            Parser (String -> SearchMetadata)
-> Parser String -> Parser SearchMetadata
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser String
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"max_id_str"
    parseJSON Value
v = String -> Parser SearchMetadata
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> Parser SearchMetadata)
-> String -> Parser SearchMetadata
forall a b. (a -> b) -> a -> b
$ String
"couldn't parse search metadata from: " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Value -> String
forall a. Show a => a -> String
show Value
v

instance ToJSON SearchMetadata where
    toJSON :: SearchMetadata -> Value
toJSON SearchMetadata {Int
StatusId
String
Maybe Float
Maybe Text
Text
searchMetadataMaxIdStr :: String
searchMetadataQuery :: String
searchMetadataSinceIdStr :: String
searchMetadataCompletedIn :: Maybe Float
searchMetadataCount :: Int
searchMetadataNextResults :: Maybe Text
searchMetadataRefreshURL :: Text
searchMetadataSinceId :: StatusId
searchMetadataMaxId :: StatusId
searchMetadataMaxIdStr :: SearchMetadata -> String
searchMetadataQuery :: SearchMetadata -> String
searchMetadataSinceIdStr :: SearchMetadata -> String
searchMetadataCompletedIn :: SearchMetadata -> Maybe Float
searchMetadataCount :: SearchMetadata -> Int
searchMetadataNextResults :: SearchMetadata -> Maybe Text
searchMetadataRefreshURL :: SearchMetadata -> Text
searchMetadataSinceId :: SearchMetadata -> StatusId
searchMetadataMaxId :: SearchMetadata -> StatusId
..} =
        [Pair] -> Value
object
            [ Key
"max_id" Key -> StatusId -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= StatusId
searchMetadataMaxId
            , Key
"since_id" Key -> StatusId -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= StatusId
searchMetadataSinceId
            , Key
"refresh_url" Key -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Text
searchMetadataRefreshURL
            , Key
"next_results" Key -> Maybe Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe Text
searchMetadataNextResults
            , Key
"count" Key -> Int -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Int
searchMetadataCount
            , Key
"completed_in" Key -> Maybe Float -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe Float
searchMetadataCompletedIn
            , Key
"since_id_str" Key -> String -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= String
searchMetadataSinceIdStr
            , Key
"query" Key -> String -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= String
searchMetadataQuery
            , Key
"max_id_str" Key -> String -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= String
searchMetadataMaxIdStr
            ]

data RetweetedStatus = RetweetedStatus
    { RetweetedStatus -> UTCTime
rsCreatedAt :: UTCTime
    , RetweetedStatus -> StatusId
rsId :: StatusId
    , RetweetedStatus -> Text
rsText :: Text
    , RetweetedStatus -> Text
rsSource :: Text
    , RetweetedStatus -> Bool
rsTruncated :: Bool
    , RetweetedStatus -> Maybe Entities
rsEntities :: Maybe Entities
    , RetweetedStatus -> User
rsUser :: User
    , RetweetedStatus -> Status
rsRetweetedStatus :: Status
    , RetweetedStatus -> Maybe Coordinates
rsCoordinates :: Maybe Coordinates
    }
    deriving (Int -> RetweetedStatus -> ShowS
[RetweetedStatus] -> ShowS
RetweetedStatus -> String
(Int -> RetweetedStatus -> ShowS)
-> (RetweetedStatus -> String)
-> ([RetweetedStatus] -> ShowS)
-> Show RetweetedStatus
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [RetweetedStatus] -> ShowS
$cshowList :: [RetweetedStatus] -> ShowS
show :: RetweetedStatus -> String
$cshow :: RetweetedStatus -> String
showsPrec :: Int -> RetweetedStatus -> ShowS
$cshowsPrec :: Int -> RetweetedStatus -> ShowS
Show, RetweetedStatus -> RetweetedStatus -> Bool
(RetweetedStatus -> RetweetedStatus -> Bool)
-> (RetweetedStatus -> RetweetedStatus -> Bool)
-> Eq RetweetedStatus
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: RetweetedStatus -> RetweetedStatus -> Bool
$c/= :: RetweetedStatus -> RetweetedStatus -> Bool
== :: RetweetedStatus -> RetweetedStatus -> Bool
$c== :: RetweetedStatus -> RetweetedStatus -> Bool
Eq, Typeable RetweetedStatus
DataType
Constr
Typeable RetweetedStatus
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> RetweetedStatus -> c RetweetedStatus)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c RetweetedStatus)
-> (RetweetedStatus -> Constr)
-> (RetweetedStatus -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c RetweetedStatus))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e))
    -> Maybe (c RetweetedStatus))
-> ((forall b. Data b => b -> b)
    -> RetweetedStatus -> RetweetedStatus)
-> (forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> RetweetedStatus -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> RetweetedStatus -> r)
-> (forall u.
    (forall d. Data d => d -> u) -> RetweetedStatus -> [u])
-> (forall u.
    Int -> (forall d. Data d => d -> u) -> RetweetedStatus -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d)
    -> RetweetedStatus -> m RetweetedStatus)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> RetweetedStatus -> m RetweetedStatus)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> RetweetedStatus -> m RetweetedStatus)
-> Data RetweetedStatus
RetweetedStatus -> DataType
RetweetedStatus -> Constr
(forall b. Data b => b -> b) -> RetweetedStatus -> RetweetedStatus
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> RetweetedStatus -> c RetweetedStatus
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c RetweetedStatus
forall a.
Typeable a
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u.
Int -> (forall d. Data d => d -> u) -> RetweetedStatus -> u
forall u. (forall d. Data d => d -> u) -> RetweetedStatus -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> RetweetedStatus -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> RetweetedStatus -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> RetweetedStatus -> m RetweetedStatus
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> RetweetedStatus -> m RetweetedStatus
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c RetweetedStatus
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> RetweetedStatus -> c RetweetedStatus
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c RetweetedStatus)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c RetweetedStatus)
$cRetweetedStatus :: Constr
$tRetweetedStatus :: DataType
gmapMo :: (forall d. Data d => d -> m d)
-> RetweetedStatus -> m RetweetedStatus
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> RetweetedStatus -> m RetweetedStatus
gmapMp :: (forall d. Data d => d -> m d)
-> RetweetedStatus -> m RetweetedStatus
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> RetweetedStatus -> m RetweetedStatus
gmapM :: (forall d. Data d => d -> m d)
-> RetweetedStatus -> m RetweetedStatus
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> RetweetedStatus -> m RetweetedStatus
gmapQi :: Int -> (forall d. Data d => d -> u) -> RetweetedStatus -> u
$cgmapQi :: forall u.
Int -> (forall d. Data d => d -> u) -> RetweetedStatus -> u
gmapQ :: (forall d. Data d => d -> u) -> RetweetedStatus -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> RetweetedStatus -> [u]
gmapQr :: (r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> RetweetedStatus -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> RetweetedStatus -> r
gmapQl :: (r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> RetweetedStatus -> r
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> RetweetedStatus -> r
gmapT :: (forall b. Data b => b -> b) -> RetweetedStatus -> RetweetedStatus
$cgmapT :: (forall b. Data b => b -> b) -> RetweetedStatus -> RetweetedStatus
dataCast2 :: (forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c RetweetedStatus)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c RetweetedStatus)
dataCast1 :: (forall d. Data d => c (t d)) -> Maybe (c RetweetedStatus)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c RetweetedStatus)
dataTypeOf :: RetweetedStatus -> DataType
$cdataTypeOf :: RetweetedStatus -> DataType
toConstr :: RetweetedStatus -> Constr
$ctoConstr :: RetweetedStatus -> Constr
gunfold :: (forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c RetweetedStatus
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c RetweetedStatus
gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> RetweetedStatus -> c RetweetedStatus
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> RetweetedStatus -> c RetweetedStatus
$cp1Data :: Typeable RetweetedStatus
Data, Typeable, (forall x. RetweetedStatus -> Rep RetweetedStatus x)
-> (forall x. Rep RetweetedStatus x -> RetweetedStatus)
-> Generic RetweetedStatus
forall x. Rep RetweetedStatus x -> RetweetedStatus
forall x. RetweetedStatus -> Rep RetweetedStatus x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep RetweetedStatus x -> RetweetedStatus
$cfrom :: forall x. RetweetedStatus -> Rep RetweetedStatus x
Generic)

instance FromJSON RetweetedStatus where
    parseJSON :: Value -> Parser RetweetedStatus
parseJSON (Object Object
o) =
        Object -> Parser ()
checkError Object
o
            Parser () -> Parser RetweetedStatus -> Parser RetweetedStatus
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> UTCTime
-> StatusId
-> Text
-> Text
-> Bool
-> Maybe Entities
-> User
-> Status
-> Maybe Coordinates
-> RetweetedStatus
RetweetedStatus (UTCTime
 -> StatusId
 -> Text
 -> Text
 -> Bool
 -> Maybe Entities
 -> User
 -> Status
 -> Maybe Coordinates
 -> RetweetedStatus)
-> Parser UTCTime
-> Parser
     (StatusId
      -> Text
      -> Text
      -> Bool
      -> Maybe Entities
      -> User
      -> Status
      -> Maybe Coordinates
      -> RetweetedStatus)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Object
o Object -> Key -> Parser TwitterTime
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"created_at" Parser TwitterTime
-> (TwitterTime -> Parser UTCTime) -> Parser UTCTime
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= UTCTime -> Parser UTCTime
forall (m :: * -> *) a. Monad m => a -> m a
return (UTCTime -> Parser UTCTime)
-> (TwitterTime -> UTCTime) -> TwitterTime -> Parser UTCTime
forall b c a. (b -> c) -> (a -> b) -> a -> c
. TwitterTime -> UTCTime
fromTwitterTime)
            Parser
  (StatusId
   -> Text
   -> Text
   -> Bool
   -> Maybe Entities
   -> User
   -> Status
   -> Maybe Coordinates
   -> RetweetedStatus)
-> Parser StatusId
-> Parser
     (Text
      -> Text
      -> Bool
      -> Maybe Entities
      -> User
      -> Status
      -> Maybe Coordinates
      -> RetweetedStatus)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser StatusId
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"id"
            Parser
  (Text
   -> Text
   -> Bool
   -> Maybe Entities
   -> User
   -> Status
   -> Maybe Coordinates
   -> RetweetedStatus)
-> Parser Text
-> Parser
     (Text
      -> Bool
      -> Maybe Entities
      -> User
      -> Status
      -> Maybe Coordinates
      -> RetweetedStatus)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"text"
            Parser
  (Text
   -> Bool
   -> Maybe Entities
   -> User
   -> Status
   -> Maybe Coordinates
   -> RetweetedStatus)
-> Parser Text
-> Parser
     (Bool
      -> Maybe Entities
      -> User
      -> Status
      -> Maybe Coordinates
      -> RetweetedStatus)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"source"
            Parser
  (Bool
   -> Maybe Entities
   -> User
   -> Status
   -> Maybe Coordinates
   -> RetweetedStatus)
-> Parser Bool
-> Parser
     (Maybe Entities
      -> User -> Status -> Maybe Coordinates -> RetweetedStatus)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Bool
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"truncated"
            Parser
  (Maybe Entities
   -> User -> Status -> Maybe Coordinates -> RetweetedStatus)
-> Parser (Maybe Entities)
-> Parser (User -> Status -> Maybe Coordinates -> RetweetedStatus)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Entities)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"entities"
            Parser (User -> Status -> Maybe Coordinates -> RetweetedStatus)
-> Parser User
-> Parser (Status -> Maybe Coordinates -> RetweetedStatus)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser User
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"user"
            Parser (Status -> Maybe Coordinates -> RetweetedStatus)
-> Parser Status -> Parser (Maybe Coordinates -> RetweetedStatus)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Status
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"retweeted_status"
            Parser (Maybe Coordinates -> RetweetedStatus)
-> Parser (Maybe Coordinates) -> Parser RetweetedStatus
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Coordinates)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"coordinates"
    parseJSON Value
v = String -> Parser RetweetedStatus
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> Parser RetweetedStatus)
-> String -> Parser RetweetedStatus
forall a b. (a -> b) -> a -> b
$ String
"couldn't parse retweeted status from: " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Value -> String
forall a. Show a => a -> String
show Value
v

instance ToJSON RetweetedStatus where
    toJSON :: RetweetedStatus -> Value
toJSON RetweetedStatus {Bool
StatusId
Maybe Entities
Maybe Coordinates
UTCTime
Text
User
Status
rsCoordinates :: Maybe Coordinates
rsRetweetedStatus :: Status
rsUser :: User
rsEntities :: Maybe Entities
rsTruncated :: Bool
rsSource :: Text
rsText :: Text
rsId :: StatusId
rsCreatedAt :: UTCTime
rsCoordinates :: RetweetedStatus -> Maybe Coordinates
rsRetweetedStatus :: RetweetedStatus -> Status
rsUser :: RetweetedStatus -> User
rsEntities :: RetweetedStatus -> Maybe Entities
rsTruncated :: RetweetedStatus -> Bool
rsSource :: RetweetedStatus -> Text
rsText :: RetweetedStatus -> Text
rsId :: RetweetedStatus -> StatusId
rsCreatedAt :: RetweetedStatus -> UTCTime
..} =
        [Pair] -> Value
object
            [ Key
"created_at" Key -> TwitterTime -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= UTCTime -> TwitterTime
TwitterTime UTCTime
rsCreatedAt
            , Key
"id" Key -> StatusId -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= StatusId
rsId
            , Key
"text" Key -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Text
rsText
            , Key
"source" Key -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Text
rsSource
            , Key
"truncated" Key -> Bool -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Bool
rsTruncated
            , Key
"entities" Key -> Maybe Entities -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe Entities
rsEntities
            , Key
"user" Key -> User -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= User
rsUser
            , Key
"retweeted_status" Key -> Status -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Status
rsRetweetedStatus
            , Key
"coordinates" Key -> Maybe Coordinates -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe Coordinates
rsCoordinates
            ]

type EventId = Integer

data DirectMessage = DirectMessage
    { DirectMessage -> StatusId
dmId :: EventId
    , DirectMessage -> UTCTime
dmCreatedTimestamp :: UTCTime
    , DirectMessage -> StatusId
dmTargetRecipientId :: UserId
    , DirectMessage -> StatusId
dmSenderId :: UserId
    , DirectMessage -> Text
dmText :: Text
    , DirectMessage -> Entities
dmEntities :: Entities
    }
    deriving (Int -> DirectMessage -> ShowS
[DirectMessage] -> ShowS
DirectMessage -> String
(Int -> DirectMessage -> ShowS)
-> (DirectMessage -> String)
-> ([DirectMessage] -> ShowS)
-> Show DirectMessage
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DirectMessage] -> ShowS
$cshowList :: [DirectMessage] -> ShowS
show :: DirectMessage -> String
$cshow :: DirectMessage -> String
showsPrec :: Int -> DirectMessage -> ShowS
$cshowsPrec :: Int -> DirectMessage -> ShowS
Show, DirectMessage -> DirectMessage -> Bool
(DirectMessage -> DirectMessage -> Bool)
-> (DirectMessage -> DirectMessage -> Bool) -> Eq DirectMessage
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DirectMessage -> DirectMessage -> Bool
$c/= :: DirectMessage -> DirectMessage -> Bool
== :: DirectMessage -> DirectMessage -> Bool
$c== :: DirectMessage -> DirectMessage -> Bool
Eq, Typeable DirectMessage
DataType
Constr
Typeable DirectMessage
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> DirectMessage -> c DirectMessage)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c DirectMessage)
-> (DirectMessage -> Constr)
-> (DirectMessage -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c DirectMessage))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e))
    -> Maybe (c DirectMessage))
-> ((forall b. Data b => b -> b) -> DirectMessage -> DirectMessage)
-> (forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> DirectMessage -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> DirectMessage -> r)
-> (forall u. (forall d. Data d => d -> u) -> DirectMessage -> [u])
-> (forall u.
    Int -> (forall d. Data d => d -> u) -> DirectMessage -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> DirectMessage -> m DirectMessage)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> DirectMessage -> m DirectMessage)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> DirectMessage -> m DirectMessage)
-> Data DirectMessage
DirectMessage -> DataType
DirectMessage -> Constr
(forall b. Data b => b -> b) -> DirectMessage -> DirectMessage
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> DirectMessage -> c DirectMessage
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c DirectMessage
forall a.
Typeable a
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> DirectMessage -> u
forall u. (forall d. Data d => d -> u) -> DirectMessage -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> DirectMessage -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> DirectMessage -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> DirectMessage -> m DirectMessage
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> DirectMessage -> m DirectMessage
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c DirectMessage
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> DirectMessage -> c DirectMessage
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c DirectMessage)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c DirectMessage)
$cDirectMessage :: Constr
$tDirectMessage :: DataType
gmapMo :: (forall d. Data d => d -> m d) -> DirectMessage -> m DirectMessage
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> DirectMessage -> m DirectMessage
gmapMp :: (forall d. Data d => d -> m d) -> DirectMessage -> m DirectMessage
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> DirectMessage -> m DirectMessage
gmapM :: (forall d. Data d => d -> m d) -> DirectMessage -> m DirectMessage
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> DirectMessage -> m DirectMessage
gmapQi :: Int -> (forall d. Data d => d -> u) -> DirectMessage -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> DirectMessage -> u
gmapQ :: (forall d. Data d => d -> u) -> DirectMessage -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> DirectMessage -> [u]
gmapQr :: (r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> DirectMessage -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> DirectMessage -> r
gmapQl :: (r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> DirectMessage -> r
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> DirectMessage -> r
gmapT :: (forall b. Data b => b -> b) -> DirectMessage -> DirectMessage
$cgmapT :: (forall b. Data b => b -> b) -> DirectMessage -> DirectMessage
dataCast2 :: (forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c DirectMessage)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c DirectMessage)
dataCast1 :: (forall d. Data d => c (t d)) -> Maybe (c DirectMessage)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c DirectMessage)
dataTypeOf :: DirectMessage -> DataType
$cdataTypeOf :: DirectMessage -> DataType
toConstr :: DirectMessage -> Constr
$ctoConstr :: DirectMessage -> Constr
gunfold :: (forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c DirectMessage
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c DirectMessage
gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> DirectMessage -> c DirectMessage
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> DirectMessage -> c DirectMessage
$cp1Data :: Typeable DirectMessage
Data, Typeable, (forall x. DirectMessage -> Rep DirectMessage x)
-> (forall x. Rep DirectMessage x -> DirectMessage)
-> Generic DirectMessage
forall x. Rep DirectMessage x -> DirectMessage
forall x. DirectMessage -> Rep DirectMessage x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep DirectMessage x -> DirectMessage
$cfrom :: forall x. DirectMessage -> Rep DirectMessage x
Generic)

parseIntegral :: Integral a => Text -> Parser a
parseIntegral :: Text -> Parser a
parseIntegral Text
v = (String -> Parser a)
-> ((a, Text) -> Parser a) -> Either String (a, Text) -> Parser a
forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
either (\String
_ -> String -> Parser a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> Parser a) -> String -> Parser a
forall a b. (a -> b) -> a -> b
$ String
"couldn't parse stringized int: " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Text -> String
forall a. Show a => a -> String
show Text
v) (a -> Parser a
forall (m :: * -> *) a. Monad m => a -> m a
return (a -> Parser a) -> ((a, Text) -> a) -> (a, Text) -> Parser a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (a, Text) -> a
forall a b. (a, b) -> a
fst) (Either String (a, Text) -> Parser a)
-> Either String (a, Text) -> Parser a
forall a b. (a -> b) -> a -> b
$ Reader a
forall a. Integral a => Reader a
decimal Text
v

epochMsToUTCTime :: Int64 -> UTCTime
epochMsToUTCTime :: Int64 -> UTCTime
epochMsToUTCTime = POSIXTime -> UTCTime
posixSecondsToUTCTime (POSIXTime -> UTCTime) -> (Int64 -> POSIXTime) -> Int64 -> UTCTime
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Rational -> POSIXTime
forall a. Fractional a => Rational -> a
fromRational (Rational -> POSIXTime)
-> (Int64 -> Rational) -> Int64 -> POSIXTime
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (StatusId -> StatusId -> Rational
forall a. Integral a => a -> a -> Ratio a
% StatusId
1000) (StatusId -> Rational) -> (Int64 -> StatusId) -> Int64 -> Rational
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int64 -> StatusId
forall a b. (Integral a, Num b) => a -> b
fromIntegral

parseUnixTimeString :: Text -> Parser UTCTime
parseUnixTimeString :: Text -> Parser UTCTime
parseUnixTimeString = (Int64 -> UTCTime) -> Parser Int64 -> Parser UTCTime
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Int64 -> UTCTime
epochMsToUTCTime (Parser Int64 -> Parser UTCTime)
-> (Text -> Parser Int64) -> Text -> Parser UTCTime
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Text -> Parser Int64
forall a. Integral a => Text -> Parser a
parseIntegral

unixTimeToEpochInt :: UTCTime -> Int
unixTimeToEpochInt :: UTCTime -> Int
unixTimeToEpochInt = POSIXTime -> Int
forall a b. (RealFrac a, Integral b) => a -> b
floor (POSIXTime -> Int) -> (UTCTime -> POSIXTime) -> UTCTime -> Int
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (POSIXTime -> POSIXTime -> POSIXTime
forall a. Num a => a -> a -> a
* POSIXTime
1000) (POSIXTime -> POSIXTime)
-> (UTCTime -> POSIXTime) -> UTCTime -> POSIXTime
forall b c a. (b -> c) -> (a -> b) -> a -> c
. UTCTime -> POSIXTime
utcTimeToPOSIXSeconds

instance FromJSON DirectMessage where
    parseJSON :: Value -> Parser DirectMessage
parseJSON (Object Object
o) = do
        ()
_ <- Object -> Parser ()
checkError Object
o
        Object
messageCreate <- Object
o Object -> Key -> Parser Object
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"message_create"
        Object
messageData <- Object
messageCreate Object -> Key -> Parser Object
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"message_data"

        StatusId
-> UTCTime
-> StatusId
-> StatusId
-> Text
-> Entities
-> DirectMessage
DirectMessage
            (StatusId
 -> UTCTime
 -> StatusId
 -> StatusId
 -> Text
 -> Entities
 -> DirectMessage)
-> Parser StatusId
-> Parser
     (UTCTime
      -> StatusId -> StatusId -> Text -> Entities -> DirectMessage)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Object
o Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"id" Parser Text -> (Text -> Parser StatusId) -> Parser StatusId
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Text -> Parser StatusId
forall a. Integral a => Text -> Parser a
parseIntegral)
            Parser
  (UTCTime
   -> StatusId -> StatusId -> Text -> Entities -> DirectMessage)
-> Parser UTCTime
-> Parser
     (StatusId -> StatusId -> Text -> Entities -> DirectMessage)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Object
o Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"created_timestamp" Parser Text -> (Text -> Parser UTCTime) -> Parser UTCTime
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Text -> Parser UTCTime
parseUnixTimeString)
            Parser (StatusId -> StatusId -> Text -> Entities -> DirectMessage)
-> Parser StatusId
-> Parser (StatusId -> Text -> Entities -> DirectMessage)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Object
messageCreate Object -> Key -> Parser Object
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"target" Parser Object -> (Object -> Parser Text) -> Parser Text
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"recipient_id") Parser Text -> (Text -> Parser StatusId) -> Parser StatusId
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Text -> Parser StatusId
forall a. Integral a => Text -> Parser a
parseIntegral)
            Parser (StatusId -> Text -> Entities -> DirectMessage)
-> Parser StatusId -> Parser (Text -> Entities -> DirectMessage)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Object
messageCreate Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"sender_id" Parser Text -> (Text -> Parser StatusId) -> Parser StatusId
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Text -> Parser StatusId
forall a. Integral a => Text -> Parser a
parseIntegral)
            Parser (Text -> Entities -> DirectMessage)
-> Parser Text -> Parser (Entities -> DirectMessage)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
messageData Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"text"
            Parser (Entities -> DirectMessage)
-> Parser Entities -> Parser DirectMessage
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
messageData Object -> Key -> Parser Entities
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"entities"
    parseJSON Value
v = String -> Parser DirectMessage
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> Parser DirectMessage) -> String -> Parser DirectMessage
forall a b. (a -> b) -> a -> b
$ String
"couldn't parse direct message create event from: " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Value -> String
forall a. Show a => a -> String
show Value
v

instance ToJSON DirectMessage where
    toJSON :: DirectMessage -> Value
toJSON DirectMessage {StatusId
UTCTime
Text
Entities
dmEntities :: Entities
dmText :: Text
dmSenderId :: StatusId
dmTargetRecipientId :: StatusId
dmCreatedTimestamp :: UTCTime
dmId :: StatusId
dmEntities :: DirectMessage -> Entities
dmText :: DirectMessage -> Text
dmSenderId :: DirectMessage -> StatusId
dmTargetRecipientId :: DirectMessage -> StatusId
dmCreatedTimestamp :: DirectMessage -> UTCTime
dmId :: DirectMessage -> StatusId
..} =
        [Pair] -> Value
object
            [ Key
"id" Key -> String -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= StatusId -> String
forall a. Show a => a -> String
show StatusId
dmId
            , Key
"created_timestamp" Key -> String -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Int -> String
forall a. Show a => a -> String
show (UTCTime -> Int
unixTimeToEpochInt UTCTime
dmCreatedTimestamp)
            , Key
"message_create"
                Key -> Value -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= [Pair] -> Value
object
                    [ Key
"message_data" Key -> Value -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= [Pair] -> Value
object [Key
"text" Key -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Text
dmText, Key
"entities" Key -> Entities -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Entities
dmEntities]
                    , Key
"target" Key -> Value -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= [Pair] -> Value
object [Key
"recipient_id" Key -> String -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= StatusId -> String
forall a. Show a => a -> String
show StatusId
dmTargetRecipientId]
                    , Key
"sender_id" Key -> String -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= StatusId -> String
forall a. Show a => a -> String
show StatusId
dmSenderId
                    ]
            ]

data EventType
    = Favorite
    | Unfavorite
    | ListCreated
    | ListUpdated
    | ListMemberAdded
    | UserUpdate
    | Block
    | Unblock
    | Follow
    deriving (Int -> EventType -> ShowS
[EventType] -> ShowS
EventType -> String
(Int -> EventType -> ShowS)
-> (EventType -> String)
-> ([EventType] -> ShowS)
-> Show EventType
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [EventType] -> ShowS
$cshowList :: [EventType] -> ShowS
show :: EventType -> String
$cshow :: EventType -> String
showsPrec :: Int -> EventType -> ShowS
$cshowsPrec :: Int -> EventType -> ShowS
Show, EventType -> EventType -> Bool
(EventType -> EventType -> Bool)
-> (EventType -> EventType -> Bool) -> Eq EventType
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: EventType -> EventType -> Bool
$c/= :: EventType -> EventType -> Bool
== :: EventType -> EventType -> Bool
$c== :: EventType -> EventType -> Bool
Eq, Typeable EventType
DataType
Constr
Typeable EventType
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> EventType -> c EventType)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c EventType)
-> (EventType -> Constr)
-> (EventType -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c EventType))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c EventType))
-> ((forall b. Data b => b -> b) -> EventType -> EventType)
-> (forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> EventType -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> EventType -> r)
-> (forall u. (forall d. Data d => d -> u) -> EventType -> [u])
-> (forall u.
    Int -> (forall d. Data d => d -> u) -> EventType -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> EventType -> m EventType)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> EventType -> m EventType)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> EventType -> m EventType)
-> Data EventType
EventType -> DataType
EventType -> Constr
(forall b. Data b => b -> b) -> EventType -> EventType
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> EventType -> c EventType
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c EventType
forall a.
Typeable a
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> EventType -> u
forall u. (forall d. Data d => d -> u) -> EventType -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> EventType -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> EventType -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> EventType -> m EventType
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> EventType -> m EventType
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c EventType
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> EventType -> c EventType
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c EventType)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c EventType)
$cFollow :: Constr
$cUnblock :: Constr
$cBlock :: Constr
$cUserUpdate :: Constr
$cListMemberAdded :: Constr
$cListUpdated :: Constr
$cListCreated :: Constr
$cUnfavorite :: Constr
$cFavorite :: Constr
$tEventType :: DataType
gmapMo :: (forall d. Data d => d -> m d) -> EventType -> m EventType
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> EventType -> m EventType
gmapMp :: (forall d. Data d => d -> m d) -> EventType -> m EventType
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> EventType -> m EventType
gmapM :: (forall d. Data d => d -> m d) -> EventType -> m EventType
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> EventType -> m EventType
gmapQi :: Int -> (forall d. Data d => d -> u) -> EventType -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> EventType -> u
gmapQ :: (forall d. Data d => d -> u) -> EventType -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> EventType -> [u]
gmapQr :: (r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> EventType -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> EventType -> r
gmapQl :: (r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> EventType -> r
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> EventType -> r
gmapT :: (forall b. Data b => b -> b) -> EventType -> EventType
$cgmapT :: (forall b. Data b => b -> b) -> EventType -> EventType
dataCast2 :: (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c EventType)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c EventType)
dataCast1 :: (forall d. Data d => c (t d)) -> Maybe (c EventType)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c EventType)
dataTypeOf :: EventType -> DataType
$cdataTypeOf :: EventType -> DataType
toConstr :: EventType -> Constr
$ctoConstr :: EventType -> Constr
gunfold :: (forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c EventType
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c EventType
gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> EventType -> c EventType
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> EventType -> c EventType
$cp1Data :: Typeable EventType
Data, Typeable, (forall x. EventType -> Rep EventType x)
-> (forall x. Rep EventType x -> EventType) -> Generic EventType
forall x. Rep EventType x -> EventType
forall x. EventType -> Rep EventType x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep EventType x -> EventType
$cfrom :: forall x. EventType -> Rep EventType x
Generic)

data EventTarget = ETUser User | ETStatus Status | ETList List | ETUnknown Value
    deriving (Int -> EventTarget -> ShowS
[EventTarget] -> ShowS
EventTarget -> String
(Int -> EventTarget -> ShowS)
-> (EventTarget -> String)
-> ([EventTarget] -> ShowS)
-> Show EventTarget
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [EventTarget] -> ShowS
$cshowList :: [EventTarget] -> ShowS
show :: EventTarget -> String
$cshow :: EventTarget -> String
showsPrec :: Int -> EventTarget -> ShowS
$cshowsPrec :: Int -> EventTarget -> ShowS
Show, EventTarget -> EventTarget -> Bool
(EventTarget -> EventTarget -> Bool)
-> (EventTarget -> EventTarget -> Bool) -> Eq EventTarget
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: EventTarget -> EventTarget -> Bool
$c/= :: EventTarget -> EventTarget -> Bool
== :: EventTarget -> EventTarget -> Bool
$c== :: EventTarget -> EventTarget -> Bool
Eq, Typeable EventTarget
DataType
Constr
Typeable EventTarget
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> EventTarget -> c EventTarget)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c EventTarget)
-> (EventTarget -> Constr)
-> (EventTarget -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c EventTarget))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e))
    -> Maybe (c EventTarget))
-> ((forall b. Data b => b -> b) -> EventTarget -> EventTarget)
-> (forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> EventTarget -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> EventTarget -> r)
-> (forall u. (forall d. Data d => d -> u) -> EventTarget -> [u])
-> (forall u.
    Int -> (forall d. Data d => d -> u) -> EventTarget -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> EventTarget -> m EventTarget)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> EventTarget -> m EventTarget)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> EventTarget -> m EventTarget)
-> Data EventTarget
EventTarget -> DataType
EventTarget -> Constr
(forall b. Data b => b -> b) -> EventTarget -> EventTarget
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> EventTarget -> c EventTarget
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c EventTarget
forall a.
Typeable a
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> EventTarget -> u
forall u. (forall d. Data d => d -> u) -> EventTarget -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> EventTarget -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> EventTarget -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> EventTarget -> m EventTarget
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> EventTarget -> m EventTarget
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c EventTarget
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> EventTarget -> c EventTarget
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c EventTarget)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c EventTarget)
$cETUnknown :: Constr
$cETList :: Constr
$cETStatus :: Constr
$cETUser :: Constr
$tEventTarget :: DataType
gmapMo :: (forall d. Data d => d -> m d) -> EventTarget -> m EventTarget
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> EventTarget -> m EventTarget
gmapMp :: (forall d. Data d => d -> m d) -> EventTarget -> m EventTarget
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> EventTarget -> m EventTarget
gmapM :: (forall d. Data d => d -> m d) -> EventTarget -> m EventTarget
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> EventTarget -> m EventTarget
gmapQi :: Int -> (forall d. Data d => d -> u) -> EventTarget -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> EventTarget -> u
gmapQ :: (forall d. Data d => d -> u) -> EventTarget -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> EventTarget -> [u]
gmapQr :: (r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> EventTarget -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> EventTarget -> r
gmapQl :: (r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> EventTarget -> r
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> EventTarget -> r
gmapT :: (forall b. Data b => b -> b) -> EventTarget -> EventTarget
$cgmapT :: (forall b. Data b => b -> b) -> EventTarget -> EventTarget
dataCast2 :: (forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c EventTarget)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c EventTarget)
dataCast1 :: (forall d. Data d => c (t d)) -> Maybe (c EventTarget)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c EventTarget)
dataTypeOf :: EventTarget -> DataType
$cdataTypeOf :: EventTarget -> DataType
toConstr :: EventTarget -> Constr
$ctoConstr :: EventTarget -> Constr
gunfold :: (forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c EventTarget
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c EventTarget
gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> EventTarget -> c EventTarget
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> EventTarget -> c EventTarget
$cp1Data :: Typeable EventTarget
Data, Typeable, (forall x. EventTarget -> Rep EventTarget x)
-> (forall x. Rep EventTarget x -> EventTarget)
-> Generic EventTarget
forall x. Rep EventTarget x -> EventTarget
forall x. EventTarget -> Rep EventTarget x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep EventTarget x -> EventTarget
$cfrom :: forall x. EventTarget -> Rep EventTarget x
Generic)

instance FromJSON EventTarget where
    parseJSON :: Value -> Parser EventTarget
parseJSON v :: Value
v@(Object Object
o) =
        Object -> Parser ()
checkError Object
o
            Parser () -> Parser EventTarget -> Parser EventTarget
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> User -> EventTarget
ETUser (User -> EventTarget) -> Parser User -> Parser EventTarget
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Value -> Parser User
forall a. FromJSON a => Value -> Parser a
parseJSON Value
v
            Parser EventTarget -> Parser EventTarget -> Parser EventTarget
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Status -> EventTarget
ETStatus (Status -> EventTarget) -> Parser Status -> Parser EventTarget
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Value -> Parser Status
forall a. FromJSON a => Value -> Parser a
parseJSON Value
v
            Parser EventTarget -> Parser EventTarget -> Parser EventTarget
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> List -> EventTarget
ETList (List -> EventTarget) -> Parser List -> Parser EventTarget
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Value -> Parser List
forall a. FromJSON a => Value -> Parser a
parseJSON Value
v
            Parser EventTarget -> Parser EventTarget -> Parser EventTarget
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> EventTarget -> Parser EventTarget
forall (m :: * -> *) a. Monad m => a -> m a
return (Value -> EventTarget
ETUnknown Value
v)
    parseJSON Value
v = String -> Parser EventTarget
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> Parser EventTarget) -> String -> Parser EventTarget
forall a b. (a -> b) -> a -> b
$ String
"couldn't parse event target from: " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Value -> String
forall a. Show a => a -> String
show Value
v

instance ToJSON EventTarget where
    toJSON :: EventTarget -> Value
toJSON (ETUser User
u) = User -> Value
forall a. ToJSON a => a -> Value
toJSON User
u
    toJSON (ETStatus Status
s) = Status -> Value
forall a. ToJSON a => a -> Value
toJSON Status
s
    toJSON (ETList List
l) = List -> Value
forall a. ToJSON a => a -> Value
toJSON List
l
    toJSON (ETUnknown Value
v) = Value
v

data Event = Event
    { Event -> UTCTime
evCreatedAt :: UTCTime
    , Event -> Maybe EventTarget
evTargetObject :: Maybe EventTarget
    , Event -> Text
evEvent :: Text
    , Event -> EventTarget
evTarget :: EventTarget
    , Event -> EventTarget
evSource :: EventTarget
    }
    deriving (Int -> Event -> ShowS
[Event] -> ShowS
Event -> String
(Int -> Event -> ShowS)
-> (Event -> String) -> ([Event] -> ShowS) -> Show Event
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Event] -> ShowS
$cshowList :: [Event] -> ShowS
show :: Event -> String
$cshow :: Event -> String
showsPrec :: Int -> Event -> ShowS
$cshowsPrec :: Int -> Event -> ShowS
Show, Event -> Event -> Bool
(Event -> Event -> Bool) -> (Event -> Event -> Bool) -> Eq Event
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Event -> Event -> Bool
$c/= :: Event -> Event -> Bool
== :: Event -> Event -> Bool
$c== :: Event -> Event -> Bool
Eq, Typeable Event
DataType
Constr
Typeable Event
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> Event -> c Event)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c Event)
-> (Event -> Constr)
-> (Event -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c Event))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Event))
-> ((forall b. Data b => b -> b) -> Event -> Event)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Event -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Event -> r)
-> (forall u. (forall d. Data d => d -> u) -> Event -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> Event -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> Event -> m Event)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> Event -> m Event)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> Event -> m Event)
-> Data Event
Event -> DataType
Event -> Constr
(forall b. Data b => b -> b) -> Event -> Event
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Event -> c Event
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Event
forall a.
Typeable a
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> Event -> u
forall u. (forall d. Data d => d -> u) -> Event -> [u]
forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Event -> r
forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Event -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Event -> m Event
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Event -> m Event
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Event
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Event -> c Event
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c Event)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Event)
$cEvent :: Constr
$tEvent :: DataType
gmapMo :: (forall d. Data d => d -> m d) -> Event -> m Event
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Event -> m Event
gmapMp :: (forall d. Data d => d -> m d) -> Event -> m Event
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Event -> m Event
gmapM :: (forall d. Data d => d -> m d) -> Event -> m Event
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Event -> m Event
gmapQi :: Int -> (forall d. Data d => d -> u) -> Event -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> Event -> u
gmapQ :: (forall d. Data d => d -> u) -> Event -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> Event -> [u]
gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Event -> r
$cgmapQr :: forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Event -> r
gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Event -> r
$cgmapQl :: forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Event -> r
gmapT :: (forall b. Data b => b -> b) -> Event -> Event
$cgmapT :: (forall b. Data b => b -> b) -> Event -> Event
dataCast2 :: (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Event)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Event)
dataCast1 :: (forall d. Data d => c (t d)) -> Maybe (c Event)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c Event)
dataTypeOf :: Event -> DataType
$cdataTypeOf :: Event -> DataType
toConstr :: Event -> Constr
$ctoConstr :: Event -> Constr
gunfold :: (forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Event
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Event
gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Event -> c Event
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Event -> c Event
$cp1Data :: Typeable Event
Data, Typeable, (forall x. Event -> Rep Event x)
-> (forall x. Rep Event x -> Event) -> Generic Event
forall x. Rep Event x -> Event
forall x. Event -> Rep Event x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep Event x -> Event
$cfrom :: forall x. Event -> Rep Event x
Generic)

instance FromJSON Event where
    parseJSON :: Value -> Parser Event
parseJSON (Object Object
o) =
        Object -> Parser ()
checkError Object
o
            Parser () -> Parser Event -> Parser Event
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> UTCTime
-> Maybe EventTarget -> Text -> EventTarget -> EventTarget -> Event
Event (UTCTime
 -> Maybe EventTarget
 -> Text
 -> EventTarget
 -> EventTarget
 -> Event)
-> Parser UTCTime
-> Parser
     (Maybe EventTarget -> Text -> EventTarget -> EventTarget -> Event)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Object
o Object -> Key -> Parser TwitterTime
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"created_at" Parser TwitterTime
-> (TwitterTime -> Parser UTCTime) -> Parser UTCTime
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= UTCTime -> Parser UTCTime
forall (m :: * -> *) a. Monad m => a -> m a
return (UTCTime -> Parser UTCTime)
-> (TwitterTime -> UTCTime) -> TwitterTime -> Parser UTCTime
forall b c a. (b -> c) -> (a -> b) -> a -> c
. TwitterTime -> UTCTime
fromTwitterTime)
            Parser
  (Maybe EventTarget -> Text -> EventTarget -> EventTarget -> Event)
-> Parser (Maybe EventTarget)
-> Parser (Text -> EventTarget -> EventTarget -> Event)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe EventTarget)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"target_object"
            Parser (Text -> EventTarget -> EventTarget -> Event)
-> Parser Text -> Parser (EventTarget -> EventTarget -> Event)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"event"
            Parser (EventTarget -> EventTarget -> Event)
-> Parser EventTarget -> Parser (EventTarget -> Event)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser EventTarget
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"target"
            Parser (EventTarget -> Event) -> Parser EventTarget -> Parser Event
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser EventTarget
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"source"
    parseJSON Value
v = String -> Parser Event
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> Parser Event) -> String -> Parser Event
forall a b. (a -> b) -> a -> b
$ String
"couldn't parse event from: " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Value -> String
forall a. Show a => a -> String
show Value
v

instance ToJSON Event where
    toJSON :: Event -> Value
toJSON Event {Maybe EventTarget
UTCTime
Text
EventTarget
evSource :: EventTarget
evTarget :: EventTarget
evEvent :: Text
evTargetObject :: Maybe EventTarget
evCreatedAt :: UTCTime
evSource :: Event -> EventTarget
evTarget :: Event -> EventTarget
evEvent :: Event -> Text
evTargetObject :: Event -> Maybe EventTarget
evCreatedAt :: Event -> UTCTime
..} =
        [Pair] -> Value
object
            [ Key
"created_at" Key -> TwitterTime -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= UTCTime -> TwitterTime
TwitterTime UTCTime
evCreatedAt
            , Key
"target_object" Key -> Maybe EventTarget -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe EventTarget
evTargetObject
            , Key
"event" Key -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Text
evEvent
            , Key
"target" Key -> EventTarget -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= EventTarget
evTarget
            , Key
"source" Key -> EventTarget -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= EventTarget
evSource
            ]

data Delete = Delete
    { Delete -> StatusId
delId :: StatusId
    , Delete -> StatusId
delUserId :: UserId
    }
    deriving (Int -> Delete -> ShowS
[Delete] -> ShowS
Delete -> String
(Int -> Delete -> ShowS)
-> (Delete -> String) -> ([Delete] -> ShowS) -> Show Delete
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Delete] -> ShowS
$cshowList :: [Delete] -> ShowS
show :: Delete -> String
$cshow :: Delete -> String
showsPrec :: Int -> Delete -> ShowS
$cshowsPrec :: Int -> Delete -> ShowS
Show, Delete -> Delete -> Bool
(Delete -> Delete -> Bool)
-> (Delete -> Delete -> Bool) -> Eq Delete
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Delete -> Delete -> Bool
$c/= :: Delete -> Delete -> Bool
== :: Delete -> Delete -> Bool
$c== :: Delete -> Delete -> Bool
Eq, Typeable Delete
DataType
Constr
Typeable Delete
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> Delete -> c Delete)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c Delete)
-> (Delete -> Constr)
-> (Delete -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c Delete))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Delete))
-> ((forall b. Data b => b -> b) -> Delete -> Delete)
-> (forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> Delete -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> Delete -> r)
-> (forall u. (forall d. Data d => d -> u) -> Delete -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> Delete -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> Delete -> m Delete)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> Delete -> m Delete)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> Delete -> m Delete)
-> Data Delete
Delete -> DataType
Delete -> Constr
(forall b. Data b => b -> b) -> Delete -> Delete
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Delete -> c Delete
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Delete
forall a.
Typeable a
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> Delete -> u
forall u. (forall d. Data d => d -> u) -> Delete -> [u]
forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Delete -> r
forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Delete -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Delete -> m Delete
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Delete -> m Delete
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Delete
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Delete -> c Delete
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c Delete)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Delete)
$cDelete :: Constr
$tDelete :: DataType
gmapMo :: (forall d. Data d => d -> m d) -> Delete -> m Delete
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Delete -> m Delete
gmapMp :: (forall d. Data d => d -> m d) -> Delete -> m Delete
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Delete -> m Delete
gmapM :: (forall d. Data d => d -> m d) -> Delete -> m Delete
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Delete -> m Delete
gmapQi :: Int -> (forall d. Data d => d -> u) -> Delete -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> Delete -> u
gmapQ :: (forall d. Data d => d -> u) -> Delete -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> Delete -> [u]
gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Delete -> r
$cgmapQr :: forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Delete -> r
gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Delete -> r
$cgmapQl :: forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Delete -> r
gmapT :: (forall b. Data b => b -> b) -> Delete -> Delete
$cgmapT :: (forall b. Data b => b -> b) -> Delete -> Delete
dataCast2 :: (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Delete)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Delete)
dataCast1 :: (forall d. Data d => c (t d)) -> Maybe (c Delete)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c Delete)
dataTypeOf :: Delete -> DataType
$cdataTypeOf :: Delete -> DataType
toConstr :: Delete -> Constr
$ctoConstr :: Delete -> Constr
gunfold :: (forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Delete
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Delete
gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Delete -> c Delete
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Delete -> c Delete
$cp1Data :: Typeable Delete
Data, Typeable, (forall x. Delete -> Rep Delete x)
-> (forall x. Rep Delete x -> Delete) -> Generic Delete
forall x. Rep Delete x -> Delete
forall x. Delete -> Rep Delete x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep Delete x -> Delete
$cfrom :: forall x. Delete -> Rep Delete x
Generic)

instance FromJSON Delete where
    parseJSON :: Value -> Parser Delete
parseJSON (Object Object
o) =
        Object -> Parser ()
checkError Object
o Parser () -> Parser Delete -> Parser Delete
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> do
            Object
s <- Object
o Object -> Key -> Parser Object
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"delete" Parser Object -> (Object -> Parser Object) -> Parser Object
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (Object -> Key -> Parser Object
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"status")
            StatusId -> StatusId -> Delete
Delete (StatusId -> StatusId -> Delete)
-> Parser StatusId -> Parser (StatusId -> Delete)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
s Object -> Key -> Parser StatusId
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"id"
                Parser (StatusId -> Delete) -> Parser StatusId -> Parser Delete
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
s Object -> Key -> Parser StatusId
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"user_id"
    parseJSON Value
v = String -> Parser Delete
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> Parser Delete) -> String -> Parser Delete
forall a b. (a -> b) -> a -> b
$ String
"couldn't parse delete from: " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Value -> String
forall a. Show a => a -> String
show Value
v

instance ToJSON Delete where
    toJSON :: Delete -> Value
toJSON Delete {StatusId
delUserId :: StatusId
delId :: StatusId
delUserId :: Delete -> StatusId
delId :: Delete -> StatusId
..} =
        [Pair] -> Value
object
            [ Key
"delete"
                Key -> Value -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= [Pair] -> Value
object
                    [ Key
"status"
                        Key -> Value -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= [Pair] -> Value
object
                            [ Key
"id" Key -> StatusId -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= StatusId
delId
                            , Key
"user_id" Key -> StatusId -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= StatusId
delUserId
                            ]
                    ]
            ]

-- | This type represents the Twitter user.
-- See <https://dev.twitter.com/docs/platform-objects/users>.
data User = User
    { User -> Bool
userContributorsEnabled :: Bool
    , User -> UTCTime
userCreatedAt :: UTCTime
    , User -> Bool
userDefaultProfile :: Bool
    , User -> Bool
userDefaultProfileImage :: Bool
    , User -> Maybe Text
userDescription :: Maybe Text
    , User -> Maybe Text
userEmail :: Maybe Text
    , User -> Int
userFavoritesCount :: Int
    , User -> Maybe Bool
userFollowRequestSent :: Maybe Bool
    , User -> Maybe Bool
userFollowing :: Maybe Bool
    , User -> Int
userFollowersCount :: Int
    , User -> Int
userFriendsCount :: Int
    , User -> Bool
userGeoEnabled :: Bool
    , User -> StatusId
userId :: UserId
    , User -> Bool
userIsTranslator :: Bool
    , User -> Maybe String
userLang :: Maybe LanguageCode
    , User -> Int
userListedCount :: Int
    , User -> Maybe Text
userLocation :: Maybe Text
    , User -> Text
userName :: Text
    , User -> Maybe Bool
userNotifications :: Maybe Bool
    , User -> Maybe Text
userProfileBackgroundColor :: Maybe Text
    , User -> Maybe Text
userProfileBackgroundImageURL :: Maybe URIString
    , User -> Maybe Text
userProfileBackgroundImageURLHttps :: Maybe URIString
    , User -> Maybe Bool
userProfileBackgroundTile :: Maybe Bool
    , User -> Maybe Text
userProfileBannerURL :: Maybe URIString
    , User -> Maybe Text
userProfileImageURL :: Maybe URIString
    , User -> Maybe Text
userProfileImageURLHttps :: Maybe URIString
    , User -> Text
userProfileLinkColor :: Text
    , User -> Text
userProfileSidebarBorderColor :: Text
    , User -> Text
userProfileSidebarFillColor :: Text
    , User -> Text
userProfileTextColor :: Text
    , User -> Bool
userProfileUseBackgroundImage :: Bool
    , User -> Bool
userProtected :: Bool
    , User -> Text
userScreenName :: Text
    , User -> Maybe Bool
userShowAllInlineMedia :: Maybe Bool
    , User -> Int
userStatusesCount :: Int
    , User -> Maybe Text
userTimeZone :: Maybe Text
    , User -> Maybe Text
userURL :: Maybe URIString
    , User -> Maybe Int
userUtcOffset :: Maybe Int
    , User -> Bool
userVerified :: Bool
    , User -> Maybe [Text]
userWithheldInCountries :: Maybe [Text]
    , User -> Maybe Text
userWithheldScope :: Maybe Text
    }
    deriving (Int -> User -> ShowS
[User] -> ShowS
User -> String
(Int -> User -> ShowS)
-> (User -> String) -> ([User] -> ShowS) -> Show User
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [User] -> ShowS
$cshowList :: [User] -> ShowS
show :: User -> String
$cshow :: User -> String
showsPrec :: Int -> User -> ShowS
$cshowsPrec :: Int -> User -> ShowS
Show, User -> User -> Bool
(User -> User -> Bool) -> (User -> User -> Bool) -> Eq User
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: User -> User -> Bool
$c/= :: User -> User -> Bool
== :: User -> User -> Bool
$c== :: User -> User -> Bool
Eq, Typeable User
DataType
Constr
Typeable User
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> User -> c User)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c User)
-> (User -> Constr)
-> (User -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c User))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c User))
-> ((forall b. Data b => b -> b) -> User -> User)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> User -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> User -> r)
-> (forall u. (forall d. Data d => d -> u) -> User -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> User -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> User -> m User)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> User -> m User)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> User -> m User)
-> Data User
User -> DataType
User -> Constr
(forall b. Data b => b -> b) -> User -> User
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> User -> c User
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c User
forall a.
Typeable a
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> User -> u
forall u. (forall d. Data d => d -> u) -> User -> [u]
forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> User -> r
forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> User -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> User -> m User
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> User -> m User
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c User
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> User -> c User
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c User)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c User)
$cUser :: Constr
$tUser :: DataType
gmapMo :: (forall d. Data d => d -> m d) -> User -> m User
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> User -> m User
gmapMp :: (forall d. Data d => d -> m d) -> User -> m User
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> User -> m User
gmapM :: (forall d. Data d => d -> m d) -> User -> m User
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> User -> m User
gmapQi :: Int -> (forall d. Data d => d -> u) -> User -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> User -> u
gmapQ :: (forall d. Data d => d -> u) -> User -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> User -> [u]
gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> User -> r
$cgmapQr :: forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> User -> r
gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> User -> r
$cgmapQl :: forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> User -> r
gmapT :: (forall b. Data b => b -> b) -> User -> User
$cgmapT :: (forall b. Data b => b -> b) -> User -> User
dataCast2 :: (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c User)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c User)
dataCast1 :: (forall d. Data d => c (t d)) -> Maybe (c User)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c User)
dataTypeOf :: User -> DataType
$cdataTypeOf :: User -> DataType
toConstr :: User -> Constr
$ctoConstr :: User -> Constr
gunfold :: (forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c User
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c User
gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> User -> c User
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> User -> c User
$cp1Data :: Typeable User
Data, Typeable, (forall x. User -> Rep User x)
-> (forall x. Rep User x -> User) -> Generic User
forall x. Rep User x -> User
forall x. User -> Rep User x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep User x -> User
$cfrom :: forall x. User -> Rep User x
Generic)

instance FromJSON User where
    parseJSON :: Value -> Parser User
parseJSON (Object Object
o) =
        Object -> Parser ()
checkError Object
o
            Parser () -> Parser User -> Parser User
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Bool
-> UTCTime
-> Bool
-> Bool
-> Maybe Text
-> Maybe Text
-> Int
-> Maybe Bool
-> Maybe Bool
-> Int
-> Int
-> Bool
-> StatusId
-> Bool
-> Maybe String
-> Int
-> Maybe Text
-> Text
-> Maybe Bool
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Bool
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Text
-> Text
-> Text
-> Text
-> Bool
-> Bool
-> Text
-> Maybe Bool
-> Int
-> Maybe Text
-> Maybe Text
-> Maybe Int
-> Bool
-> Maybe [Text]
-> Maybe Text
-> User
User (Bool
 -> UTCTime
 -> Bool
 -> Bool
 -> Maybe Text
 -> Maybe Text
 -> Int
 -> Maybe Bool
 -> Maybe Bool
 -> Int
 -> Int
 -> Bool
 -> StatusId
 -> Bool
 -> Maybe String
 -> Int
 -> Maybe Text
 -> Text
 -> Maybe Bool
 -> Maybe Text
 -> Maybe Text
 -> Maybe Text
 -> Maybe Bool
 -> Maybe Text
 -> Maybe Text
 -> Maybe Text
 -> Text
 -> Text
 -> Text
 -> Text
 -> Bool
 -> Bool
 -> Text
 -> Maybe Bool
 -> Int
 -> Maybe Text
 -> Maybe Text
 -> Maybe Int
 -> Bool
 -> Maybe [Text]
 -> Maybe Text
 -> User)
-> Parser Bool
-> Parser
     (UTCTime
      -> Bool
      -> Bool
      -> Maybe Text
      -> Maybe Text
      -> Int
      -> Maybe Bool
      -> Maybe Bool
      -> Int
      -> Int
      -> Bool
      -> StatusId
      -> Bool
      -> Maybe String
      -> Int
      -> Maybe Text
      -> Text
      -> Maybe Bool
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Bool
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Text
      -> Text
      -> Text
      -> Text
      -> Bool
      -> Bool
      -> Text
      -> Maybe Bool
      -> Int
      -> Maybe Text
      -> Maybe Text
      -> Maybe Int
      -> Bool
      -> Maybe [Text]
      -> Maybe Text
      -> User)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser Bool
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"contributors_enabled"
            Parser
  (UTCTime
   -> Bool
   -> Bool
   -> Maybe Text
   -> Maybe Text
   -> Int
   -> Maybe Bool
   -> Maybe Bool
   -> Int
   -> Int
   -> Bool
   -> StatusId
   -> Bool
   -> Maybe String
   -> Int
   -> Maybe Text
   -> Text
   -> Maybe Bool
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Bool
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Text
   -> Text
   -> Text
   -> Text
   -> Bool
   -> Bool
   -> Text
   -> Maybe Bool
   -> Int
   -> Maybe Text
   -> Maybe Text
   -> Maybe Int
   -> Bool
   -> Maybe [Text]
   -> Maybe Text
   -> User)
-> Parser UTCTime
-> Parser
     (Bool
      -> Bool
      -> Maybe Text
      -> Maybe Text
      -> Int
      -> Maybe Bool
      -> Maybe Bool
      -> Int
      -> Int
      -> Bool
      -> StatusId
      -> Bool
      -> Maybe String
      -> Int
      -> Maybe Text
      -> Text
      -> Maybe Bool
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Bool
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Text
      -> Text
      -> Text
      -> Text
      -> Bool
      -> Bool
      -> Text
      -> Maybe Bool
      -> Int
      -> Maybe Text
      -> Maybe Text
      -> Maybe Int
      -> Bool
      -> Maybe [Text]
      -> Maybe Text
      -> User)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Object
o Object -> Key -> Parser TwitterTime
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"created_at" Parser TwitterTime
-> (TwitterTime -> Parser UTCTime) -> Parser UTCTime
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= UTCTime -> Parser UTCTime
forall (m :: * -> *) a. Monad m => a -> m a
return (UTCTime -> Parser UTCTime)
-> (TwitterTime -> UTCTime) -> TwitterTime -> Parser UTCTime
forall b c a. (b -> c) -> (a -> b) -> a -> c
. TwitterTime -> UTCTime
fromTwitterTime)
            Parser
  (Bool
   -> Bool
   -> Maybe Text
   -> Maybe Text
   -> Int
   -> Maybe Bool
   -> Maybe Bool
   -> Int
   -> Int
   -> Bool
   -> StatusId
   -> Bool
   -> Maybe String
   -> Int
   -> Maybe Text
   -> Text
   -> Maybe Bool
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Bool
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Text
   -> Text
   -> Text
   -> Text
   -> Bool
   -> Bool
   -> Text
   -> Maybe Bool
   -> Int
   -> Maybe Text
   -> Maybe Text
   -> Maybe Int
   -> Bool
   -> Maybe [Text]
   -> Maybe Text
   -> User)
-> Parser Bool
-> Parser
     (Bool
      -> Maybe Text
      -> Maybe Text
      -> Int
      -> Maybe Bool
      -> Maybe Bool
      -> Int
      -> Int
      -> Bool
      -> StatusId
      -> Bool
      -> Maybe String
      -> Int
      -> Maybe Text
      -> Text
      -> Maybe Bool
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Bool
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Text
      -> Text
      -> Text
      -> Text
      -> Bool
      -> Bool
      -> Text
      -> Maybe Bool
      -> Int
      -> Maybe Text
      -> Maybe Text
      -> Maybe Int
      -> Bool
      -> Maybe [Text]
      -> Maybe Text
      -> User)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Bool
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"default_profile"
            Parser
  (Bool
   -> Maybe Text
   -> Maybe Text
   -> Int
   -> Maybe Bool
   -> Maybe Bool
   -> Int
   -> Int
   -> Bool
   -> StatusId
   -> Bool
   -> Maybe String
   -> Int
   -> Maybe Text
   -> Text
   -> Maybe Bool
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Bool
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Text
   -> Text
   -> Text
   -> Text
   -> Bool
   -> Bool
   -> Text
   -> Maybe Bool
   -> Int
   -> Maybe Text
   -> Maybe Text
   -> Maybe Int
   -> Bool
   -> Maybe [Text]
   -> Maybe Text
   -> User)
-> Parser Bool
-> Parser
     (Maybe Text
      -> Maybe Text
      -> Int
      -> Maybe Bool
      -> Maybe Bool
      -> Int
      -> Int
      -> Bool
      -> StatusId
      -> Bool
      -> Maybe String
      -> Int
      -> Maybe Text
      -> Text
      -> Maybe Bool
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Bool
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Text
      -> Text
      -> Text
      -> Text
      -> Bool
      -> Bool
      -> Text
      -> Maybe Bool
      -> Int
      -> Maybe Text
      -> Maybe Text
      -> Maybe Int
      -> Bool
      -> Maybe [Text]
      -> Maybe Text
      -> User)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Bool
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"default_profile_image"
            Parser
  (Maybe Text
   -> Maybe Text
   -> Int
   -> Maybe Bool
   -> Maybe Bool
   -> Int
   -> Int
   -> Bool
   -> StatusId
   -> Bool
   -> Maybe String
   -> Int
   -> Maybe Text
   -> Text
   -> Maybe Bool
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Bool
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Text
   -> Text
   -> Text
   -> Text
   -> Bool
   -> Bool
   -> Text
   -> Maybe Bool
   -> Int
   -> Maybe Text
   -> Maybe Text
   -> Maybe Int
   -> Bool
   -> Maybe [Text]
   -> Maybe Text
   -> User)
-> Parser (Maybe Text)
-> Parser
     (Maybe Text
      -> Int
      -> Maybe Bool
      -> Maybe Bool
      -> Int
      -> Int
      -> Bool
      -> StatusId
      -> Bool
      -> Maybe String
      -> Int
      -> Maybe Text
      -> Text
      -> Maybe Bool
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Bool
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Text
      -> Text
      -> Text
      -> Text
      -> Bool
      -> Bool
      -> Text
      -> Maybe Bool
      -> Int
      -> Maybe Text
      -> Maybe Text
      -> Maybe Int
      -> Bool
      -> Maybe [Text]
      -> Maybe Text
      -> User)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"description"
            Parser
  (Maybe Text
   -> Int
   -> Maybe Bool
   -> Maybe Bool
   -> Int
   -> Int
   -> Bool
   -> StatusId
   -> Bool
   -> Maybe String
   -> Int
   -> Maybe Text
   -> Text
   -> Maybe Bool
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Bool
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Text
   -> Text
   -> Text
   -> Text
   -> Bool
   -> Bool
   -> Text
   -> Maybe Bool
   -> Int
   -> Maybe Text
   -> Maybe Text
   -> Maybe Int
   -> Bool
   -> Maybe [Text]
   -> Maybe Text
   -> User)
-> Parser (Maybe Text)
-> Parser
     (Int
      -> Maybe Bool
      -> Maybe Bool
      -> Int
      -> Int
      -> Bool
      -> StatusId
      -> Bool
      -> Maybe String
      -> Int
      -> Maybe Text
      -> Text
      -> Maybe Bool
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Bool
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Text
      -> Text
      -> Text
      -> Text
      -> Bool
      -> Bool
      -> Text
      -> Maybe Bool
      -> Int
      -> Maybe Text
      -> Maybe Text
      -> Maybe Int
      -> Bool
      -> Maybe [Text]
      -> Maybe Text
      -> User)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Maybe (Maybe Text) -> Maybe Text)
-> Parser (Maybe (Maybe Text)) -> Parser (Maybe Text)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Maybe (Maybe Text) -> Maybe Text
forall (m :: * -> *) a. Monad m => m (m a) -> m a
join (Object
o Object -> Key -> Parser (Maybe (Maybe Text))
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"email") -- The field can be a null value
            Parser
  (Int
   -> Maybe Bool
   -> Maybe Bool
   -> Int
   -> Int
   -> Bool
   -> StatusId
   -> Bool
   -> Maybe String
   -> Int
   -> Maybe Text
   -> Text
   -> Maybe Bool
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Bool
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Text
   -> Text
   -> Text
   -> Text
   -> Bool
   -> Bool
   -> Text
   -> Maybe Bool
   -> Int
   -> Maybe Text
   -> Maybe Text
   -> Maybe Int
   -> Bool
   -> Maybe [Text]
   -> Maybe Text
   -> User)
-> Parser Int
-> Parser
     (Maybe Bool
      -> Maybe Bool
      -> Int
      -> Int
      -> Bool
      -> StatusId
      -> Bool
      -> Maybe String
      -> Int
      -> Maybe Text
      -> Text
      -> Maybe Bool
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Bool
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Text
      -> Text
      -> Text
      -> Text
      -> Bool
      -> Bool
      -> Text
      -> Maybe Bool
      -> Int
      -> Maybe Text
      -> Maybe Text
      -> Maybe Int
      -> Bool
      -> Maybe [Text]
      -> Maybe Text
      -> User)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Int
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"favourites_count"
            Parser
  (Maybe Bool
   -> Maybe Bool
   -> Int
   -> Int
   -> Bool
   -> StatusId
   -> Bool
   -> Maybe String
   -> Int
   -> Maybe Text
   -> Text
   -> Maybe Bool
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Bool
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Text
   -> Text
   -> Text
   -> Text
   -> Bool
   -> Bool
   -> Text
   -> Maybe Bool
   -> Int
   -> Maybe Text
   -> Maybe Text
   -> Maybe Int
   -> Bool
   -> Maybe [Text]
   -> Maybe Text
   -> User)
-> Parser (Maybe Bool)
-> Parser
     (Maybe Bool
      -> Int
      -> Int
      -> Bool
      -> StatusId
      -> Bool
      -> Maybe String
      -> Int
      -> Maybe Text
      -> Text
      -> Maybe Bool
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Bool
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Text
      -> Text
      -> Text
      -> Text
      -> Bool
      -> Bool
      -> Text
      -> Maybe Bool
      -> Int
      -> Maybe Text
      -> Maybe Text
      -> Maybe Int
      -> Bool
      -> Maybe [Text]
      -> Maybe Text
      -> User)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe (Maybe Bool))
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"follow_request_sent" Parser (Maybe (Maybe Bool)) -> Maybe Bool -> Parser (Maybe Bool)
forall a. Parser (Maybe a) -> a -> Parser a
.!= Maybe Bool
forall a. Maybe a
Nothing
            Parser
  (Maybe Bool
   -> Int
   -> Int
   -> Bool
   -> StatusId
   -> Bool
   -> Maybe String
   -> Int
   -> Maybe Text
   -> Text
   -> Maybe Bool
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Bool
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Text
   -> Text
   -> Text
   -> Text
   -> Bool
   -> Bool
   -> Text
   -> Maybe Bool
   -> Int
   -> Maybe Text
   -> Maybe Text
   -> Maybe Int
   -> Bool
   -> Maybe [Text]
   -> Maybe Text
   -> User)
-> Parser (Maybe Bool)
-> Parser
     (Int
      -> Int
      -> Bool
      -> StatusId
      -> Bool
      -> Maybe String
      -> Int
      -> Maybe Text
      -> Text
      -> Maybe Bool
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Bool
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Text
      -> Text
      -> Text
      -> Text
      -> Bool
      -> Bool
      -> Text
      -> Maybe Bool
      -> Int
      -> Maybe Text
      -> Maybe Text
      -> Maybe Int
      -> Bool
      -> Maybe [Text]
      -> Maybe Text
      -> User)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe (Maybe Bool))
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"following" Parser (Maybe (Maybe Bool)) -> Maybe Bool -> Parser (Maybe Bool)
forall a. Parser (Maybe a) -> a -> Parser a
.!= Maybe Bool
forall a. Maybe a
Nothing
            Parser
  (Int
   -> Int
   -> Bool
   -> StatusId
   -> Bool
   -> Maybe String
   -> Int
   -> Maybe Text
   -> Text
   -> Maybe Bool
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Bool
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Text
   -> Text
   -> Text
   -> Text
   -> Bool
   -> Bool
   -> Text
   -> Maybe Bool
   -> Int
   -> Maybe Text
   -> Maybe Text
   -> Maybe Int
   -> Bool
   -> Maybe [Text]
   -> Maybe Text
   -> User)
-> Parser Int
-> Parser
     (Int
      -> Bool
      -> StatusId
      -> Bool
      -> Maybe String
      -> Int
      -> Maybe Text
      -> Text
      -> Maybe Bool
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Bool
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Text
      -> Text
      -> Text
      -> Text
      -> Bool
      -> Bool
      -> Text
      -> Maybe Bool
      -> Int
      -> Maybe Text
      -> Maybe Text
      -> Maybe Int
      -> Bool
      -> Maybe [Text]
      -> Maybe Text
      -> User)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Int
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"followers_count"
            Parser
  (Int
   -> Bool
   -> StatusId
   -> Bool
   -> Maybe String
   -> Int
   -> Maybe Text
   -> Text
   -> Maybe Bool
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Bool
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Text
   -> Text
   -> Text
   -> Text
   -> Bool
   -> Bool
   -> Text
   -> Maybe Bool
   -> Int
   -> Maybe Text
   -> Maybe Text
   -> Maybe Int
   -> Bool
   -> Maybe [Text]
   -> Maybe Text
   -> User)
-> Parser Int
-> Parser
     (Bool
      -> StatusId
      -> Bool
      -> Maybe String
      -> Int
      -> Maybe Text
      -> Text
      -> Maybe Bool
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Bool
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Text
      -> Text
      -> Text
      -> Text
      -> Bool
      -> Bool
      -> Text
      -> Maybe Bool
      -> Int
      -> Maybe Text
      -> Maybe Text
      -> Maybe Int
      -> Bool
      -> Maybe [Text]
      -> Maybe Text
      -> User)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Int
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"friends_count"
            Parser
  (Bool
   -> StatusId
   -> Bool
   -> Maybe String
   -> Int
   -> Maybe Text
   -> Text
   -> Maybe Bool
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Bool
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Text
   -> Text
   -> Text
   -> Text
   -> Bool
   -> Bool
   -> Text
   -> Maybe Bool
   -> Int
   -> Maybe Text
   -> Maybe Text
   -> Maybe Int
   -> Bool
   -> Maybe [Text]
   -> Maybe Text
   -> User)
-> Parser Bool
-> Parser
     (StatusId
      -> Bool
      -> Maybe String
      -> Int
      -> Maybe Text
      -> Text
      -> Maybe Bool
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Bool
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Text
      -> Text
      -> Text
      -> Text
      -> Bool
      -> Bool
      -> Text
      -> Maybe Bool
      -> Int
      -> Maybe Text
      -> Maybe Text
      -> Maybe Int
      -> Bool
      -> Maybe [Text]
      -> Maybe Text
      -> User)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Bool
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"geo_enabled"
            Parser
  (StatusId
   -> Bool
   -> Maybe String
   -> Int
   -> Maybe Text
   -> Text
   -> Maybe Bool
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Bool
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Text
   -> Text
   -> Text
   -> Text
   -> Bool
   -> Bool
   -> Text
   -> Maybe Bool
   -> Int
   -> Maybe Text
   -> Maybe Text
   -> Maybe Int
   -> Bool
   -> Maybe [Text]
   -> Maybe Text
   -> User)
-> Parser StatusId
-> Parser
     (Bool
      -> Maybe String
      -> Int
      -> Maybe Text
      -> Text
      -> Maybe Bool
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Bool
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Text
      -> Text
      -> Text
      -> Text
      -> Bool
      -> Bool
      -> Text
      -> Maybe Bool
      -> Int
      -> Maybe Text
      -> Maybe Text
      -> Maybe Int
      -> Bool
      -> Maybe [Text]
      -> Maybe Text
      -> User)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser StatusId
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"id"
            Parser
  (Bool
   -> Maybe String
   -> Int
   -> Maybe Text
   -> Text
   -> Maybe Bool
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Bool
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Text
   -> Text
   -> Text
   -> Text
   -> Bool
   -> Bool
   -> Text
   -> Maybe Bool
   -> Int
   -> Maybe Text
   -> Maybe Text
   -> Maybe Int
   -> Bool
   -> Maybe [Text]
   -> Maybe Text
   -> User)
-> Parser Bool
-> Parser
     (Maybe String
      -> Int
      -> Maybe Text
      -> Text
      -> Maybe Bool
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Bool
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Text
      -> Text
      -> Text
      -> Text
      -> Bool
      -> Bool
      -> Text
      -> Maybe Bool
      -> Int
      -> Maybe Text
      -> Maybe Text
      -> Maybe Int
      -> Bool
      -> Maybe [Text]
      -> Maybe Text
      -> User)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Bool
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"is_translator"
            Parser
  (Maybe String
   -> Int
   -> Maybe Text
   -> Text
   -> Maybe Bool
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Bool
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Text
   -> Text
   -> Text
   -> Text
   -> Bool
   -> Bool
   -> Text
   -> Maybe Bool
   -> Int
   -> Maybe Text
   -> Maybe Text
   -> Maybe Int
   -> Bool
   -> Maybe [Text]
   -> Maybe Text
   -> User)
-> Parser (Maybe String)
-> Parser
     (Int
      -> Maybe Text
      -> Text
      -> Maybe Bool
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Bool
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Text
      -> Text
      -> Text
      -> Text
      -> Bool
      -> Bool
      -> Text
      -> Maybe Bool
      -> Int
      -> Maybe Text
      -> Maybe Text
      -> Maybe Int
      -> Bool
      -> Maybe [Text]
      -> Maybe Text
      -> User)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe String)
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"lang"
            Parser
  (Int
   -> Maybe Text
   -> Text
   -> Maybe Bool
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Bool
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Text
   -> Text
   -> Text
   -> Text
   -> Bool
   -> Bool
   -> Text
   -> Maybe Bool
   -> Int
   -> Maybe Text
   -> Maybe Text
   -> Maybe Int
   -> Bool
   -> Maybe [Text]
   -> Maybe Text
   -> User)
-> Parser Int
-> Parser
     (Maybe Text
      -> Text
      -> Maybe Bool
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Bool
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Text
      -> Text
      -> Text
      -> Text
      -> Bool
      -> Bool
      -> Text
      -> Maybe Bool
      -> Int
      -> Maybe Text
      -> Maybe Text
      -> Maybe Int
      -> Bool
      -> Maybe [Text]
      -> Maybe Text
      -> User)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Int
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"listed_count"
            Parser
  (Maybe Text
   -> Text
   -> Maybe Bool
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Bool
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Text
   -> Text
   -> Text
   -> Text
   -> Bool
   -> Bool
   -> Text
   -> Maybe Bool
   -> Int
   -> Maybe Text
   -> Maybe Text
   -> Maybe Int
   -> Bool
   -> Maybe [Text]
   -> Maybe Text
   -> User)
-> Parser (Maybe Text)
-> Parser
     (Text
      -> Maybe Bool
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Bool
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Text
      -> Text
      -> Text
      -> Text
      -> Bool
      -> Bool
      -> Text
      -> Maybe Bool
      -> Int
      -> Maybe Text
      -> Maybe Text
      -> Maybe Int
      -> Bool
      -> Maybe [Text]
      -> Maybe Text
      -> User)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"location"
            Parser
  (Text
   -> Maybe Bool
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Bool
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Text
   -> Text
   -> Text
   -> Text
   -> Bool
   -> Bool
   -> Text
   -> Maybe Bool
   -> Int
   -> Maybe Text
   -> Maybe Text
   -> Maybe Int
   -> Bool
   -> Maybe [Text]
   -> Maybe Text
   -> User)
-> Parser Text
-> Parser
     (Maybe Bool
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Bool
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Text
      -> Text
      -> Text
      -> Text
      -> Bool
      -> Bool
      -> Text
      -> Maybe Bool
      -> Int
      -> Maybe Text
      -> Maybe Text
      -> Maybe Int
      -> Bool
      -> Maybe [Text]
      -> Maybe Text
      -> User)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"name"
            Parser
  (Maybe Bool
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Bool
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Text
   -> Text
   -> Text
   -> Text
   -> Bool
   -> Bool
   -> Text
   -> Maybe Bool
   -> Int
   -> Maybe Text
   -> Maybe Text
   -> Maybe Int
   -> Bool
   -> Maybe [Text]
   -> Maybe Text
   -> User)
-> Parser (Maybe Bool)
-> Parser
     (Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Bool
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Text
      -> Text
      -> Text
      -> Text
      -> Bool
      -> Bool
      -> Text
      -> Maybe Bool
      -> Int
      -> Maybe Text
      -> Maybe Text
      -> Maybe Int
      -> Bool
      -> Maybe [Text]
      -> Maybe Text
      -> User)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe (Maybe Bool))
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"notifications" Parser (Maybe (Maybe Bool)) -> Maybe Bool -> Parser (Maybe Bool)
forall a. Parser (Maybe a) -> a -> Parser a
.!= Maybe Bool
forall a. Maybe a
Nothing
            Parser
  (Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Bool
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Text
   -> Text
   -> Text
   -> Text
   -> Bool
   -> Bool
   -> Text
   -> Maybe Bool
   -> Int
   -> Maybe Text
   -> Maybe Text
   -> Maybe Int
   -> Bool
   -> Maybe [Text]
   -> Maybe Text
   -> User)
-> Parser (Maybe Text)
-> Parser
     (Maybe Text
      -> Maybe Text
      -> Maybe Bool
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Text
      -> Text
      -> Text
      -> Text
      -> Bool
      -> Bool
      -> Text
      -> Maybe Bool
      -> Int
      -> Maybe Text
      -> Maybe Text
      -> Maybe Int
      -> Bool
      -> Maybe [Text]
      -> Maybe Text
      -> User)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"profile_background_color"
            Parser
  (Maybe Text
   -> Maybe Text
   -> Maybe Bool
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Text
   -> Text
   -> Text
   -> Text
   -> Bool
   -> Bool
   -> Text
   -> Maybe Bool
   -> Int
   -> Maybe Text
   -> Maybe Text
   -> Maybe Int
   -> Bool
   -> Maybe [Text]
   -> Maybe Text
   -> User)
-> Parser (Maybe Text)
-> Parser
     (Maybe Text
      -> Maybe Bool
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Text
      -> Text
      -> Text
      -> Text
      -> Bool
      -> Bool
      -> Text
      -> Maybe Bool
      -> Int
      -> Maybe Text
      -> Maybe Text
      -> Maybe Int
      -> Bool
      -> Maybe [Text]
      -> Maybe Text
      -> User)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"profile_background_image_url"
            Parser
  (Maybe Text
   -> Maybe Bool
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Text
   -> Text
   -> Text
   -> Text
   -> Bool
   -> Bool
   -> Text
   -> Maybe Bool
   -> Int
   -> Maybe Text
   -> Maybe Text
   -> Maybe Int
   -> Bool
   -> Maybe [Text]
   -> Maybe Text
   -> User)
-> Parser (Maybe Text)
-> Parser
     (Maybe Bool
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Text
      -> Text
      -> Text
      -> Text
      -> Bool
      -> Bool
      -> Text
      -> Maybe Bool
      -> Int
      -> Maybe Text
      -> Maybe Text
      -> Maybe Int
      -> Bool
      -> Maybe [Text]
      -> Maybe Text
      -> User)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"profile_background_image_url_https"
            Parser
  (Maybe Bool
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Text
   -> Text
   -> Text
   -> Text
   -> Bool
   -> Bool
   -> Text
   -> Maybe Bool
   -> Int
   -> Maybe Text
   -> Maybe Text
   -> Maybe Int
   -> Bool
   -> Maybe [Text]
   -> Maybe Text
   -> User)
-> Parser (Maybe Bool)
-> Parser
     (Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Text
      -> Text
      -> Text
      -> Text
      -> Bool
      -> Bool
      -> Text
      -> Maybe Bool
      -> Int
      -> Maybe Text
      -> Maybe Text
      -> Maybe Int
      -> Bool
      -> Maybe [Text]
      -> Maybe Text
      -> User)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Bool)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"profile_background_tile"
            Parser
  (Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Text
   -> Text
   -> Text
   -> Text
   -> Bool
   -> Bool
   -> Text
   -> Maybe Bool
   -> Int
   -> Maybe Text
   -> Maybe Text
   -> Maybe Int
   -> Bool
   -> Maybe [Text]
   -> Maybe Text
   -> User)
-> Parser (Maybe Text)
-> Parser
     (Maybe Text
      -> Maybe Text
      -> Text
      -> Text
      -> Text
      -> Text
      -> Bool
      -> Bool
      -> Text
      -> Maybe Bool
      -> Int
      -> Maybe Text
      -> Maybe Text
      -> Maybe Int
      -> Bool
      -> Maybe [Text]
      -> Maybe Text
      -> User)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"profile_banner_url"
            Parser
  (Maybe Text
   -> Maybe Text
   -> Text
   -> Text
   -> Text
   -> Text
   -> Bool
   -> Bool
   -> Text
   -> Maybe Bool
   -> Int
   -> Maybe Text
   -> Maybe Text
   -> Maybe Int
   -> Bool
   -> Maybe [Text]
   -> Maybe Text
   -> User)
-> Parser (Maybe Text)
-> Parser
     (Maybe Text
      -> Text
      -> Text
      -> Text
      -> Text
      -> Bool
      -> Bool
      -> Text
      -> Maybe Bool
      -> Int
      -> Maybe Text
      -> Maybe Text
      -> Maybe Int
      -> Bool
      -> Maybe [Text]
      -> Maybe Text
      -> User)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"profile_image_url"
            Parser
  (Maybe Text
   -> Text
   -> Text
   -> Text
   -> Text
   -> Bool
   -> Bool
   -> Text
   -> Maybe Bool
   -> Int
   -> Maybe Text
   -> Maybe Text
   -> Maybe Int
   -> Bool
   -> Maybe [Text]
   -> Maybe Text
   -> User)
-> Parser (Maybe Text)
-> Parser
     (Text
      -> Text
      -> Text
      -> Text
      -> Bool
      -> Bool
      -> Text
      -> Maybe Bool
      -> Int
      -> Maybe Text
      -> Maybe Text
      -> Maybe Int
      -> Bool
      -> Maybe [Text]
      -> Maybe Text
      -> User)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"profile_image_url_https"
            Parser
  (Text
   -> Text
   -> Text
   -> Text
   -> Bool
   -> Bool
   -> Text
   -> Maybe Bool
   -> Int
   -> Maybe Text
   -> Maybe Text
   -> Maybe Int
   -> Bool
   -> Maybe [Text]
   -> Maybe Text
   -> User)
-> Parser Text
-> Parser
     (Text
      -> Text
      -> Text
      -> Bool
      -> Bool
      -> Text
      -> Maybe Bool
      -> Int
      -> Maybe Text
      -> Maybe Text
      -> Maybe Int
      -> Bool
      -> Maybe [Text]
      -> Maybe Text
      -> User)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"profile_link_color"
            Parser
  (Text
   -> Text
   -> Text
   -> Bool
   -> Bool
   -> Text
   -> Maybe Bool
   -> Int
   -> Maybe Text
   -> Maybe Text
   -> Maybe Int
   -> Bool
   -> Maybe [Text]
   -> Maybe Text
   -> User)
-> Parser Text
-> Parser
     (Text
      -> Text
      -> Bool
      -> Bool
      -> Text
      -> Maybe Bool
      -> Int
      -> Maybe Text
      -> Maybe Text
      -> Maybe Int
      -> Bool
      -> Maybe [Text]
      -> Maybe Text
      -> User)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"profile_sidebar_border_color"
            Parser
  (Text
   -> Text
   -> Bool
   -> Bool
   -> Text
   -> Maybe Bool
   -> Int
   -> Maybe Text
   -> Maybe Text
   -> Maybe Int
   -> Bool
   -> Maybe [Text]
   -> Maybe Text
   -> User)
-> Parser Text
-> Parser
     (Text
      -> Bool
      -> Bool
      -> Text
      -> Maybe Bool
      -> Int
      -> Maybe Text
      -> Maybe Text
      -> Maybe Int
      -> Bool
      -> Maybe [Text]
      -> Maybe Text
      -> User)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"profile_sidebar_fill_color"
            Parser
  (Text
   -> Bool
   -> Bool
   -> Text
   -> Maybe Bool
   -> Int
   -> Maybe Text
   -> Maybe Text
   -> Maybe Int
   -> Bool
   -> Maybe [Text]
   -> Maybe Text
   -> User)
-> Parser Text
-> Parser
     (Bool
      -> Bool
      -> Text
      -> Maybe Bool
      -> Int
      -> Maybe Text
      -> Maybe Text
      -> Maybe Int
      -> Bool
      -> Maybe [Text]
      -> Maybe Text
      -> User)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"profile_text_color"
            Parser
  (Bool
   -> Bool
   -> Text
   -> Maybe Bool
   -> Int
   -> Maybe Text
   -> Maybe Text
   -> Maybe Int
   -> Bool
   -> Maybe [Text]
   -> Maybe Text
   -> User)
-> Parser Bool
-> Parser
     (Bool
      -> Text
      -> Maybe Bool
      -> Int
      -> Maybe Text
      -> Maybe Text
      -> Maybe Int
      -> Bool
      -> Maybe [Text]
      -> Maybe Text
      -> User)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Bool
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"profile_use_background_image"
            Parser
  (Bool
   -> Text
   -> Maybe Bool
   -> Int
   -> Maybe Text
   -> Maybe Text
   -> Maybe Int
   -> Bool
   -> Maybe [Text]
   -> Maybe Text
   -> User)
-> Parser Bool
-> Parser
     (Text
      -> Maybe Bool
      -> Int
      -> Maybe Text
      -> Maybe Text
      -> Maybe Int
      -> Bool
      -> Maybe [Text]
      -> Maybe Text
      -> User)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Bool
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"protected"
            Parser
  (Text
   -> Maybe Bool
   -> Int
   -> Maybe Text
   -> Maybe Text
   -> Maybe Int
   -> Bool
   -> Maybe [Text]
   -> Maybe Text
   -> User)
-> Parser Text
-> Parser
     (Maybe Bool
      -> Int
      -> Maybe Text
      -> Maybe Text
      -> Maybe Int
      -> Bool
      -> Maybe [Text]
      -> Maybe Text
      -> User)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"screen_name"
            Parser
  (Maybe Bool
   -> Int
   -> Maybe Text
   -> Maybe Text
   -> Maybe Int
   -> Bool
   -> Maybe [Text]
   -> Maybe Text
   -> User)
-> Parser (Maybe Bool)
-> Parser
     (Int
      -> Maybe Text
      -> Maybe Text
      -> Maybe Int
      -> Bool
      -> Maybe [Text]
      -> Maybe Text
      -> User)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Bool)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"show_all_inline_media"
            Parser
  (Int
   -> Maybe Text
   -> Maybe Text
   -> Maybe Int
   -> Bool
   -> Maybe [Text]
   -> Maybe Text
   -> User)
-> Parser Int
-> Parser
     (Maybe Text
      -> Maybe Text
      -> Maybe Int
      -> Bool
      -> Maybe [Text]
      -> Maybe Text
      -> User)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Int
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"statuses_count"
            Parser
  (Maybe Text
   -> Maybe Text
   -> Maybe Int
   -> Bool
   -> Maybe [Text]
   -> Maybe Text
   -> User)
-> Parser (Maybe Text)
-> Parser
     (Maybe Text
      -> Maybe Int -> Bool -> Maybe [Text] -> Maybe Text -> User)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"time_zone"
            Parser
  (Maybe Text
   -> Maybe Int -> Bool -> Maybe [Text] -> Maybe Text -> User)
-> Parser (Maybe Text)
-> Parser (Maybe Int -> Bool -> Maybe [Text] -> Maybe Text -> User)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe (Maybe Text))
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"url" Parser (Maybe (Maybe Text)) -> Maybe Text -> Parser (Maybe Text)
forall a. Parser (Maybe a) -> a -> Parser a
.!= Maybe Text
forall a. Maybe a
Nothing
            Parser (Maybe Int -> Bool -> Maybe [Text] -> Maybe Text -> User)
-> Parser (Maybe Int)
-> Parser (Bool -> Maybe [Text] -> Maybe Text -> User)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Int)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"utc_offset"
            Parser (Bool -> Maybe [Text] -> Maybe Text -> User)
-> Parser Bool -> Parser (Maybe [Text] -> Maybe Text -> User)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Bool
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"verified"
            Parser (Maybe [Text] -> Maybe Text -> User)
-> Parser (Maybe [Text]) -> Parser (Maybe Text -> User)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe [Text])
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"withheld_in_countries"
            Parser (Maybe Text -> User) -> Parser (Maybe Text) -> Parser User
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"withheld_scope"
    parseJSON Value
v = String -> Parser User
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> Parser User) -> String -> Parser User
forall a b. (a -> b) -> a -> b
$ String
"couldn't parse user from: " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Value -> String
forall a. Show a => a -> String
show Value
v

instance ToJSON User where
    toJSON :: User -> Value
toJSON User {Bool
Int
StatusId
Maybe Bool
Maybe Int
Maybe String
Maybe [Text]
Maybe Text
UTCTime
Text
userWithheldScope :: Maybe Text
userWithheldInCountries :: Maybe [Text]
userVerified :: Bool
userUtcOffset :: Maybe Int
userURL :: Maybe Text
userTimeZone :: Maybe Text
userStatusesCount :: Int
userShowAllInlineMedia :: Maybe Bool
userScreenName :: Text
userProtected :: Bool
userProfileUseBackgroundImage :: Bool
userProfileTextColor :: Text
userProfileSidebarFillColor :: Text
userProfileSidebarBorderColor :: Text
userProfileLinkColor :: Text
userProfileImageURLHttps :: Maybe Text
userProfileImageURL :: Maybe Text
userProfileBannerURL :: Maybe Text
userProfileBackgroundTile :: Maybe Bool
userProfileBackgroundImageURLHttps :: Maybe Text
userProfileBackgroundImageURL :: Maybe Text
userProfileBackgroundColor :: Maybe Text
userNotifications :: Maybe Bool
userName :: Text
userLocation :: Maybe Text
userListedCount :: Int
userLang :: Maybe String
userIsTranslator :: Bool
userId :: StatusId
userGeoEnabled :: Bool
userFriendsCount :: Int
userFollowersCount :: Int
userFollowing :: Maybe Bool
userFollowRequestSent :: Maybe Bool
userFavoritesCount :: Int
userEmail :: Maybe Text
userDescription :: Maybe Text
userDefaultProfileImage :: Bool
userDefaultProfile :: Bool
userCreatedAt :: UTCTime
userContributorsEnabled :: Bool
userWithheldScope :: User -> Maybe Text
userWithheldInCountries :: User -> Maybe [Text]
userVerified :: User -> Bool
userUtcOffset :: User -> Maybe Int
userURL :: User -> Maybe Text
userTimeZone :: User -> Maybe Text
userStatusesCount :: User -> Int
userShowAllInlineMedia :: User -> Maybe Bool
userScreenName :: User -> Text
userProtected :: User -> Bool
userProfileUseBackgroundImage :: User -> Bool
userProfileTextColor :: User -> Text
userProfileSidebarFillColor :: User -> Text
userProfileSidebarBorderColor :: User -> Text
userProfileLinkColor :: User -> Text
userProfileImageURLHttps :: User -> Maybe Text
userProfileImageURL :: User -> Maybe Text
userProfileBannerURL :: User -> Maybe Text
userProfileBackgroundTile :: User -> Maybe Bool
userProfileBackgroundImageURLHttps :: User -> Maybe Text
userProfileBackgroundImageURL :: User -> Maybe Text
userProfileBackgroundColor :: User -> Maybe Text
userNotifications :: User -> Maybe Bool
userName :: User -> Text
userLocation :: User -> Maybe Text
userListedCount :: User -> Int
userLang :: User -> Maybe String
userIsTranslator :: User -> Bool
userId :: User -> StatusId
userGeoEnabled :: User -> Bool
userFriendsCount :: User -> Int
userFollowersCount :: User -> Int
userFollowing :: User -> Maybe Bool
userFollowRequestSent :: User -> Maybe Bool
userFavoritesCount :: User -> Int
userEmail :: User -> Maybe Text
userDescription :: User -> Maybe Text
userDefaultProfileImage :: User -> Bool
userDefaultProfile :: User -> Bool
userCreatedAt :: User -> UTCTime
userContributorsEnabled :: User -> Bool
..} =
        [Pair] -> Value
object
            [ Key
"contributors_enabled" Key -> Bool -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Bool
userContributorsEnabled
            , Key
"created_at" Key -> TwitterTime -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= UTCTime -> TwitterTime
TwitterTime UTCTime
userCreatedAt
            , Key
"default_profile" Key -> Bool -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Bool
userDefaultProfile
            , Key
"default_profile_image" Key -> Bool -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Bool
userDefaultProfileImage
            , Key
"description" Key -> Maybe Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe Text
userDescription
            , Key
"email" Key -> Maybe Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe Text
userEmail
            , Key
"favourites_count" Key -> Int -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Int
userFavoritesCount
            , Key
"follow_request_sent" Key -> Maybe Bool -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe Bool
userFollowRequestSent
            , Key
"following" Key -> Maybe Bool -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe Bool
userFollowing
            , Key
"followers_count" Key -> Int -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Int
userFollowersCount
            , Key
"friends_count" Key -> Int -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Int
userFriendsCount
            , Key
"geo_enabled" Key -> Bool -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Bool
userGeoEnabled
            , Key
"id" Key -> StatusId -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= StatusId
userId
            , Key
"is_translator" Key -> Bool -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Bool
userIsTranslator
            , Key
"lang" Key -> Maybe String -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe String
userLang
            , Key
"listed_count" Key -> Int -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Int
userListedCount
            , Key
"location" Key -> Maybe Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe Text
userLocation
            , Key
"name" Key -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Text
userName
            , Key
"notifications" Key -> Maybe Bool -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe Bool
userNotifications
            , Key
"profile_background_color" Key -> Maybe Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe Text
userProfileBackgroundColor
            , Key
"profile_background_image_url" Key -> Maybe Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe Text
userProfileBackgroundImageURL
            , Key
"profile_background_image_url_https" Key -> Maybe Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe Text
userProfileBackgroundImageURLHttps
            , Key
"profile_background_tile" Key -> Maybe Bool -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe Bool
userProfileBackgroundTile
            , Key
"profile_banner_url" Key -> Maybe Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe Text
userProfileBannerURL
            , Key
"profile_image_url" Key -> Maybe Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe Text
userProfileImageURL
            , Key
"profile_image_url_https" Key -> Maybe Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe Text
userProfileImageURLHttps
            , Key
"profile_link_color" Key -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Text
userProfileLinkColor
            , Key
"profile_sidebar_border_color" Key -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Text
userProfileSidebarBorderColor
            , Key
"profile_sidebar_fill_color" Key -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Text
userProfileSidebarFillColor
            , Key
"profile_text_color" Key -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Text
userProfileTextColor
            , Key
"profile_use_background_image" Key -> Bool -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Bool
userProfileUseBackgroundImage
            , Key
"protected" Key -> Bool -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Bool
userProtected
            , Key
"screen_name" Key -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Text
userScreenName
            , Key
"show_all_inline_media" Key -> Maybe Bool -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe Bool
userShowAllInlineMedia
            , Key
"statuses_count" Key -> Int -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Int
userStatusesCount
            , Key
"time_zone" Key -> Maybe Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe Text
userTimeZone
            , Key
"url" Key -> Maybe Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe Text
userURL
            , Key
"utc_offset" Key -> Maybe Int -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe Int
userUtcOffset
            , Key
"verified" Key -> Bool -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Bool
userVerified
            , Key
"withheld_in_countries" Key -> Maybe [Text] -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe [Text]
userWithheldInCountries
            , Key
"withheld_scope" Key -> Maybe Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe Text
userWithheldScope
            ]

data List = List
    { List -> Int
listId :: Int
    , List -> Text
listName :: Text
    , List -> Text
listFullName :: Text
    , List -> Int
listMemberCount :: Int
    , List -> Int
listSubscriberCount :: Int
    , List -> Text
listMode :: Text
    , List -> User
listUser :: User
    }
    deriving (Int -> List -> ShowS
[List] -> ShowS
List -> String
(Int -> List -> ShowS)
-> (List -> String) -> ([List] -> ShowS) -> Show List
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [List] -> ShowS
$cshowList :: [List] -> ShowS
show :: List -> String
$cshow :: List -> String
showsPrec :: Int -> List -> ShowS
$cshowsPrec :: Int -> List -> ShowS
Show, List -> List -> Bool
(List -> List -> Bool) -> (List -> List -> Bool) -> Eq List
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: List -> List -> Bool
$c/= :: List -> List -> Bool
== :: List -> List -> Bool
$c== :: List -> List -> Bool
Eq, Typeable List
DataType
Constr
Typeable List
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> List -> c List)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c List)
-> (List -> Constr)
-> (List -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c List))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c List))
-> ((forall b. Data b => b -> b) -> List -> List)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> List -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> List -> r)
-> (forall u. (forall d. Data d => d -> u) -> List -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> List -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> List -> m List)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> List -> m List)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> List -> m List)
-> Data List
List -> DataType
List -> Constr
(forall b. Data b => b -> b) -> List -> List
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> List -> c List
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c List
forall a.
Typeable a
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> List -> u
forall u. (forall d. Data d => d -> u) -> List -> [u]
forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> List -> r
forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> List -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> List -> m List
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> List -> m List
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c List
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> List -> c List
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c List)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c List)
$cList :: Constr
$tList :: DataType
gmapMo :: (forall d. Data d => d -> m d) -> List -> m List
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> List -> m List
gmapMp :: (forall d. Data d => d -> m d) -> List -> m List
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> List -> m List
gmapM :: (forall d. Data d => d -> m d) -> List -> m List
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> List -> m List
gmapQi :: Int -> (forall d. Data d => d -> u) -> List -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> List -> u
gmapQ :: (forall d. Data d => d -> u) -> List -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> List -> [u]
gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> List -> r
$cgmapQr :: forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> List -> r
gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> List -> r
$cgmapQl :: forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> List -> r
gmapT :: (forall b. Data b => b -> b) -> List -> List
$cgmapT :: (forall b. Data b => b -> b) -> List -> List
dataCast2 :: (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c List)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c List)
dataCast1 :: (forall d. Data d => c (t d)) -> Maybe (c List)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c List)
dataTypeOf :: List -> DataType
$cdataTypeOf :: List -> DataType
toConstr :: List -> Constr
$ctoConstr :: List -> Constr
gunfold :: (forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c List
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c List
gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> List -> c List
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> List -> c List
$cp1Data :: Typeable List
Data, Typeable, (forall x. List -> Rep List x)
-> (forall x. Rep List x -> List) -> Generic List
forall x. Rep List x -> List
forall x. List -> Rep List x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep List x -> List
$cfrom :: forall x. List -> Rep List x
Generic)

instance FromJSON List where
    parseJSON :: Value -> Parser List
parseJSON (Object Object
o) =
        Object -> Parser ()
checkError Object
o
            Parser () -> Parser List -> Parser List
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Int -> Text -> Text -> Int -> Int -> Text -> User -> List
List (Int -> Text -> Text -> Int -> Int -> Text -> User -> List)
-> Parser Int
-> Parser (Text -> Text -> Int -> Int -> Text -> User -> List)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser Int
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"id"
            Parser (Text -> Text -> Int -> Int -> Text -> User -> List)
-> Parser Text
-> Parser (Text -> Int -> Int -> Text -> User -> List)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"name"
            Parser (Text -> Int -> Int -> Text -> User -> List)
-> Parser Text -> Parser (Int -> Int -> Text -> User -> List)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"full_name"
            Parser (Int -> Int -> Text -> User -> List)
-> Parser Int -> Parser (Int -> Text -> User -> List)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Int
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"member_count"
            Parser (Int -> Text -> User -> List)
-> Parser Int -> Parser (Text -> User -> List)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Int
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"subscriber_count"
            Parser (Text -> User -> List)
-> Parser Text -> Parser (User -> List)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"mode"
            Parser (User -> List) -> Parser User -> Parser List
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser User
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"user"
    parseJSON Value
v = String -> Parser List
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> Parser List) -> String -> Parser List
forall a b. (a -> b) -> a -> b
$ String
"couldn't parse List from: " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Value -> String
forall a. Show a => a -> String
show Value
v

instance ToJSON List where
    toJSON :: List -> Value
toJSON List {Int
Text
User
listUser :: User
listMode :: Text
listSubscriberCount :: Int
listMemberCount :: Int
listFullName :: Text
listName :: Text
listId :: Int
listUser :: List -> User
listMode :: List -> Text
listSubscriberCount :: List -> Int
listMemberCount :: List -> Int
listFullName :: List -> Text
listName :: List -> Text
listId :: List -> Int
..} =
        [Pair] -> Value
object
            [ Key
"id" Key -> Int -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Int
listId
            , Key
"name" Key -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Text
listName
            , Key
"full_name" Key -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Text
listFullName
            , Key
"member_count" Key -> Int -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Int
listMemberCount
            , Key
"subscriber_count" Key -> Int -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Int
listSubscriberCount
            , Key
"mode" Key -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Text
listMode
            , Key
"user" Key -> User -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= User
listUser
            ]

-- | Hashtag entity.
-- See <https://dev.twitter.com/docs/platform-objects/entities#obj-hashtags>.
data HashTagEntity = HashTagEntity
    { -- | The Hashtag text
      HashTagEntity -> Text
hashTagText :: Text
    }
    deriving (Int -> HashTagEntity -> ShowS
[HashTagEntity] -> ShowS
HashTagEntity -> String
(Int -> HashTagEntity -> ShowS)
-> (HashTagEntity -> String)
-> ([HashTagEntity] -> ShowS)
-> Show HashTagEntity
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [HashTagEntity] -> ShowS
$cshowList :: [HashTagEntity] -> ShowS
show :: HashTagEntity -> String
$cshow :: HashTagEntity -> String
showsPrec :: Int -> HashTagEntity -> ShowS
$cshowsPrec :: Int -> HashTagEntity -> ShowS
Show, HashTagEntity -> HashTagEntity -> Bool
(HashTagEntity -> HashTagEntity -> Bool)
-> (HashTagEntity -> HashTagEntity -> Bool) -> Eq HashTagEntity
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: HashTagEntity -> HashTagEntity -> Bool
$c/= :: HashTagEntity -> HashTagEntity -> Bool
== :: HashTagEntity -> HashTagEntity -> Bool
$c== :: HashTagEntity -> HashTagEntity -> Bool
Eq, Typeable HashTagEntity
DataType
Constr
Typeable HashTagEntity
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> HashTagEntity -> c HashTagEntity)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c HashTagEntity)
-> (HashTagEntity -> Constr)
-> (HashTagEntity -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c HashTagEntity))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e))
    -> Maybe (c HashTagEntity))
-> ((forall b. Data b => b -> b) -> HashTagEntity -> HashTagEntity)
-> (forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> HashTagEntity -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> HashTagEntity -> r)
-> (forall u. (forall d. Data d => d -> u) -> HashTagEntity -> [u])
-> (forall u.
    Int -> (forall d. Data d => d -> u) -> HashTagEntity -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> HashTagEntity -> m HashTagEntity)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> HashTagEntity -> m HashTagEntity)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> HashTagEntity -> m HashTagEntity)
-> Data HashTagEntity
HashTagEntity -> DataType
HashTagEntity -> Constr
(forall b. Data b => b -> b) -> HashTagEntity -> HashTagEntity
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> HashTagEntity -> c HashTagEntity
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c HashTagEntity
forall a.
Typeable a
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> HashTagEntity -> u
forall u. (forall d. Data d => d -> u) -> HashTagEntity -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> HashTagEntity -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> HashTagEntity -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> HashTagEntity -> m HashTagEntity
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> HashTagEntity -> m HashTagEntity
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c HashTagEntity
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> HashTagEntity -> c HashTagEntity
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c HashTagEntity)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c HashTagEntity)
$cHashTagEntity :: Constr
$tHashTagEntity :: DataType
gmapMo :: (forall d. Data d => d -> m d) -> HashTagEntity -> m HashTagEntity
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> HashTagEntity -> m HashTagEntity
gmapMp :: (forall d. Data d => d -> m d) -> HashTagEntity -> m HashTagEntity
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> HashTagEntity -> m HashTagEntity
gmapM :: (forall d. Data d => d -> m d) -> HashTagEntity -> m HashTagEntity
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> HashTagEntity -> m HashTagEntity
gmapQi :: Int -> (forall d. Data d => d -> u) -> HashTagEntity -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> HashTagEntity -> u
gmapQ :: (forall d. Data d => d -> u) -> HashTagEntity -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> HashTagEntity -> [u]
gmapQr :: (r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> HashTagEntity -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> HashTagEntity -> r
gmapQl :: (r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> HashTagEntity -> r
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> HashTagEntity -> r
gmapT :: (forall b. Data b => b -> b) -> HashTagEntity -> HashTagEntity
$cgmapT :: (forall b. Data b => b -> b) -> HashTagEntity -> HashTagEntity
dataCast2 :: (forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c HashTagEntity)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c HashTagEntity)
dataCast1 :: (forall d. Data d => c (t d)) -> Maybe (c HashTagEntity)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c HashTagEntity)
dataTypeOf :: HashTagEntity -> DataType
$cdataTypeOf :: HashTagEntity -> DataType
toConstr :: HashTagEntity -> Constr
$ctoConstr :: HashTagEntity -> Constr
gunfold :: (forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c HashTagEntity
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c HashTagEntity
gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> HashTagEntity -> c HashTagEntity
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> HashTagEntity -> c HashTagEntity
$cp1Data :: Typeable HashTagEntity
Data, Typeable, (forall x. HashTagEntity -> Rep HashTagEntity x)
-> (forall x. Rep HashTagEntity x -> HashTagEntity)
-> Generic HashTagEntity
forall x. Rep HashTagEntity x -> HashTagEntity
forall x. HashTagEntity -> Rep HashTagEntity x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep HashTagEntity x -> HashTagEntity
$cfrom :: forall x. HashTagEntity -> Rep HashTagEntity x
Generic)

instance FromJSON HashTagEntity where
    parseJSON :: Value -> Parser HashTagEntity
parseJSON (Object Object
o) =
        Text -> HashTagEntity
HashTagEntity (Text -> HashTagEntity) -> Parser Text -> Parser HashTagEntity
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"text"
    parseJSON Value
v = String -> Parser HashTagEntity
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> Parser HashTagEntity) -> String -> Parser HashTagEntity
forall a b. (a -> b) -> a -> b
$ String
"couldn't parse hashtag entity from: " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Value -> String
forall a. Show a => a -> String
show Value
v

instance ToJSON HashTagEntity where
    toJSON :: HashTagEntity -> Value
toJSON HashTagEntity {Text
hashTagText :: Text
hashTagText :: HashTagEntity -> Text
..} = [Pair] -> Value
object [Key
"text" Key -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Text
hashTagText]

-- | User mention entity.
-- See <https://dev.twitter.com/docs/platform-objects/entities#obj-usermention>.
data UserEntity = UserEntity
    { UserEntity -> StatusId
userEntityUserId :: UserId
    , UserEntity -> Text
userEntityUserName :: UserName
    , UserEntity -> Text
userEntityUserScreenName :: Text
    }
    deriving (Int -> UserEntity -> ShowS
[UserEntity] -> ShowS
UserEntity -> String
(Int -> UserEntity -> ShowS)
-> (UserEntity -> String)
-> ([UserEntity] -> ShowS)
-> Show UserEntity
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [UserEntity] -> ShowS
$cshowList :: [UserEntity] -> ShowS
show :: UserEntity -> String
$cshow :: UserEntity -> String
showsPrec :: Int -> UserEntity -> ShowS
$cshowsPrec :: Int -> UserEntity -> ShowS
Show, UserEntity -> UserEntity -> Bool
(UserEntity -> UserEntity -> Bool)
-> (UserEntity -> UserEntity -> Bool) -> Eq UserEntity
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: UserEntity -> UserEntity -> Bool
$c/= :: UserEntity -> UserEntity -> Bool
== :: UserEntity -> UserEntity -> Bool
$c== :: UserEntity -> UserEntity -> Bool
Eq, Typeable UserEntity
DataType
Constr
Typeable UserEntity
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> UserEntity -> c UserEntity)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c UserEntity)
-> (UserEntity -> Constr)
-> (UserEntity -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c UserEntity))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e))
    -> Maybe (c UserEntity))
-> ((forall b. Data b => b -> b) -> UserEntity -> UserEntity)
-> (forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> UserEntity -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> UserEntity -> r)
-> (forall u. (forall d. Data d => d -> u) -> UserEntity -> [u])
-> (forall u.
    Int -> (forall d. Data d => d -> u) -> UserEntity -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> UserEntity -> m UserEntity)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> UserEntity -> m UserEntity)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> UserEntity -> m UserEntity)
-> Data UserEntity
UserEntity -> DataType
UserEntity -> Constr
(forall b. Data b => b -> b) -> UserEntity -> UserEntity
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> UserEntity -> c UserEntity
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c UserEntity
forall a.
Typeable a
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> UserEntity -> u
forall u. (forall d. Data d => d -> u) -> UserEntity -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> UserEntity -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> UserEntity -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> UserEntity -> m UserEntity
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> UserEntity -> m UserEntity
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c UserEntity
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> UserEntity -> c UserEntity
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c UserEntity)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c UserEntity)
$cUserEntity :: Constr
$tUserEntity :: DataType
gmapMo :: (forall d. Data d => d -> m d) -> UserEntity -> m UserEntity
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> UserEntity -> m UserEntity
gmapMp :: (forall d. Data d => d -> m d) -> UserEntity -> m UserEntity
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> UserEntity -> m UserEntity
gmapM :: (forall d. Data d => d -> m d) -> UserEntity -> m UserEntity
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> UserEntity -> m UserEntity
gmapQi :: Int -> (forall d. Data d => d -> u) -> UserEntity -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> UserEntity -> u
gmapQ :: (forall d. Data d => d -> u) -> UserEntity -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> UserEntity -> [u]
gmapQr :: (r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> UserEntity -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> UserEntity -> r
gmapQl :: (r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> UserEntity -> r
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> UserEntity -> r
gmapT :: (forall b. Data b => b -> b) -> UserEntity -> UserEntity
$cgmapT :: (forall b. Data b => b -> b) -> UserEntity -> UserEntity
dataCast2 :: (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c UserEntity)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c UserEntity)
dataCast1 :: (forall d. Data d => c (t d)) -> Maybe (c UserEntity)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c UserEntity)
dataTypeOf :: UserEntity -> DataType
$cdataTypeOf :: UserEntity -> DataType
toConstr :: UserEntity -> Constr
$ctoConstr :: UserEntity -> Constr
gunfold :: (forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c UserEntity
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c UserEntity
gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> UserEntity -> c UserEntity
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> UserEntity -> c UserEntity
$cp1Data :: Typeable UserEntity
Data, Typeable, (forall x. UserEntity -> Rep UserEntity x)
-> (forall x. Rep UserEntity x -> UserEntity) -> Generic UserEntity
forall x. Rep UserEntity x -> UserEntity
forall x. UserEntity -> Rep UserEntity x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep UserEntity x -> UserEntity
$cfrom :: forall x. UserEntity -> Rep UserEntity x
Generic)

instance FromJSON UserEntity where
    parseJSON :: Value -> Parser UserEntity
parseJSON (Object Object
o) =
        StatusId -> Text -> Text -> UserEntity
UserEntity (StatusId -> Text -> Text -> UserEntity)
-> Parser StatusId -> Parser (Text -> Text -> UserEntity)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser StatusId
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"id"
            Parser (Text -> Text -> UserEntity)
-> Parser Text -> Parser (Text -> UserEntity)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"name"
            Parser (Text -> UserEntity) -> Parser Text -> Parser UserEntity
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"screen_name"
    parseJSON Value
v = String -> Parser UserEntity
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> Parser UserEntity) -> String -> Parser UserEntity
forall a b. (a -> b) -> a -> b
$ String
"couldn't parse user entity from: " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Value -> String
forall a. Show a => a -> String
show Value
v

instance ToJSON UserEntity where
    toJSON :: UserEntity -> Value
toJSON UserEntity {StatusId
Text
userEntityUserScreenName :: Text
userEntityUserName :: Text
userEntityUserId :: StatusId
userEntityUserScreenName :: UserEntity -> Text
userEntityUserName :: UserEntity -> Text
userEntityUserId :: UserEntity -> StatusId
..} =
        [Pair] -> Value
object
            [ Key
"id" Key -> StatusId -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= StatusId
userEntityUserId
            , Key
"name" Key -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Text
userEntityUserName
            , Key
"screen_name" Key -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Text
userEntityUserScreenName
            ]

-- | URL entity.
-- See <https://dev.twitter.com/docs/platform-objects/entities#obj-url>.
data URLEntity = URLEntity
    { -- | The URL that was extracted
      URLEntity -> Text
ueURL :: URIString
    , -- | The fully resolved URL (only for t.co links)
      URLEntity -> Text
ueExpanded :: URIString
    , -- | Not a URL but a string to display instead of the URL (only for t.co links)
      URLEntity -> Text
ueDisplay :: Text
    }
    deriving (Int -> URLEntity -> ShowS
[URLEntity] -> ShowS
URLEntity -> String
(Int -> URLEntity -> ShowS)
-> (URLEntity -> String)
-> ([URLEntity] -> ShowS)
-> Show URLEntity
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [URLEntity] -> ShowS
$cshowList :: [URLEntity] -> ShowS
show :: URLEntity -> String
$cshow :: URLEntity -> String
showsPrec :: Int -> URLEntity -> ShowS
$cshowsPrec :: Int -> URLEntity -> ShowS
Show, URLEntity -> URLEntity -> Bool
(URLEntity -> URLEntity -> Bool)
-> (URLEntity -> URLEntity -> Bool) -> Eq URLEntity
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: URLEntity -> URLEntity -> Bool
$c/= :: URLEntity -> URLEntity -> Bool
== :: URLEntity -> URLEntity -> Bool
$c== :: URLEntity -> URLEntity -> Bool
Eq, Typeable URLEntity
DataType
Constr
Typeable URLEntity
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> URLEntity -> c URLEntity)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c URLEntity)
-> (URLEntity -> Constr)
-> (URLEntity -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c URLEntity))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c URLEntity))
-> ((forall b. Data b => b -> b) -> URLEntity -> URLEntity)
-> (forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> URLEntity -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> URLEntity -> r)
-> (forall u. (forall d. Data d => d -> u) -> URLEntity -> [u])
-> (forall u.
    Int -> (forall d. Data d => d -> u) -> URLEntity -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> URLEntity -> m URLEntity)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> URLEntity -> m URLEntity)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> URLEntity -> m URLEntity)
-> Data URLEntity
URLEntity -> DataType
URLEntity -> Constr
(forall b. Data b => b -> b) -> URLEntity -> URLEntity
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> URLEntity -> c URLEntity
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c URLEntity
forall a.
Typeable a
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> URLEntity -> u
forall u. (forall d. Data d => d -> u) -> URLEntity -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> URLEntity -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> URLEntity -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> URLEntity -> m URLEntity
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> URLEntity -> m URLEntity
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c URLEntity
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> URLEntity -> c URLEntity
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c URLEntity)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c URLEntity)
$cURLEntity :: Constr
$tURLEntity :: DataType
gmapMo :: (forall d. Data d => d -> m d) -> URLEntity -> m URLEntity
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> URLEntity -> m URLEntity
gmapMp :: (forall d. Data d => d -> m d) -> URLEntity -> m URLEntity
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> URLEntity -> m URLEntity
gmapM :: (forall d. Data d => d -> m d) -> URLEntity -> m URLEntity
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> URLEntity -> m URLEntity
gmapQi :: Int -> (forall d. Data d => d -> u) -> URLEntity -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> URLEntity -> u
gmapQ :: (forall d. Data d => d -> u) -> URLEntity -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> URLEntity -> [u]
gmapQr :: (r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> URLEntity -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> URLEntity -> r
gmapQl :: (r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> URLEntity -> r
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> URLEntity -> r
gmapT :: (forall b. Data b => b -> b) -> URLEntity -> URLEntity
$cgmapT :: (forall b. Data b => b -> b) -> URLEntity -> URLEntity
dataCast2 :: (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c URLEntity)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c URLEntity)
dataCast1 :: (forall d. Data d => c (t d)) -> Maybe (c URLEntity)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c URLEntity)
dataTypeOf :: URLEntity -> DataType
$cdataTypeOf :: URLEntity -> DataType
toConstr :: URLEntity -> Constr
$ctoConstr :: URLEntity -> Constr
gunfold :: (forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c URLEntity
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c URLEntity
gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> URLEntity -> c URLEntity
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> URLEntity -> c URLEntity
$cp1Data :: Typeable URLEntity
Data, Typeable, (forall x. URLEntity -> Rep URLEntity x)
-> (forall x. Rep URLEntity x -> URLEntity) -> Generic URLEntity
forall x. Rep URLEntity x -> URLEntity
forall x. URLEntity -> Rep URLEntity x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep URLEntity x -> URLEntity
$cfrom :: forall x. URLEntity -> Rep URLEntity x
Generic)

instance FromJSON URLEntity where
    parseJSON :: Value -> Parser URLEntity
parseJSON (Object Object
o) =
        Text -> Text -> Text -> URLEntity
URLEntity (Text -> Text -> Text -> URLEntity)
-> Parser Text -> Parser (Text -> Text -> URLEntity)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"url"
            Parser (Text -> Text -> URLEntity)
-> Parser Text -> Parser (Text -> URLEntity)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"expanded_url"
            Parser (Text -> URLEntity) -> Parser Text -> Parser URLEntity
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"display_url"
    parseJSON Value
v = String -> Parser URLEntity
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> Parser URLEntity) -> String -> Parser URLEntity
forall a b. (a -> b) -> a -> b
$ String
"couldn't parse url entity from: " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Value -> String
forall a. Show a => a -> String
show Value
v

instance ToJSON URLEntity where
    toJSON :: URLEntity -> Value
toJSON URLEntity {Text
ueDisplay :: Text
ueExpanded :: Text
ueURL :: Text
ueDisplay :: URLEntity -> Text
ueExpanded :: URLEntity -> Text
ueURL :: URLEntity -> Text
..} =
        [Pair] -> Value
object
            [ Key
"url" Key -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Text
ueURL
            , Key
"expanded_url" Key -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Text
ueExpanded
            , Key
"display_url" Key -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Text
ueDisplay
            ]

data MediaEntity = MediaEntity
    { MediaEntity -> Text
meType :: Text
    , MediaEntity -> StatusId
meId :: StatusId
    , MediaEntity -> HashMap Text MediaSize
meSizes :: HashMap Text MediaSize
    , MediaEntity -> Text
meMediaURL :: URIString
    , MediaEntity -> Text
meMediaURLHttps :: URIString
    , MediaEntity -> URLEntity
meURL :: URLEntity
    }
    deriving (Int -> MediaEntity -> ShowS
[MediaEntity] -> ShowS
MediaEntity -> String
(Int -> MediaEntity -> ShowS)
-> (MediaEntity -> String)
-> ([MediaEntity] -> ShowS)
-> Show MediaEntity
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [MediaEntity] -> ShowS
$cshowList :: [MediaEntity] -> ShowS
show :: MediaEntity -> String
$cshow :: MediaEntity -> String
showsPrec :: Int -> MediaEntity -> ShowS
$cshowsPrec :: Int -> MediaEntity -> ShowS
Show, MediaEntity -> MediaEntity -> Bool
(MediaEntity -> MediaEntity -> Bool)
-> (MediaEntity -> MediaEntity -> Bool) -> Eq MediaEntity
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: MediaEntity -> MediaEntity -> Bool
$c/= :: MediaEntity -> MediaEntity -> Bool
== :: MediaEntity -> MediaEntity -> Bool
$c== :: MediaEntity -> MediaEntity -> Bool
Eq, Typeable MediaEntity
DataType
Constr
Typeable MediaEntity
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> MediaEntity -> c MediaEntity)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c MediaEntity)
-> (MediaEntity -> Constr)
-> (MediaEntity -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c MediaEntity))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e))
    -> Maybe (c MediaEntity))
-> ((forall b. Data b => b -> b) -> MediaEntity -> MediaEntity)
-> (forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> MediaEntity -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> MediaEntity -> r)
-> (forall u. (forall d. Data d => d -> u) -> MediaEntity -> [u])
-> (forall u.
    Int -> (forall d. Data d => d -> u) -> MediaEntity -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> MediaEntity -> m MediaEntity)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> MediaEntity -> m MediaEntity)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> MediaEntity -> m MediaEntity)
-> Data MediaEntity
MediaEntity -> DataType
MediaEntity -> Constr
(forall b. Data b => b -> b) -> MediaEntity -> MediaEntity
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> MediaEntity -> c MediaEntity
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c MediaEntity
forall a.
Typeable a
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> MediaEntity -> u
forall u. (forall d. Data d => d -> u) -> MediaEntity -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> MediaEntity -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> MediaEntity -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> MediaEntity -> m MediaEntity
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> MediaEntity -> m MediaEntity
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c MediaEntity
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> MediaEntity -> c MediaEntity
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c MediaEntity)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c MediaEntity)
$cMediaEntity :: Constr
$tMediaEntity :: DataType
gmapMo :: (forall d. Data d => d -> m d) -> MediaEntity -> m MediaEntity
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> MediaEntity -> m MediaEntity
gmapMp :: (forall d. Data d => d -> m d) -> MediaEntity -> m MediaEntity
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> MediaEntity -> m MediaEntity
gmapM :: (forall d. Data d => d -> m d) -> MediaEntity -> m MediaEntity
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> MediaEntity -> m MediaEntity
gmapQi :: Int -> (forall d. Data d => d -> u) -> MediaEntity -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> MediaEntity -> u
gmapQ :: (forall d. Data d => d -> u) -> MediaEntity -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> MediaEntity -> [u]
gmapQr :: (r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> MediaEntity -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> MediaEntity -> r
gmapQl :: (r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> MediaEntity -> r
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> MediaEntity -> r
gmapT :: (forall b. Data b => b -> b) -> MediaEntity -> MediaEntity
$cgmapT :: (forall b. Data b => b -> b) -> MediaEntity -> MediaEntity
dataCast2 :: (forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c MediaEntity)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c MediaEntity)
dataCast1 :: (forall d. Data d => c (t d)) -> Maybe (c MediaEntity)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c MediaEntity)
dataTypeOf :: MediaEntity -> DataType
$cdataTypeOf :: MediaEntity -> DataType
toConstr :: MediaEntity -> Constr
$ctoConstr :: MediaEntity -> Constr
gunfold :: (forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c MediaEntity
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c MediaEntity
gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> MediaEntity -> c MediaEntity
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> MediaEntity -> c MediaEntity
$cp1Data :: Typeable MediaEntity
Data, Typeable, (forall x. MediaEntity -> Rep MediaEntity x)
-> (forall x. Rep MediaEntity x -> MediaEntity)
-> Generic MediaEntity
forall x. Rep MediaEntity x -> MediaEntity
forall x. MediaEntity -> Rep MediaEntity x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep MediaEntity x -> MediaEntity
$cfrom :: forall x. MediaEntity -> Rep MediaEntity x
Generic)

instance FromJSON MediaEntity where
    parseJSON :: Value -> Parser MediaEntity
parseJSON v :: Value
v@(Object Object
o) =
        Text
-> StatusId
-> HashMap Text MediaSize
-> Text
-> Text
-> URLEntity
-> MediaEntity
MediaEntity (Text
 -> StatusId
 -> HashMap Text MediaSize
 -> Text
 -> Text
 -> URLEntity
 -> MediaEntity)
-> Parser Text
-> Parser
     (StatusId
      -> HashMap Text MediaSize
      -> Text
      -> Text
      -> URLEntity
      -> MediaEntity)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"type"
            Parser
  (StatusId
   -> HashMap Text MediaSize
   -> Text
   -> Text
   -> URLEntity
   -> MediaEntity)
-> Parser StatusId
-> Parser
     (HashMap Text MediaSize
      -> Text -> Text -> URLEntity -> MediaEntity)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser StatusId
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"id"
            Parser
  (HashMap Text MediaSize
   -> Text -> Text -> URLEntity -> MediaEntity)
-> Parser (HashMap Text MediaSize)
-> Parser (Text -> Text -> URLEntity -> MediaEntity)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (HashMap Text MediaSize)
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"sizes"
            Parser (Text -> Text -> URLEntity -> MediaEntity)
-> Parser Text -> Parser (Text -> URLEntity -> MediaEntity)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"media_url"
            Parser (Text -> URLEntity -> MediaEntity)
-> Parser Text -> Parser (URLEntity -> MediaEntity)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"media_url_https"
            Parser (URLEntity -> MediaEntity)
-> Parser URLEntity -> Parser MediaEntity
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Value -> Parser URLEntity
forall a. FromJSON a => Value -> Parser a
parseJSON Value
v
    parseJSON Value
v = String -> Parser MediaEntity
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> Parser MediaEntity) -> String -> Parser MediaEntity
forall a b. (a -> b) -> a -> b
$ String
"couldn't parse media entity from: " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Value -> String
forall a. Show a => a -> String
show Value
v

instance ToJSON MediaEntity where
    toJSON :: MediaEntity -> Value
toJSON MediaEntity {StatusId
Text
HashMap Text MediaSize
URLEntity
meURL :: URLEntity
meMediaURLHttps :: Text
meMediaURL :: Text
meSizes :: HashMap Text MediaSize
meId :: StatusId
meType :: Text
meURL :: MediaEntity -> URLEntity
meMediaURLHttps :: MediaEntity -> Text
meMediaURL :: MediaEntity -> Text
meSizes :: MediaEntity -> HashMap Text MediaSize
meId :: MediaEntity -> StatusId
meType :: MediaEntity -> Text
..} =
        [Pair] -> Value
object
            [ Key
"type" Key -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Text
meType
            , Key
"id" Key -> StatusId -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= StatusId
meId
            , Key
"sizes" Key -> HashMap Text MediaSize -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= HashMap Text MediaSize
meSizes
            , Key
"media_url" Key -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Text
meMediaURL
            , Key
"media_url_https" Key -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Text
meMediaURLHttps
            , Key
"url" Key -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= URLEntity -> Text
ueURL URLEntity
meURL
            , Key
"expanded_url" Key -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= URLEntity -> Text
ueExpanded URLEntity
meURL
            , Key
"display_url" Key -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= URLEntity -> Text
ueDisplay URLEntity
meURL
            ]

-- | Size entity.
-- See <https://dev.twitter.com/docs/platform-objects/entities#obj-size>.
data MediaSize = MediaSize
    { MediaSize -> Int
msWidth :: Int
    , MediaSize -> Int
msHeight :: Int
    , MediaSize -> Text
msResize :: Text
    }
    deriving (Int -> MediaSize -> ShowS
[MediaSize] -> ShowS
MediaSize -> String
(Int -> MediaSize -> ShowS)
-> (MediaSize -> String)
-> ([MediaSize] -> ShowS)
-> Show MediaSize
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [MediaSize] -> ShowS
$cshowList :: [MediaSize] -> ShowS
show :: MediaSize -> String
$cshow :: MediaSize -> String
showsPrec :: Int -> MediaSize -> ShowS
$cshowsPrec :: Int -> MediaSize -> ShowS
Show, MediaSize -> MediaSize -> Bool
(MediaSize -> MediaSize -> Bool)
-> (MediaSize -> MediaSize -> Bool) -> Eq MediaSize
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: MediaSize -> MediaSize -> Bool
$c/= :: MediaSize -> MediaSize -> Bool
== :: MediaSize -> MediaSize -> Bool
$c== :: MediaSize -> MediaSize -> Bool
Eq, Typeable MediaSize
DataType
Constr
Typeable MediaSize
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> MediaSize -> c MediaSize)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c MediaSize)
-> (MediaSize -> Constr)
-> (MediaSize -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c MediaSize))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c MediaSize))
-> ((forall b. Data b => b -> b) -> MediaSize -> MediaSize)
-> (forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> MediaSize -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> MediaSize -> r)
-> (forall u. (forall d. Data d => d -> u) -> MediaSize -> [u])
-> (forall u.
    Int -> (forall d. Data d => d -> u) -> MediaSize -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> MediaSize -> m MediaSize)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> MediaSize -> m MediaSize)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> MediaSize -> m MediaSize)
-> Data MediaSize
MediaSize -> DataType
MediaSize -> Constr
(forall b. Data b => b -> b) -> MediaSize -> MediaSize
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> MediaSize -> c MediaSize
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c MediaSize
forall a.
Typeable a
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> MediaSize -> u
forall u. (forall d. Data d => d -> u) -> MediaSize -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> MediaSize -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> MediaSize -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> MediaSize -> m MediaSize
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> MediaSize -> m MediaSize
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c MediaSize
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> MediaSize -> c MediaSize
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c MediaSize)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c MediaSize)
$cMediaSize :: Constr
$tMediaSize :: DataType
gmapMo :: (forall d. Data d => d -> m d) -> MediaSize -> m MediaSize
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> MediaSize -> m MediaSize
gmapMp :: (forall d. Data d => d -> m d) -> MediaSize -> m MediaSize
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> MediaSize -> m MediaSize
gmapM :: (forall d. Data d => d -> m d) -> MediaSize -> m MediaSize
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> MediaSize -> m MediaSize
gmapQi :: Int -> (forall d. Data d => d -> u) -> MediaSize -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> MediaSize -> u
gmapQ :: (forall d. Data d => d -> u) -> MediaSize -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> MediaSize -> [u]
gmapQr :: (r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> MediaSize -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> MediaSize -> r
gmapQl :: (r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> MediaSize -> r
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> MediaSize -> r
gmapT :: (forall b. Data b => b -> b) -> MediaSize -> MediaSize
$cgmapT :: (forall b. Data b => b -> b) -> MediaSize -> MediaSize
dataCast2 :: (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c MediaSize)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c MediaSize)
dataCast1 :: (forall d. Data d => c (t d)) -> Maybe (c MediaSize)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c MediaSize)
dataTypeOf :: MediaSize -> DataType
$cdataTypeOf :: MediaSize -> DataType
toConstr :: MediaSize -> Constr
$ctoConstr :: MediaSize -> Constr
gunfold :: (forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c MediaSize
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c MediaSize
gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> MediaSize -> c MediaSize
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> MediaSize -> c MediaSize
$cp1Data :: Typeable MediaSize
Data, Typeable, (forall x. MediaSize -> Rep MediaSize x)
-> (forall x. Rep MediaSize x -> MediaSize) -> Generic MediaSize
forall x. Rep MediaSize x -> MediaSize
forall x. MediaSize -> Rep MediaSize x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep MediaSize x -> MediaSize
$cfrom :: forall x. MediaSize -> Rep MediaSize x
Generic)

instance FromJSON MediaSize where
    parseJSON :: Value -> Parser MediaSize
parseJSON (Object Object
o) =
        Int -> Int -> Text -> MediaSize
MediaSize (Int -> Int -> Text -> MediaSize)
-> Parser Int -> Parser (Int -> Text -> MediaSize)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser Int
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"w"
            Parser (Int -> Text -> MediaSize)
-> Parser Int -> Parser (Text -> MediaSize)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Int
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"h"
            Parser (Text -> MediaSize) -> Parser Text -> Parser MediaSize
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"resize"
    parseJSON Value
v = String -> Parser MediaSize
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> Parser MediaSize) -> String -> Parser MediaSize
forall a b. (a -> b) -> a -> b
$ String
"couldn't parse media size from: " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Value -> String
forall a. Show a => a -> String
show Value
v

instance ToJSON MediaSize where
    toJSON :: MediaSize -> Value
toJSON MediaSize {Int
Text
msResize :: Text
msHeight :: Int
msWidth :: Int
msResize :: MediaSize -> Text
msHeight :: MediaSize -> Int
msWidth :: MediaSize -> Int
..} =
        [Pair] -> Value
object
            [ Key
"w" Key -> Int -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Int
msWidth
            , Key
"h" Key -> Int -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Int
msHeight
            , Key
"resize" Key -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Text
msResize
            ]

data Coordinates = Coordinates
    { Coordinates -> [Double]
coordinates :: [Double]
    , Coordinates -> Text
coordinatesType :: Text
    }
    deriving (Int -> Coordinates -> ShowS
[Coordinates] -> ShowS
Coordinates -> String
(Int -> Coordinates -> ShowS)
-> (Coordinates -> String)
-> ([Coordinates] -> ShowS)
-> Show Coordinates
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Coordinates] -> ShowS
$cshowList :: [Coordinates] -> ShowS
show :: Coordinates -> String
$cshow :: Coordinates -> String
showsPrec :: Int -> Coordinates -> ShowS
$cshowsPrec :: Int -> Coordinates -> ShowS
Show, Coordinates -> Coordinates -> Bool
(Coordinates -> Coordinates -> Bool)
-> (Coordinates -> Coordinates -> Bool) -> Eq Coordinates
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Coordinates -> Coordinates -> Bool
$c/= :: Coordinates -> Coordinates -> Bool
== :: Coordinates -> Coordinates -> Bool
$c== :: Coordinates -> Coordinates -> Bool
Eq, Typeable Coordinates
DataType
Constr
Typeable Coordinates
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> Coordinates -> c Coordinates)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c Coordinates)
-> (Coordinates -> Constr)
-> (Coordinates -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c Coordinates))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e))
    -> Maybe (c Coordinates))
-> ((forall b. Data b => b -> b) -> Coordinates -> Coordinates)
-> (forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> Coordinates -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> Coordinates -> r)
-> (forall u. (forall d. Data d => d -> u) -> Coordinates -> [u])
-> (forall u.
    Int -> (forall d. Data d => d -> u) -> Coordinates -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> Coordinates -> m Coordinates)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> Coordinates -> m Coordinates)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> Coordinates -> m Coordinates)
-> Data Coordinates
Coordinates -> DataType
Coordinates -> Constr
(forall b. Data b => b -> b) -> Coordinates -> Coordinates
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Coordinates -> c Coordinates
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Coordinates
forall a.
Typeable a
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> Coordinates -> u
forall u. (forall d. Data d => d -> u) -> Coordinates -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> Coordinates -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> Coordinates -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Coordinates -> m Coordinates
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Coordinates -> m Coordinates
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Coordinates
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Coordinates -> c Coordinates
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c Coordinates)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c Coordinates)
$cCoordinates :: Constr
$tCoordinates :: DataType
gmapMo :: (forall d. Data d => d -> m d) -> Coordinates -> m Coordinates
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Coordinates -> m Coordinates
gmapMp :: (forall d. Data d => d -> m d) -> Coordinates -> m Coordinates
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Coordinates -> m Coordinates
gmapM :: (forall d. Data d => d -> m d) -> Coordinates -> m Coordinates
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Coordinates -> m Coordinates
gmapQi :: Int -> (forall d. Data d => d -> u) -> Coordinates -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> Coordinates -> u
gmapQ :: (forall d. Data d => d -> u) -> Coordinates -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> Coordinates -> [u]
gmapQr :: (r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> Coordinates -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> Coordinates -> r
gmapQl :: (r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> Coordinates -> r
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> Coordinates -> r
gmapT :: (forall b. Data b => b -> b) -> Coordinates -> Coordinates
$cgmapT :: (forall b. Data b => b -> b) -> Coordinates -> Coordinates
dataCast2 :: (forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c Coordinates)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c Coordinates)
dataCast1 :: (forall d. Data d => c (t d)) -> Maybe (c Coordinates)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c Coordinates)
dataTypeOf :: Coordinates -> DataType
$cdataTypeOf :: Coordinates -> DataType
toConstr :: Coordinates -> Constr
$ctoConstr :: Coordinates -> Constr
gunfold :: (forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Coordinates
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Coordinates
gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Coordinates -> c Coordinates
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Coordinates -> c Coordinates
$cp1Data :: Typeable Coordinates
Data, Typeable, (forall x. Coordinates -> Rep Coordinates x)
-> (forall x. Rep Coordinates x -> Coordinates)
-> Generic Coordinates
forall x. Rep Coordinates x -> Coordinates
forall x. Coordinates -> Rep Coordinates x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep Coordinates x -> Coordinates
$cfrom :: forall x. Coordinates -> Rep Coordinates x
Generic)

instance FromJSON Coordinates where
    parseJSON :: Value -> Parser Coordinates
parseJSON (Object Object
o) =
        [Double] -> Text -> Coordinates
Coordinates ([Double] -> Text -> Coordinates)
-> Parser [Double] -> Parser (Text -> Coordinates)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser [Double]
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"coordinates"
            Parser (Text -> Coordinates) -> Parser Text -> Parser Coordinates
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"type"
    parseJSON Value
v = String -> Parser Coordinates
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> Parser Coordinates) -> String -> Parser Coordinates
forall a b. (a -> b) -> a -> b
$ String
"couldn't parse coordinates from: " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Value -> String
forall a. Show a => a -> String
show Value
v

instance ToJSON Coordinates where
    toJSON :: Coordinates -> Value
toJSON Coordinates {[Double]
Text
coordinatesType :: Text
coordinates :: [Double]
coordinatesType :: Coordinates -> Text
coordinates :: Coordinates -> [Double]
..} =
        [Pair] -> Value
object
            [ Key
"coordinates" Key -> [Double] -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= [Double]
coordinates
            , Key
"type" Key -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Text
coordinatesType
            ]

-- | This type represents a place, named locations with corresponding geo coordinates.
-- See <https://dev.twitter.com/docs/platform-objects/places>.
data Place = Place
    { Place -> HashMap Text Text
placeAttributes :: HashMap Text Text
    , Place -> Maybe BoundingBox
placeBoundingBox :: Maybe BoundingBox
    , Place -> Text
placeCountry :: Text
    , Place -> Text
placeCountryCode :: Text
    , Place -> Text
placeFullName :: Text
    , Place -> Text
placeId :: Text
    , Place -> Text
placeName :: Text
    , Place -> Text
placeType :: Text
    , Place -> Text
placeURL :: Text
    }
    deriving (Int -> Place -> ShowS
[Place] -> ShowS
Place -> String
(Int -> Place -> ShowS)
-> (Place -> String) -> ([Place] -> ShowS) -> Show Place
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Place] -> ShowS
$cshowList :: [Place] -> ShowS
show :: Place -> String
$cshow :: Place -> String
showsPrec :: Int -> Place -> ShowS
$cshowsPrec :: Int -> Place -> ShowS
Show, Place -> Place -> Bool
(Place -> Place -> Bool) -> (Place -> Place -> Bool) -> Eq Place
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Place -> Place -> Bool
$c/= :: Place -> Place -> Bool
== :: Place -> Place -> Bool
$c== :: Place -> Place -> Bool
Eq, Typeable Place
DataType
Constr
Typeable Place
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> Place -> c Place)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c Place)
-> (Place -> Constr)
-> (Place -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c Place))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Place))
-> ((forall b. Data b => b -> b) -> Place -> Place)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Place -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Place -> r)
-> (forall u. (forall d. Data d => d -> u) -> Place -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> Place -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> Place -> m Place)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> Place -> m Place)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> Place -> m Place)
-> Data Place
Place -> DataType
Place -> Constr
(forall b. Data b => b -> b) -> Place -> Place
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Place -> c Place
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Place
forall a.
Typeable a
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> Place -> u
forall u. (forall d. Data d => d -> u) -> Place -> [u]
forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Place -> r
forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Place -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Place -> m Place
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Place -> m Place
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Place
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Place -> c Place
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c Place)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Place)
$cPlace :: Constr
$tPlace :: DataType
gmapMo :: (forall d. Data d => d -> m d) -> Place -> m Place
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Place -> m Place
gmapMp :: (forall d. Data d => d -> m d) -> Place -> m Place
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Place -> m Place
gmapM :: (forall d. Data d => d -> m d) -> Place -> m Place
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Place -> m Place
gmapQi :: Int -> (forall d. Data d => d -> u) -> Place -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> Place -> u
gmapQ :: (forall d. Data d => d -> u) -> Place -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> Place -> [u]
gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Place -> r
$cgmapQr :: forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Place -> r
gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Place -> r
$cgmapQl :: forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Place -> r
gmapT :: (forall b. Data b => b -> b) -> Place -> Place
$cgmapT :: (forall b. Data b => b -> b) -> Place -> Place
dataCast2 :: (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Place)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Place)
dataCast1 :: (forall d. Data d => c (t d)) -> Maybe (c Place)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c Place)
dataTypeOf :: Place -> DataType
$cdataTypeOf :: Place -> DataType
toConstr :: Place -> Constr
$ctoConstr :: Place -> Constr
gunfold :: (forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Place
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Place
gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Place -> c Place
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Place -> c Place
$cp1Data :: Typeable Place
Data, Typeable, (forall x. Place -> Rep Place x)
-> (forall x. Rep Place x -> Place) -> Generic Place
forall x. Rep Place x -> Place
forall x. Place -> Rep Place x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep Place x -> Place
$cfrom :: forall x. Place -> Rep Place x
Generic)

instance FromJSON Place where
    parseJSON :: Value -> Parser Place
parseJSON (Object Object
o) =
        HashMap Text Text
-> Maybe BoundingBox
-> Text
-> Text
-> Text
-> Text
-> Text
-> Text
-> Text
-> Place
Place (HashMap Text Text
 -> Maybe BoundingBox
 -> Text
 -> Text
 -> Text
 -> Text
 -> Text
 -> Text
 -> Text
 -> Place)
-> Parser (HashMap Text Text)
-> Parser
     (Maybe BoundingBox
      -> Text -> Text -> Text -> Text -> Text -> Text -> Text -> Place)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser (HashMap Text Text)
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"attributes"
            Parser
  (Maybe BoundingBox
   -> Text -> Text -> Text -> Text -> Text -> Text -> Text -> Place)
-> Parser (Maybe BoundingBox)
-> Parser
     (Text -> Text -> Text -> Text -> Text -> Text -> Text -> Place)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe BoundingBox)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"bounding_box"
            Parser
  (Text -> Text -> Text -> Text -> Text -> Text -> Text -> Place)
-> Parser Text
-> Parser (Text -> Text -> Text -> Text -> Text -> Text -> Place)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"country"
            Parser (Text -> Text -> Text -> Text -> Text -> Text -> Place)
-> Parser Text
-> Parser (Text -> Text -> Text -> Text -> Text -> Place)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"country_code"
            Parser (Text -> Text -> Text -> Text -> Text -> Place)
-> Parser Text -> Parser (Text -> Text -> Text -> Text -> Place)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"full_name"
            Parser (Text -> Text -> Text -> Text -> Place)
-> Parser Text -> Parser (Text -> Text -> Text -> Place)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"id"
            Parser (Text -> Text -> Text -> Place)
-> Parser Text -> Parser (Text -> Text -> Place)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"name"
            Parser (Text -> Text -> Place)
-> Parser Text -> Parser (Text -> Place)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"place_type"
            Parser (Text -> Place) -> Parser Text -> Parser Place
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"url"
    parseJSON Value
v = String -> Parser Place
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> Parser Place) -> String -> Parser Place
forall a b. (a -> b) -> a -> b
$ String
"couldn't parse place from: " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Value -> String
forall a. Show a => a -> String
show Value
v

instance ToJSON Place where
    toJSON :: Place -> Value
toJSON Place {Maybe BoundingBox
Text
HashMap Text Text
placeURL :: Text
placeType :: Text
placeName :: Text
placeId :: Text
placeFullName :: Text
placeCountryCode :: Text
placeCountry :: Text
placeBoundingBox :: Maybe BoundingBox
placeAttributes :: HashMap Text Text
placeURL :: Place -> Text
placeType :: Place -> Text
placeName :: Place -> Text
placeId :: Place -> Text
placeFullName :: Place -> Text
placeCountryCode :: Place -> Text
placeCountry :: Place -> Text
placeBoundingBox :: Place -> Maybe BoundingBox
placeAttributes :: Place -> HashMap Text Text
..} =
        [Pair] -> Value
object
            [ Key
"attributes" Key -> HashMap Text Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= HashMap Text Text
placeAttributes
            , Key
"bounding_box" Key -> Maybe BoundingBox -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe BoundingBox
placeBoundingBox
            , Key
"country" Key -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Text
placeCountry
            , Key
"country_code" Key -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Text
placeCountryCode
            , Key
"full_name" Key -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Text
placeFullName
            , Key
"id" Key -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Text
placeId
            , Key
"name" Key -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Text
placeName
            , Key
"place_type" Key -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Text
placeType
            , Key
"url" Key -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Text
placeURL
            ]

-- | A bounding box of coordinates which encloses the place.
-- See <https://dev.twitter.com/docs/platform-objects/places#obj-boundingbox>.
data BoundingBox = BoundingBox
    { BoundingBox -> [[[Double]]]
boundingBoxCoordinates :: [[[Double]]]
    , BoundingBox -> Text
boundingBoxType :: Text
    }
    deriving (Int -> BoundingBox -> ShowS
[BoundingBox] -> ShowS
BoundingBox -> String
(Int -> BoundingBox -> ShowS)
-> (BoundingBox -> String)
-> ([BoundingBox] -> ShowS)
-> Show BoundingBox
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [BoundingBox] -> ShowS
$cshowList :: [BoundingBox] -> ShowS
show :: BoundingBox -> String
$cshow :: BoundingBox -> String
showsPrec :: Int -> BoundingBox -> ShowS
$cshowsPrec :: Int -> BoundingBox -> ShowS
Show, BoundingBox -> BoundingBox -> Bool
(BoundingBox -> BoundingBox -> Bool)
-> (BoundingBox -> BoundingBox -> Bool) -> Eq BoundingBox
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: BoundingBox -> BoundingBox -> Bool
$c/= :: BoundingBox -> BoundingBox -> Bool
== :: BoundingBox -> BoundingBox -> Bool
$c== :: BoundingBox -> BoundingBox -> Bool
Eq, Typeable BoundingBox
DataType
Constr
Typeable BoundingBox
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> BoundingBox -> c BoundingBox)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c BoundingBox)
-> (BoundingBox -> Constr)
-> (BoundingBox -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c BoundingBox))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e))
    -> Maybe (c BoundingBox))
-> ((forall b. Data b => b -> b) -> BoundingBox -> BoundingBox)
-> (forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> BoundingBox -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> BoundingBox -> r)
-> (forall u. (forall d. Data d => d -> u) -> BoundingBox -> [u])
-> (forall u.
    Int -> (forall d. Data d => d -> u) -> BoundingBox -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> BoundingBox -> m BoundingBox)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> BoundingBox -> m BoundingBox)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> BoundingBox -> m BoundingBox)
-> Data BoundingBox
BoundingBox -> DataType
BoundingBox -> Constr
(forall b. Data b => b -> b) -> BoundingBox -> BoundingBox
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> BoundingBox -> c BoundingBox
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c BoundingBox
forall a.
Typeable a
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> BoundingBox -> u
forall u. (forall d. Data d => d -> u) -> BoundingBox -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> BoundingBox -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> BoundingBox -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> BoundingBox -> m BoundingBox
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> BoundingBox -> m BoundingBox
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c BoundingBox
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> BoundingBox -> c BoundingBox
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c BoundingBox)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c BoundingBox)
$cBoundingBox :: Constr
$tBoundingBox :: DataType
gmapMo :: (forall d. Data d => d -> m d) -> BoundingBox -> m BoundingBox
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> BoundingBox -> m BoundingBox
gmapMp :: (forall d. Data d => d -> m d) -> BoundingBox -> m BoundingBox
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> BoundingBox -> m BoundingBox
gmapM :: (forall d. Data d => d -> m d) -> BoundingBox -> m BoundingBox
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> BoundingBox -> m BoundingBox
gmapQi :: Int -> (forall d. Data d => d -> u) -> BoundingBox -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> BoundingBox -> u
gmapQ :: (forall d. Data d => d -> u) -> BoundingBox -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> BoundingBox -> [u]
gmapQr :: (r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> BoundingBox -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> BoundingBox -> r
gmapQl :: (r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> BoundingBox -> r
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> BoundingBox -> r
gmapT :: (forall b. Data b => b -> b) -> BoundingBox -> BoundingBox
$cgmapT :: (forall b. Data b => b -> b) -> BoundingBox -> BoundingBox
dataCast2 :: (forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c BoundingBox)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c BoundingBox)
dataCast1 :: (forall d. Data d => c (t d)) -> Maybe (c BoundingBox)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c BoundingBox)
dataTypeOf :: BoundingBox -> DataType
$cdataTypeOf :: BoundingBox -> DataType
toConstr :: BoundingBox -> Constr
$ctoConstr :: BoundingBox -> Constr
gunfold :: (forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c BoundingBox
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c BoundingBox
gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> BoundingBox -> c BoundingBox
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> BoundingBox -> c BoundingBox
$cp1Data :: Typeable BoundingBox
Data, Typeable, (forall x. BoundingBox -> Rep BoundingBox x)
-> (forall x. Rep BoundingBox x -> BoundingBox)
-> Generic BoundingBox
forall x. Rep BoundingBox x -> BoundingBox
forall x. BoundingBox -> Rep BoundingBox x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep BoundingBox x -> BoundingBox
$cfrom :: forall x. BoundingBox -> Rep BoundingBox x
Generic)

instance FromJSON BoundingBox where
    parseJSON :: Value -> Parser BoundingBox
parseJSON (Object Object
o) =
        [[[Double]]] -> Text -> BoundingBox
BoundingBox ([[[Double]]] -> Text -> BoundingBox)
-> Parser [[[Double]]] -> Parser (Text -> BoundingBox)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser [[[Double]]]
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"coordinates"
            Parser (Text -> BoundingBox) -> Parser Text -> Parser BoundingBox
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"type"
    parseJSON Value
v = String -> Parser BoundingBox
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> Parser BoundingBox) -> String -> Parser BoundingBox
forall a b. (a -> b) -> a -> b
$ String
"couldn't parse bounding box from: " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Value -> String
forall a. Show a => a -> String
show Value
v

instance ToJSON BoundingBox where
    toJSON :: BoundingBox -> Value
toJSON BoundingBox {[[[Double]]]
Text
boundingBoxType :: Text
boundingBoxCoordinates :: [[[Double]]]
boundingBoxType :: BoundingBox -> Text
boundingBoxCoordinates :: BoundingBox -> [[[Double]]]
..} =
        [Pair] -> Value
object
            [ Key
"coordinates" Key -> [[[Double]]] -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= [[[Double]]]
boundingBoxCoordinates
            , Key
"type" Key -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Text
boundingBoxType
            ]

-- | Entity handling.
-- See <https://dev.twitter.com/docs/platform-objects/entities>.
data Entities = Entities
    { Entities -> [Entity HashTagEntity]
enHashTags :: [Entity HashTagEntity]
    , Entities -> [Entity UserEntity]
enUserMentions :: [Entity UserEntity]
    , Entities -> [Entity URLEntity]
enURLs :: [Entity URLEntity]
    , Entities -> [Entity MediaEntity]
enMedia :: [Entity MediaEntity]
    }
    deriving (Int -> Entities -> ShowS
[Entities] -> ShowS
Entities -> String
(Int -> Entities -> ShowS)
-> (Entities -> String) -> ([Entities] -> ShowS) -> Show Entities
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Entities] -> ShowS
$cshowList :: [Entities] -> ShowS
show :: Entities -> String
$cshow :: Entities -> String
showsPrec :: Int -> Entities -> ShowS
$cshowsPrec :: Int -> Entities -> ShowS
Show, Entities -> Entities -> Bool
(Entities -> Entities -> Bool)
-> (Entities -> Entities -> Bool) -> Eq Entities
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Entities -> Entities -> Bool
$c/= :: Entities -> Entities -> Bool
== :: Entities -> Entities -> Bool
$c== :: Entities -> Entities -> Bool
Eq, Typeable Entities
DataType
Constr
Typeable Entities
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> Entities -> c Entities)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c Entities)
-> (Entities -> Constr)
-> (Entities -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c Entities))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Entities))
-> ((forall b. Data b => b -> b) -> Entities -> Entities)
-> (forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> Entities -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> Entities -> r)
-> (forall u. (forall d. Data d => d -> u) -> Entities -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> Entities -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> Entities -> m Entities)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> Entities -> m Entities)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> Entities -> m Entities)
-> Data Entities
Entities -> DataType
Entities -> Constr
(forall b. Data b => b -> b) -> Entities -> Entities
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Entities -> c Entities
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Entities
forall a.
Typeable a
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> Entities -> u
forall u. (forall d. Data d => d -> u) -> Entities -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> Entities -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> Entities -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Entities -> m Entities
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Entities -> m Entities
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Entities
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Entities -> c Entities
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c Entities)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Entities)
$cEntities :: Constr
$tEntities :: DataType
gmapMo :: (forall d. Data d => d -> m d) -> Entities -> m Entities
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Entities -> m Entities
gmapMp :: (forall d. Data d => d -> m d) -> Entities -> m Entities
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Entities -> m Entities
gmapM :: (forall d. Data d => d -> m d) -> Entities -> m Entities
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Entities -> m Entities
gmapQi :: Int -> (forall d. Data d => d -> u) -> Entities -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> Entities -> u
gmapQ :: (forall d. Data d => d -> u) -> Entities -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> Entities -> [u]
gmapQr :: (r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> Entities -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> Entities -> r
gmapQl :: (r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> Entities -> r
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> Entities -> r
gmapT :: (forall b. Data b => b -> b) -> Entities -> Entities
$cgmapT :: (forall b. Data b => b -> b) -> Entities -> Entities
dataCast2 :: (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Entities)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Entities)
dataCast1 :: (forall d. Data d => c (t d)) -> Maybe (c Entities)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c Entities)
dataTypeOf :: Entities -> DataType
$cdataTypeOf :: Entities -> DataType
toConstr :: Entities -> Constr
$ctoConstr :: Entities -> Constr
gunfold :: (forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Entities
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Entities
gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Entities -> c Entities
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Entities -> c Entities
$cp1Data :: Typeable Entities
Data, Typeable, (forall x. Entities -> Rep Entities x)
-> (forall x. Rep Entities x -> Entities) -> Generic Entities
forall x. Rep Entities x -> Entities
forall x. Entities -> Rep Entities x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep Entities x -> Entities
$cfrom :: forall x. Entities -> Rep Entities x
Generic)

instance FromJSON Entities where
    parseJSON :: Value -> Parser Entities
parseJSON (Object Object
o) =
        [Entity HashTagEntity]
-> [Entity UserEntity]
-> [Entity URLEntity]
-> [Entity MediaEntity]
-> Entities
Entities ([Entity HashTagEntity]
 -> [Entity UserEntity]
 -> [Entity URLEntity]
 -> [Entity MediaEntity]
 -> Entities)
-> Parser [Entity HashTagEntity]
-> Parser
     ([Entity UserEntity]
      -> [Entity URLEntity] -> [Entity MediaEntity] -> Entities)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser (Maybe [Entity HashTagEntity])
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"hashtags" Parser (Maybe [Entity HashTagEntity])
-> [Entity HashTagEntity] -> Parser [Entity HashTagEntity]
forall a. Parser (Maybe a) -> a -> Parser a
.!= []
            Parser
  ([Entity UserEntity]
   -> [Entity URLEntity] -> [Entity MediaEntity] -> Entities)
-> Parser [Entity UserEntity]
-> Parser ([Entity URLEntity] -> [Entity MediaEntity] -> Entities)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe [Entity UserEntity])
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"user_mentions" Parser (Maybe [Entity UserEntity])
-> [Entity UserEntity] -> Parser [Entity UserEntity]
forall a. Parser (Maybe a) -> a -> Parser a
.!= []
            Parser ([Entity URLEntity] -> [Entity MediaEntity] -> Entities)
-> Parser [Entity URLEntity]
-> Parser ([Entity MediaEntity] -> Entities)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe [Entity URLEntity])
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"urls" Parser (Maybe [Entity URLEntity])
-> [Entity URLEntity] -> Parser [Entity URLEntity]
forall a. Parser (Maybe a) -> a -> Parser a
.!= []
            Parser ([Entity MediaEntity] -> Entities)
-> Parser [Entity MediaEntity] -> Parser Entities
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe [Entity MediaEntity])
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"media" Parser (Maybe [Entity MediaEntity])
-> [Entity MediaEntity] -> Parser [Entity MediaEntity]
forall a. Parser (Maybe a) -> a -> Parser a
.!= []
    parseJSON Value
v = String -> Parser Entities
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> Parser Entities) -> String -> Parser Entities
forall a b. (a -> b) -> a -> b
$ String
"couldn't parse entities from: " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Value -> String
forall a. Show a => a -> String
show Value
v

instance ToJSON Entities where
    toJSON :: Entities -> Value
toJSON Entities {[Entity MediaEntity]
[Entity URLEntity]
[Entity UserEntity]
[Entity HashTagEntity]
enMedia :: [Entity MediaEntity]
enURLs :: [Entity URLEntity]
enUserMentions :: [Entity UserEntity]
enHashTags :: [Entity HashTagEntity]
enMedia :: Entities -> [Entity MediaEntity]
enURLs :: Entities -> [Entity URLEntity]
enUserMentions :: Entities -> [Entity UserEntity]
enHashTags :: Entities -> [Entity HashTagEntity]
..} =
        [Pair] -> Value
object
            [ Key
"hashtags" Key -> [Entity HashTagEntity] -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= [Entity HashTagEntity]
enHashTags
            , Key
"user_mentions" Key -> [Entity UserEntity] -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= [Entity UserEntity]
enUserMentions
            , Key
"urls" Key -> [Entity URLEntity] -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= [Entity URLEntity]
enURLs
            , Key
"media" Key -> [Entity MediaEntity] -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= [Entity MediaEntity]
enMedia
            ]

-- | The character positions the Entity was extracted from
--
--   This is experimental implementation.
--   This may be replaced by more definite types.
type EntityIndices = [Int]

data Entity a = Entity
    { -- | The detail information of the specific entity types (HashTag, URL, User)
      Entity a -> a
entityBody :: a
    , -- | The character positions the Entity was extracted from
      Entity a -> EntityIndices
entityIndices :: EntityIndices
    }
    deriving (Int -> Entity a -> ShowS
[Entity a] -> ShowS
Entity a -> String
(Int -> Entity a -> ShowS)
-> (Entity a -> String) -> ([Entity a] -> ShowS) -> Show (Entity a)
forall a. Show a => Int -> Entity a -> ShowS
forall a. Show a => [Entity a] -> ShowS
forall a. Show a => Entity a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Entity a] -> ShowS
$cshowList :: forall a. Show a => [Entity a] -> ShowS
show :: Entity a -> String
$cshow :: forall a. Show a => Entity a -> String
showsPrec :: Int -> Entity a -> ShowS
$cshowsPrec :: forall a. Show a => Int -> Entity a -> ShowS
Show, Entity a -> Entity a -> Bool
(Entity a -> Entity a -> Bool)
-> (Entity a -> Entity a -> Bool) -> Eq (Entity a)
forall a. Eq a => Entity a -> Entity a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Entity a -> Entity a -> Bool
$c/= :: forall a. Eq a => Entity a -> Entity a -> Bool
== :: Entity a -> Entity a -> Bool
$c== :: forall a. Eq a => Entity a -> Entity a -> Bool
Eq, Typeable (Entity a)
DataType
Constr
Typeable (Entity a)
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> Entity a -> c (Entity a))
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c (Entity a))
-> (Entity a -> Constr)
-> (Entity a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c (Entity a)))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e))
    -> Maybe (c (Entity a)))
-> ((forall b. Data b => b -> b) -> Entity a -> Entity a)
-> (forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> Entity a -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> Entity a -> r)
-> (forall u. (forall d. Data d => d -> u) -> Entity a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> Entity a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> Entity a -> m (Entity a))
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> Entity a -> m (Entity a))
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> Entity a -> m (Entity a))
-> Data (Entity a)
Entity a -> DataType
Entity a -> Constr
(forall d. Data d => c (t d)) -> Maybe (c (Entity a))
(forall b. Data b => b -> b) -> Entity a -> Entity a
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Entity a -> c (Entity a)
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (Entity a)
forall a. Data a => Typeable (Entity a)
forall a. Data a => Entity a -> DataType
forall a. Data a => Entity a -> Constr
forall a.
Data a =>
(forall b. Data b => b -> b) -> Entity a -> Entity a
forall a u.
Data a =>
Int -> (forall d. Data d => d -> u) -> Entity a -> u
forall a u.
Data a =>
(forall d. Data d => d -> u) -> Entity a -> [u]
forall a r r'.
Data a =>
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> Entity a -> r
forall a r r'.
Data a =>
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> Entity a -> r
forall a (m :: * -> *).
(Data a, Monad m) =>
(forall d. Data d => d -> m d) -> Entity a -> m (Entity a)
forall a (m :: * -> *).
(Data a, MonadPlus m) =>
(forall d. Data d => d -> m d) -> Entity a -> m (Entity a)
forall a (c :: * -> *).
Data a =>
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (Entity a)
forall a (c :: * -> *).
Data a =>
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Entity a -> c (Entity a)
forall a (t :: * -> *) (c :: * -> *).
(Data a, Typeable t) =>
(forall d. Data d => c (t d)) -> Maybe (c (Entity a))
forall a (t :: * -> * -> *) (c :: * -> *).
(Data a, Typeable t) =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Entity a))
forall a.
Typeable a
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> Entity a -> u
forall u. (forall d. Data d => d -> u) -> Entity a -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> Entity a -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> Entity a -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Entity a -> m (Entity a)
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Entity a -> m (Entity a)
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (Entity a)
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Entity a -> c (Entity a)
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c (Entity a))
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Entity a))
$cEntity :: Constr
$tEntity :: DataType
gmapMo :: (forall d. Data d => d -> m d) -> Entity a -> m (Entity a)
$cgmapMo :: forall a (m :: * -> *).
(Data a, MonadPlus m) =>
(forall d. Data d => d -> m d) -> Entity a -> m (Entity a)
gmapMp :: (forall d. Data d => d -> m d) -> Entity a -> m (Entity a)
$cgmapMp :: forall a (m :: * -> *).
(Data a, MonadPlus m) =>
(forall d. Data d => d -> m d) -> Entity a -> m (Entity a)
gmapM :: (forall d. Data d => d -> m d) -> Entity a -> m (Entity a)
$cgmapM :: forall a (m :: * -> *).
(Data a, Monad m) =>
(forall d. Data d => d -> m d) -> Entity a -> m (Entity a)
gmapQi :: Int -> (forall d. Data d => d -> u) -> Entity a -> u
$cgmapQi :: forall a u.
Data a =>
Int -> (forall d. Data d => d -> u) -> Entity a -> u
gmapQ :: (forall d. Data d => d -> u) -> Entity a -> [u]
$cgmapQ :: forall a u.
Data a =>
(forall d. Data d => d -> u) -> Entity a -> [u]
gmapQr :: (r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> Entity a -> r
$cgmapQr :: forall a r r'.
Data a =>
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> Entity a -> r
gmapQl :: (r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> Entity a -> r
$cgmapQl :: forall a r r'.
Data a =>
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> Entity a -> r
gmapT :: (forall b. Data b => b -> b) -> Entity a -> Entity a
$cgmapT :: forall a.
Data a =>
(forall b. Data b => b -> b) -> Entity a -> Entity a
dataCast2 :: (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Entity a))
$cdataCast2 :: forall a (t :: * -> * -> *) (c :: * -> *).
(Data a, Typeable t) =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Entity a))
dataCast1 :: (forall d. Data d => c (t d)) -> Maybe (c (Entity a))
$cdataCast1 :: forall a (t :: * -> *) (c :: * -> *).
(Data a, Typeable t) =>
(forall d. Data d => c (t d)) -> Maybe (c (Entity a))
dataTypeOf :: Entity a -> DataType
$cdataTypeOf :: forall a. Data a => Entity a -> DataType
toConstr :: Entity a -> Constr
$ctoConstr :: forall a. Data a => Entity a -> Constr
gunfold :: (forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (Entity a)
$cgunfold :: forall a (c :: * -> *).
Data a =>
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (Entity a)
gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Entity a -> c (Entity a)
$cgfoldl :: forall a (c :: * -> *).
Data a =>
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Entity a -> c (Entity a)
$cp1Data :: forall a. Data a => Typeable (Entity a)
Data, Typeable, (forall x. Entity a -> Rep (Entity a) x)
-> (forall x. Rep (Entity a) x -> Entity a) -> Generic (Entity a)
forall x. Rep (Entity a) x -> Entity a
forall x. Entity a -> Rep (Entity a) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall a x. Rep (Entity a) x -> Entity a
forall a x. Entity a -> Rep (Entity a) x
$cto :: forall a x. Rep (Entity a) x -> Entity a
$cfrom :: forall a x. Entity a -> Rep (Entity a) x
Generic, (forall a. Entity a -> Rep1 Entity a)
-> (forall a. Rep1 Entity a -> Entity a) -> Generic1 Entity
forall a. Rep1 Entity a -> Entity a
forall a. Entity a -> Rep1 Entity a
forall k (f :: k -> *).
(forall (a :: k). f a -> Rep1 f a)
-> (forall (a :: k). Rep1 f a -> f a) -> Generic1 f
$cto1 :: forall a. Rep1 Entity a -> Entity a
$cfrom1 :: forall a. Entity a -> Rep1 Entity a
Generic1)

instance FromJSON a => FromJSON (Entity a) where
    parseJSON :: Value -> Parser (Entity a)
parseJSON v :: Value
v@(Object Object
o) =
        a -> EntityIndices -> Entity a
forall a. a -> EntityIndices -> Entity a
Entity (a -> EntityIndices -> Entity a)
-> Parser a -> Parser (EntityIndices -> Entity a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Value -> Parser a
forall a. FromJSON a => Value -> Parser a
parseJSON Value
v
            Parser (EntityIndices -> Entity a)
-> Parser EntityIndices -> Parser (Entity a)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser EntityIndices
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"indices"
    parseJSON Value
v = String -> Parser (Entity a)
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> Parser (Entity a)) -> String -> Parser (Entity a)
forall a b. (a -> b) -> a -> b
$ String
"couldn't parse entity wrapper from: " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Value -> String
forall a. Show a => a -> String
show Value
v

instance ToJSON a => ToJSON (Entity a) where
    toJSON :: Entity a -> Value
toJSON Entity {a
EntityIndices
entityIndices :: EntityIndices
entityBody :: a
entityIndices :: forall a. Entity a -> EntityIndices
entityBody :: forall a. Entity a -> a
..} =
        case a -> Value
forall a. ToJSON a => a -> Value
toJSON a
entityBody of
            (Object Object
o) -> Object -> Value
Object (Object -> Value) -> Object -> Value
forall a b. (a -> b) -> a -> b
$ Key -> Value -> Object -> Object
forall v. Key -> v -> KeyMap v -> KeyMap v
KeyMap.insert Key
"indices" (EntityIndices -> Value
forall a. ToJSON a => a -> Value
toJSON EntityIndices
entityIndices) Object
o
            Value
_ -> String -> Value
forall a. HasCallStack => String -> a
error String
"Entity body must produce an object."

data ExtendedEntities = ExtendedEntities
    { ExtendedEntities -> [Entity ExtendedEntity]
exeMedia :: [Entity ExtendedEntity]
    }
    deriving (Int -> ExtendedEntities -> ShowS
[ExtendedEntities] -> ShowS
ExtendedEntities -> String
(Int -> ExtendedEntities -> ShowS)
-> (ExtendedEntities -> String)
-> ([ExtendedEntities] -> ShowS)
-> Show ExtendedEntities
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ExtendedEntities] -> ShowS
$cshowList :: [ExtendedEntities] -> ShowS
show :: ExtendedEntities -> String
$cshow :: ExtendedEntities -> String
showsPrec :: Int -> ExtendedEntities -> ShowS
$cshowsPrec :: Int -> ExtendedEntities -> ShowS
Show, ExtendedEntities -> ExtendedEntities -> Bool
(ExtendedEntities -> ExtendedEntities -> Bool)
-> (ExtendedEntities -> ExtendedEntities -> Bool)
-> Eq ExtendedEntities
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ExtendedEntities -> ExtendedEntities -> Bool
$c/= :: ExtendedEntities -> ExtendedEntities -> Bool
== :: ExtendedEntities -> ExtendedEntities -> Bool
$c== :: ExtendedEntities -> ExtendedEntities -> Bool
Eq, Typeable ExtendedEntities
DataType
Constr
Typeable ExtendedEntities
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> ExtendedEntities -> c ExtendedEntities)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c ExtendedEntities)
-> (ExtendedEntities -> Constr)
-> (ExtendedEntities -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c ExtendedEntities))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e))
    -> Maybe (c ExtendedEntities))
-> ((forall b. Data b => b -> b)
    -> ExtendedEntities -> ExtendedEntities)
-> (forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> ExtendedEntities -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> ExtendedEntities -> r)
-> (forall u.
    (forall d. Data d => d -> u) -> ExtendedEntities -> [u])
-> (forall u.
    Int -> (forall d. Data d => d -> u) -> ExtendedEntities -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d)
    -> ExtendedEntities -> m ExtendedEntities)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> ExtendedEntities -> m ExtendedEntities)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> ExtendedEntities -> m ExtendedEntities)
-> Data ExtendedEntities
ExtendedEntities -> DataType
ExtendedEntities -> Constr
(forall b. Data b => b -> b)
-> ExtendedEntities -> ExtendedEntities
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> ExtendedEntities -> c ExtendedEntities
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c ExtendedEntities
forall a.
Typeable a
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u.
Int -> (forall d. Data d => d -> u) -> ExtendedEntities -> u
forall u. (forall d. Data d => d -> u) -> ExtendedEntities -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> ExtendedEntities -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> ExtendedEntities -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> ExtendedEntities -> m ExtendedEntities
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> ExtendedEntities -> m ExtendedEntities
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c ExtendedEntities
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> ExtendedEntities -> c ExtendedEntities
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c ExtendedEntities)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c ExtendedEntities)
$cExtendedEntities :: Constr
$tExtendedEntities :: DataType
gmapMo :: (forall d. Data d => d -> m d)
-> ExtendedEntities -> m ExtendedEntities
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> ExtendedEntities -> m ExtendedEntities
gmapMp :: (forall d. Data d => d -> m d)
-> ExtendedEntities -> m ExtendedEntities
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> ExtendedEntities -> m ExtendedEntities
gmapM :: (forall d. Data d => d -> m d)
-> ExtendedEntities -> m ExtendedEntities
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> ExtendedEntities -> m ExtendedEntities
gmapQi :: Int -> (forall d. Data d => d -> u) -> ExtendedEntities -> u
$cgmapQi :: forall u.
Int -> (forall d. Data d => d -> u) -> ExtendedEntities -> u
gmapQ :: (forall d. Data d => d -> u) -> ExtendedEntities -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> ExtendedEntities -> [u]
gmapQr :: (r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> ExtendedEntities -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> ExtendedEntities -> r
gmapQl :: (r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> ExtendedEntities -> r
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> ExtendedEntities -> r
gmapT :: (forall b. Data b => b -> b)
-> ExtendedEntities -> ExtendedEntities
$cgmapT :: (forall b. Data b => b -> b)
-> ExtendedEntities -> ExtendedEntities
dataCast2 :: (forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c ExtendedEntities)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c ExtendedEntities)
dataCast1 :: (forall d. Data d => c (t d)) -> Maybe (c ExtendedEntities)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c ExtendedEntities)
dataTypeOf :: ExtendedEntities -> DataType
$cdataTypeOf :: ExtendedEntities -> DataType
toConstr :: ExtendedEntities -> Constr
$ctoConstr :: ExtendedEntities -> Constr
gunfold :: (forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c ExtendedEntities
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c ExtendedEntities
gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> ExtendedEntities -> c ExtendedEntities
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> ExtendedEntities -> c ExtendedEntities
$cp1Data :: Typeable ExtendedEntities
Data, Typeable, (forall x. ExtendedEntities -> Rep ExtendedEntities x)
-> (forall x. Rep ExtendedEntities x -> ExtendedEntities)
-> Generic ExtendedEntities
forall x. Rep ExtendedEntities x -> ExtendedEntities
forall x. ExtendedEntities -> Rep ExtendedEntities x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep ExtendedEntities x -> ExtendedEntities
$cfrom :: forall x. ExtendedEntities -> Rep ExtendedEntities x
Generic)

instance FromJSON ExtendedEntities where
    parseJSON :: Value -> Parser ExtendedEntities
parseJSON (Object Object
o) =
        [Entity ExtendedEntity] -> ExtendedEntities
ExtendedEntities ([Entity ExtendedEntity] -> ExtendedEntities)
-> Parser [Entity ExtendedEntity] -> Parser ExtendedEntities
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser (Maybe [Entity ExtendedEntity])
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"media" Parser (Maybe [Entity ExtendedEntity])
-> [Entity ExtendedEntity] -> Parser [Entity ExtendedEntity]
forall a. Parser (Maybe a) -> a -> Parser a
.!= []
    parseJSON Value
v = String -> Parser ExtendedEntities
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> Parser ExtendedEntities)
-> String -> Parser ExtendedEntities
forall a b. (a -> b) -> a -> b
$ String
"couldn't parse extended entity from: " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Value -> String
forall a. Show a => a -> String
show Value
v

instance ToJSON ExtendedEntities where
    toJSON :: ExtendedEntities -> Value
toJSON ExtendedEntities {[Entity ExtendedEntity]
exeMedia :: [Entity ExtendedEntity]
exeMedia :: ExtendedEntities -> [Entity ExtendedEntity]
..} = [Pair] -> Value
object [Key
"media" Key -> [Entity ExtendedEntity] -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= [Entity ExtendedEntity]
exeMedia]

-- "video_info": {
--   "aspect_ratio": [
--     9,
--     16
--   ],
--   "duration_millis": 10704,
--   "variants": [
--     {
--       "bitrate": 320000,
--       "content_type": "video/mp4",
--       "url": "https://video.twimg.com/ext_tw_video/869317980307415040/pu/vid/180x320/FMei8yCw7yc_Z7e-.mp4"
--     },
--     {
--       "bitrate": 2176000,
--       "content_type": "video/mp4",
--       "url": "https://video.twimg.com/ext_tw_video/869317980307415040/pu/vid/720x1280/octt5pFbISkef8RB.mp4"
--     },
--     {
--       "bitrate": 832000,
--       "content_type": "video/mp4",
--       "url": "https://video.twimg.com/ext_tw_video/869317980307415040/pu/vid/360x640/2OmqK74SQ9jNX8mZ.mp4"
--     },
--     {
--       "content_type": "application/x-mpegURL",
--       "url": "https://video.twimg.com/ext_tw_video/869317980307415040/pu/pl/wcJQJ2nxiFU4ZZng.m3u8"
--     }
--   ]
-- }

data Variant = Variant
    { Variant -> Maybe Int
vBitrate :: Maybe Int
    , Variant -> Text
vContentType :: Text
    , Variant -> Text
vUrl :: URIString
    }
    deriving (Int -> Variant -> ShowS
[Variant] -> ShowS
Variant -> String
(Int -> Variant -> ShowS)
-> (Variant -> String) -> ([Variant] -> ShowS) -> Show Variant
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Variant] -> ShowS
$cshowList :: [Variant] -> ShowS
show :: Variant -> String
$cshow :: Variant -> String
showsPrec :: Int -> Variant -> ShowS
$cshowsPrec :: Int -> Variant -> ShowS
Show, Variant -> Variant -> Bool
(Variant -> Variant -> Bool)
-> (Variant -> Variant -> Bool) -> Eq Variant
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Variant -> Variant -> Bool
$c/= :: Variant -> Variant -> Bool
== :: Variant -> Variant -> Bool
$c== :: Variant -> Variant -> Bool
Eq, Typeable Variant
DataType
Constr
Typeable Variant
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> Variant -> c Variant)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c Variant)
-> (Variant -> Constr)
-> (Variant -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c Variant))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Variant))
-> ((forall b. Data b => b -> b) -> Variant -> Variant)
-> (forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> Variant -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> Variant -> r)
-> (forall u. (forall d. Data d => d -> u) -> Variant -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> Variant -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> Variant -> m Variant)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> Variant -> m Variant)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> Variant -> m Variant)
-> Data Variant
Variant -> DataType
Variant -> Constr
(forall b. Data b => b -> b) -> Variant -> Variant
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Variant -> c Variant
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Variant
forall a.
Typeable a
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> Variant -> u
forall u. (forall d. Data d => d -> u) -> Variant -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> Variant -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> Variant -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Variant -> m Variant
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Variant -> m Variant
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Variant
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Variant -> c Variant
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c Variant)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Variant)
$cVariant :: Constr
$tVariant :: DataType
gmapMo :: (forall d. Data d => d -> m d) -> Variant -> m Variant
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Variant -> m Variant
gmapMp :: (forall d. Data d => d -> m d) -> Variant -> m Variant
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Variant -> m Variant
gmapM :: (forall d. Data d => d -> m d) -> Variant -> m Variant
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Variant -> m Variant
gmapQi :: Int -> (forall d. Data d => d -> u) -> Variant -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> Variant -> u
gmapQ :: (forall d. Data d => d -> u) -> Variant -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> Variant -> [u]
gmapQr :: (r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> Variant -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> Variant -> r
gmapQl :: (r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> Variant -> r
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> Variant -> r
gmapT :: (forall b. Data b => b -> b) -> Variant -> Variant
$cgmapT :: (forall b. Data b => b -> b) -> Variant -> Variant
dataCast2 :: (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Variant)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Variant)
dataCast1 :: (forall d. Data d => c (t d)) -> Maybe (c Variant)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c Variant)
dataTypeOf :: Variant -> DataType
$cdataTypeOf :: Variant -> DataType
toConstr :: Variant -> Constr
$ctoConstr :: Variant -> Constr
gunfold :: (forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Variant
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Variant
gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Variant -> c Variant
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Variant -> c Variant
$cp1Data :: Typeable Variant
Data, Typeable, (forall x. Variant -> Rep Variant x)
-> (forall x. Rep Variant x -> Variant) -> Generic Variant
forall x. Rep Variant x -> Variant
forall x. Variant -> Rep Variant x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep Variant x -> Variant
$cfrom :: forall x. Variant -> Rep Variant x
Generic)

instance FromJSON Variant where
    parseJSON :: Value -> Parser Variant
parseJSON (Object Object
o) =
        Maybe Int -> Text -> Text -> Variant
Variant (Maybe Int -> Text -> Text -> Variant)
-> Parser (Maybe Int) -> Parser (Text -> Text -> Variant)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser (Maybe Int)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"bitrate"
            Parser (Text -> Text -> Variant)
-> Parser Text -> Parser (Text -> Variant)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"content_type"
            Parser (Text -> Variant) -> Parser Text -> Parser Variant
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"url"
    parseJSON Value
v = String -> Parser Variant
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> Parser Variant) -> String -> Parser Variant
forall a b. (a -> b) -> a -> b
$ String
"couldn't parse variant from:" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Value -> String
forall a. Show a => a -> String
show Value
v

instance ToJSON Variant where
    toJSON :: Variant -> Value
toJSON Variant {Maybe Int
Text
vUrl :: Text
vContentType :: Text
vBitrate :: Maybe Int
vUrl :: Variant -> Text
vContentType :: Variant -> Text
vBitrate :: Variant -> Maybe Int
..} =
        [Pair] -> Value
object
            [ Key
"bitrate" Key -> Maybe Int -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe Int
vBitrate
            , Key
"content_type" Key -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Text
vContentType
            , Key
"url" Key -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Text
vUrl
            ]

data VideoInfo = VideoInfo
    { VideoInfo -> EntityIndices
vsAspectRatio :: [Int]
    , VideoInfo -> Maybe Int
vsDurationMillis :: Maybe Int
    , VideoInfo -> [Variant]
vsVariants :: [Variant]
    }
    deriving (Int -> VideoInfo -> ShowS
[VideoInfo] -> ShowS
VideoInfo -> String
(Int -> VideoInfo -> ShowS)
-> (VideoInfo -> String)
-> ([VideoInfo] -> ShowS)
-> Show VideoInfo
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [VideoInfo] -> ShowS
$cshowList :: [VideoInfo] -> ShowS
show :: VideoInfo -> String
$cshow :: VideoInfo -> String
showsPrec :: Int -> VideoInfo -> ShowS
$cshowsPrec :: Int -> VideoInfo -> ShowS
Show, VideoInfo -> VideoInfo -> Bool
(VideoInfo -> VideoInfo -> Bool)
-> (VideoInfo -> VideoInfo -> Bool) -> Eq VideoInfo
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: VideoInfo -> VideoInfo -> Bool
$c/= :: VideoInfo -> VideoInfo -> Bool
== :: VideoInfo -> VideoInfo -> Bool
$c== :: VideoInfo -> VideoInfo -> Bool
Eq, Typeable VideoInfo
DataType
Constr
Typeable VideoInfo
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> VideoInfo -> c VideoInfo)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c VideoInfo)
-> (VideoInfo -> Constr)
-> (VideoInfo -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c VideoInfo))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c VideoInfo))
-> ((forall b. Data b => b -> b) -> VideoInfo -> VideoInfo)
-> (forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> VideoInfo -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> VideoInfo -> r)
-> (forall u. (forall d. Data d => d -> u) -> VideoInfo -> [u])
-> (forall u.
    Int -> (forall d. Data d => d -> u) -> VideoInfo -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> VideoInfo -> m VideoInfo)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> VideoInfo -> m VideoInfo)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> VideoInfo -> m VideoInfo)
-> Data VideoInfo
VideoInfo -> DataType
VideoInfo -> Constr
(forall b. Data b => b -> b) -> VideoInfo -> VideoInfo
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> VideoInfo -> c VideoInfo
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c VideoInfo
forall a.
Typeable a
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> VideoInfo -> u
forall u. (forall d. Data d => d -> u) -> VideoInfo -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> VideoInfo -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> VideoInfo -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> VideoInfo -> m VideoInfo
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> VideoInfo -> m VideoInfo
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c VideoInfo
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> VideoInfo -> c VideoInfo
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c VideoInfo)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c VideoInfo)
$cVideoInfo :: Constr
$tVideoInfo :: DataType
gmapMo :: (forall d. Data d => d -> m d) -> VideoInfo -> m VideoInfo
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> VideoInfo -> m VideoInfo
gmapMp :: (forall d. Data d => d -> m d) -> VideoInfo -> m VideoInfo
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> VideoInfo -> m VideoInfo
gmapM :: (forall d. Data d => d -> m d) -> VideoInfo -> m VideoInfo
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> VideoInfo -> m VideoInfo
gmapQi :: Int -> (forall d. Data d => d -> u) -> VideoInfo -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> VideoInfo -> u
gmapQ :: (forall d. Data d => d -> u) -> VideoInfo -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> VideoInfo -> [u]
gmapQr :: (r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> VideoInfo -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> VideoInfo -> r
gmapQl :: (r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> VideoInfo -> r
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> VideoInfo -> r
gmapT :: (forall b. Data b => b -> b) -> VideoInfo -> VideoInfo
$cgmapT :: (forall b. Data b => b -> b) -> VideoInfo -> VideoInfo
dataCast2 :: (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c VideoInfo)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c VideoInfo)
dataCast1 :: (forall d. Data d => c (t d)) -> Maybe (c VideoInfo)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c VideoInfo)
dataTypeOf :: VideoInfo -> DataType
$cdataTypeOf :: VideoInfo -> DataType
toConstr :: VideoInfo -> Constr
$ctoConstr :: VideoInfo -> Constr
gunfold :: (forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c VideoInfo
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c VideoInfo
gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> VideoInfo -> c VideoInfo
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> VideoInfo -> c VideoInfo
$cp1Data :: Typeable VideoInfo
Data, Typeable, (forall x. VideoInfo -> Rep VideoInfo x)
-> (forall x. Rep VideoInfo x -> VideoInfo) -> Generic VideoInfo
forall x. Rep VideoInfo x -> VideoInfo
forall x. VideoInfo -> Rep VideoInfo x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep VideoInfo x -> VideoInfo
$cfrom :: forall x. VideoInfo -> Rep VideoInfo x
Generic)

instance FromJSON VideoInfo where
    parseJSON :: Value -> Parser VideoInfo
parseJSON (Object Object
o) =
        EntityIndices -> Maybe Int -> [Variant] -> VideoInfo
VideoInfo (EntityIndices -> Maybe Int -> [Variant] -> VideoInfo)
-> Parser EntityIndices
-> Parser (Maybe Int -> [Variant] -> VideoInfo)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser (Maybe EntityIndices)
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"aspect_ratio" Parser (Maybe EntityIndices)
-> EntityIndices -> Parser EntityIndices
forall a. Parser (Maybe a) -> a -> Parser a
.!= []
            Parser (Maybe Int -> [Variant] -> VideoInfo)
-> Parser (Maybe Int) -> Parser ([Variant] -> VideoInfo)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Int)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"duration_millis"
            Parser ([Variant] -> VideoInfo)
-> Parser [Variant] -> Parser VideoInfo
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe [Variant])
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"variants" Parser (Maybe [Variant]) -> [Variant] -> Parser [Variant]
forall a. Parser (Maybe a) -> a -> Parser a
.!= []
    parseJSON Value
v = String -> Parser VideoInfo
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> Parser VideoInfo) -> String -> Parser VideoInfo
forall a b. (a -> b) -> a -> b
$ String
"couldn't parse video info from:" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Value -> String
forall a. Show a => a -> String
show Value
v

instance ToJSON VideoInfo where
    toJSON :: VideoInfo -> Value
toJSON VideoInfo {EntityIndices
[Variant]
Maybe Int
vsVariants :: [Variant]
vsDurationMillis :: Maybe Int
vsAspectRatio :: EntityIndices
vsVariants :: VideoInfo -> [Variant]
vsDurationMillis :: VideoInfo -> Maybe Int
vsAspectRatio :: VideoInfo -> EntityIndices
..} =
        [Pair] -> Value
object
            [ Key
"aspect_ratio" Key -> EntityIndices -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= EntityIndices
vsAspectRatio
            , Key
"duration_millis" Key -> Maybe Int -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe Int
vsDurationMillis
            , Key
"variants" Key -> [Variant] -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= [Variant]
vsVariants
            ]

-- Extended entities are like entities, but contain special media features like
-- video or multiple photos
data ExtendedEntity = ExtendedEntity
    { ExtendedEntity -> StatusId
exeID :: StatusId
    , ExtendedEntity -> Text
exeMediaUrl :: URIString
    , ExtendedEntity -> Text
exeMediaUrlHttps :: URIString
    , ExtendedEntity -> HashMap Text MediaSize
exeSizes :: HashMap Text MediaSize
    , ExtendedEntity -> Text
exeType :: Text
    , ExtendedEntity -> Maybe VideoInfo
exeVideoInfo :: Maybe VideoInfo
    , ExtendedEntity -> Maybe Double
exeDurationMillis :: Maybe Double
    , ExtendedEntity -> Maybe String
exeExtAltText :: Maybe String
    , ExtendedEntity -> URLEntity
exeURL :: URLEntity
    }
    deriving (Int -> ExtendedEntity -> ShowS
[ExtendedEntity] -> ShowS
ExtendedEntity -> String
(Int -> ExtendedEntity -> ShowS)
-> (ExtendedEntity -> String)
-> ([ExtendedEntity] -> ShowS)
-> Show ExtendedEntity
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ExtendedEntity] -> ShowS
$cshowList :: [ExtendedEntity] -> ShowS
show :: ExtendedEntity -> String
$cshow :: ExtendedEntity -> String
showsPrec :: Int -> ExtendedEntity -> ShowS
$cshowsPrec :: Int -> ExtendedEntity -> ShowS
Show, ExtendedEntity -> ExtendedEntity -> Bool
(ExtendedEntity -> ExtendedEntity -> Bool)
-> (ExtendedEntity -> ExtendedEntity -> Bool) -> Eq ExtendedEntity
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ExtendedEntity -> ExtendedEntity -> Bool
$c/= :: ExtendedEntity -> ExtendedEntity -> Bool
== :: ExtendedEntity -> ExtendedEntity -> Bool
$c== :: ExtendedEntity -> ExtendedEntity -> Bool
Eq, Typeable ExtendedEntity
DataType
Constr
Typeable ExtendedEntity
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> ExtendedEntity -> c ExtendedEntity)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c ExtendedEntity)
-> (ExtendedEntity -> Constr)
-> (ExtendedEntity -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c ExtendedEntity))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e))
    -> Maybe (c ExtendedEntity))
-> ((forall b. Data b => b -> b)
    -> ExtendedEntity -> ExtendedEntity)
-> (forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> ExtendedEntity -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> ExtendedEntity -> r)
-> (forall u.
    (forall d. Data d => d -> u) -> ExtendedEntity -> [u])
-> (forall u.
    Int -> (forall d. Data d => d -> u) -> ExtendedEntity -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d)
    -> ExtendedEntity -> m ExtendedEntity)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> ExtendedEntity -> m ExtendedEntity)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> ExtendedEntity -> m ExtendedEntity)
-> Data ExtendedEntity
ExtendedEntity -> DataType
ExtendedEntity -> Constr
(forall b. Data b => b -> b) -> ExtendedEntity -> ExtendedEntity
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> ExtendedEntity -> c ExtendedEntity
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c ExtendedEntity
forall a.
Typeable a
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u.
Int -> (forall d. Data d => d -> u) -> ExtendedEntity -> u
forall u. (forall d. Data d => d -> u) -> ExtendedEntity -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> ExtendedEntity -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> ExtendedEntity -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> ExtendedEntity -> m ExtendedEntity
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> ExtendedEntity -> m ExtendedEntity
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c ExtendedEntity
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> ExtendedEntity -> c ExtendedEntity
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c ExtendedEntity)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c ExtendedEntity)
$cExtendedEntity :: Constr
$tExtendedEntity :: DataType
gmapMo :: (forall d. Data d => d -> m d)
-> ExtendedEntity -> m ExtendedEntity
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> ExtendedEntity -> m ExtendedEntity
gmapMp :: (forall d. Data d => d -> m d)
-> ExtendedEntity -> m ExtendedEntity
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> ExtendedEntity -> m ExtendedEntity
gmapM :: (forall d. Data d => d -> m d)
-> ExtendedEntity -> m ExtendedEntity
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> ExtendedEntity -> m ExtendedEntity
gmapQi :: Int -> (forall d. Data d => d -> u) -> ExtendedEntity -> u
$cgmapQi :: forall u.
Int -> (forall d. Data d => d -> u) -> ExtendedEntity -> u
gmapQ :: (forall d. Data d => d -> u) -> ExtendedEntity -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> ExtendedEntity -> [u]
gmapQr :: (r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> ExtendedEntity -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> ExtendedEntity -> r
gmapQl :: (r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> ExtendedEntity -> r
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> ExtendedEntity -> r
gmapT :: (forall b. Data b => b -> b) -> ExtendedEntity -> ExtendedEntity
$cgmapT :: (forall b. Data b => b -> b) -> ExtendedEntity -> ExtendedEntity
dataCast2 :: (forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c ExtendedEntity)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c ExtendedEntity)
dataCast1 :: (forall d. Data d => c (t d)) -> Maybe (c ExtendedEntity)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c ExtendedEntity)
dataTypeOf :: ExtendedEntity -> DataType
$cdataTypeOf :: ExtendedEntity -> DataType
toConstr :: ExtendedEntity -> Constr
$ctoConstr :: ExtendedEntity -> Constr
gunfold :: (forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c ExtendedEntity
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c ExtendedEntity
gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> ExtendedEntity -> c ExtendedEntity
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> ExtendedEntity -> c ExtendedEntity
$cp1Data :: Typeable ExtendedEntity
Data, Typeable, (forall x. ExtendedEntity -> Rep ExtendedEntity x)
-> (forall x. Rep ExtendedEntity x -> ExtendedEntity)
-> Generic ExtendedEntity
forall x. Rep ExtendedEntity x -> ExtendedEntity
forall x. ExtendedEntity -> Rep ExtendedEntity x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep ExtendedEntity x -> ExtendedEntity
$cfrom :: forall x. ExtendedEntity -> Rep ExtendedEntity x
Generic)

instance FromJSON ExtendedEntity where
    parseJSON :: Value -> Parser ExtendedEntity
parseJSON v :: Value
v@(Object Object
o) =
        StatusId
-> Text
-> Text
-> HashMap Text MediaSize
-> Text
-> Maybe VideoInfo
-> Maybe Double
-> Maybe String
-> URLEntity
-> ExtendedEntity
ExtendedEntity (StatusId
 -> Text
 -> Text
 -> HashMap Text MediaSize
 -> Text
 -> Maybe VideoInfo
 -> Maybe Double
 -> Maybe String
 -> URLEntity
 -> ExtendedEntity)
-> Parser StatusId
-> Parser
     (Text
      -> Text
      -> HashMap Text MediaSize
      -> Text
      -> Maybe VideoInfo
      -> Maybe Double
      -> Maybe String
      -> URLEntity
      -> ExtendedEntity)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser StatusId
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"id"
            Parser
  (Text
   -> Text
   -> HashMap Text MediaSize
   -> Text
   -> Maybe VideoInfo
   -> Maybe Double
   -> Maybe String
   -> URLEntity
   -> ExtendedEntity)
-> Parser Text
-> Parser
     (Text
      -> HashMap Text MediaSize
      -> Text
      -> Maybe VideoInfo
      -> Maybe Double
      -> Maybe String
      -> URLEntity
      -> ExtendedEntity)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"media_url"
            Parser
  (Text
   -> HashMap Text MediaSize
   -> Text
   -> Maybe VideoInfo
   -> Maybe Double
   -> Maybe String
   -> URLEntity
   -> ExtendedEntity)
-> Parser Text
-> Parser
     (HashMap Text MediaSize
      -> Text
      -> Maybe VideoInfo
      -> Maybe Double
      -> Maybe String
      -> URLEntity
      -> ExtendedEntity)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"media_url_https"
            Parser
  (HashMap Text MediaSize
   -> Text
   -> Maybe VideoInfo
   -> Maybe Double
   -> Maybe String
   -> URLEntity
   -> ExtendedEntity)
-> Parser (HashMap Text MediaSize)
-> Parser
     (Text
      -> Maybe VideoInfo
      -> Maybe Double
      -> Maybe String
      -> URLEntity
      -> ExtendedEntity)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (HashMap Text MediaSize)
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"sizes"
            Parser
  (Text
   -> Maybe VideoInfo
   -> Maybe Double
   -> Maybe String
   -> URLEntity
   -> ExtendedEntity)
-> Parser Text
-> Parser
     (Maybe VideoInfo
      -> Maybe Double -> Maybe String -> URLEntity -> ExtendedEntity)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"type"
            Parser
  (Maybe VideoInfo
   -> Maybe Double -> Maybe String -> URLEntity -> ExtendedEntity)
-> Parser (Maybe VideoInfo)
-> Parser
     (Maybe Double -> Maybe String -> URLEntity -> ExtendedEntity)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe VideoInfo)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"video_info"
            Parser
  (Maybe Double -> Maybe String -> URLEntity -> ExtendedEntity)
-> Parser (Maybe Double)
-> Parser (Maybe String -> URLEntity -> ExtendedEntity)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Double)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"duration_millis"
            Parser (Maybe String -> URLEntity -> ExtendedEntity)
-> Parser (Maybe String) -> Parser (URLEntity -> ExtendedEntity)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe String)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"ext_alt_text"
            Parser (URLEntity -> ExtendedEntity)
-> Parser URLEntity -> Parser ExtendedEntity
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Value -> Parser URLEntity
forall a. FromJSON a => Value -> Parser a
parseJSON Value
v
    parseJSON Value
v = String -> Parser ExtendedEntity
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> Parser ExtendedEntity)
-> String -> Parser ExtendedEntity
forall a b. (a -> b) -> a -> b
$ String
"couldn't parse extended entity from:" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Value -> String
forall a. Show a => a -> String
show Value
v

instance ToJSON ExtendedEntity where
    toJSON :: ExtendedEntity -> Value
toJSON ExtendedEntity {StatusId
Maybe Double
Maybe String
Maybe VideoInfo
Text
HashMap Text MediaSize
URLEntity
exeURL :: URLEntity
exeExtAltText :: Maybe String
exeDurationMillis :: Maybe Double
exeVideoInfo :: Maybe VideoInfo
exeType :: Text
exeSizes :: HashMap Text MediaSize
exeMediaUrlHttps :: Text
exeMediaUrl :: Text
exeID :: StatusId
exeURL :: ExtendedEntity -> URLEntity
exeExtAltText :: ExtendedEntity -> Maybe String
exeDurationMillis :: ExtendedEntity -> Maybe Double
exeVideoInfo :: ExtendedEntity -> Maybe VideoInfo
exeType :: ExtendedEntity -> Text
exeSizes :: ExtendedEntity -> HashMap Text MediaSize
exeMediaUrlHttps :: ExtendedEntity -> Text
exeMediaUrl :: ExtendedEntity -> Text
exeID :: ExtendedEntity -> StatusId
..} =
        [Pair] -> Value
object
            [ Key
"id" Key -> StatusId -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= StatusId
exeID
            , Key
"media_url" Key -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Text
exeMediaUrl
            , Key
"media_url_https" Key -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Text
exeMediaUrlHttps
            , Key
"sizes" Key -> HashMap Text MediaSize -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= HashMap Text MediaSize
exeSizes
            , Key
"type" Key -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Text
exeType
            , Key
"video_info" Key -> Maybe VideoInfo -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe VideoInfo
exeVideoInfo
            , Key
"duration_millis" Key -> Maybe Double -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe Double
exeDurationMillis
            , Key
"ext_alt_text" Key -> Maybe String -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe String
exeExtAltText
            , Key
"url" Key -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= URLEntity -> Text
ueURL URLEntity
exeURL
            , Key
"expanded_url" Key -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= URLEntity -> Text
ueExpanded URLEntity
exeURL
            , Key
"display_url" Key -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= URLEntity -> Text
ueDisplay URLEntity
exeURL
            ]

data Contributor = Contributor
    { Contributor -> StatusId
contributorId :: UserId
    , Contributor -> Maybe Text
contributorScreenName :: Maybe Text
    }
    deriving (Int -> Contributor -> ShowS
[Contributor] -> ShowS
Contributor -> String
(Int -> Contributor -> ShowS)
-> (Contributor -> String)
-> ([Contributor] -> ShowS)
-> Show Contributor
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Contributor] -> ShowS
$cshowList :: [Contributor] -> ShowS
show :: Contributor -> String
$cshow :: Contributor -> String
showsPrec :: Int -> Contributor -> ShowS
$cshowsPrec :: Int -> Contributor -> ShowS
Show, Contributor -> Contributor -> Bool
(Contributor -> Contributor -> Bool)
-> (Contributor -> Contributor -> Bool) -> Eq Contributor
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Contributor -> Contributor -> Bool
$c/= :: Contributor -> Contributor -> Bool
== :: Contributor -> Contributor -> Bool
$c== :: Contributor -> Contributor -> Bool
Eq, Typeable Contributor
DataType
Constr
Typeable Contributor
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> Contributor -> c Contributor)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c Contributor)
-> (Contributor -> Constr)
-> (Contributor -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c Contributor))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e))
    -> Maybe (c Contributor))
-> ((forall b. Data b => b -> b) -> Contributor -> Contributor)
-> (forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> Contributor -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> Contributor -> r)
-> (forall u. (forall d. Data d => d -> u) -> Contributor -> [u])
-> (forall u.
    Int -> (forall d. Data d => d -> u) -> Contributor -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> Contributor -> m Contributor)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> Contributor -> m Contributor)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> Contributor -> m Contributor)
-> Data Contributor
Contributor -> DataType
Contributor -> Constr
(forall b. Data b => b -> b) -> Contributor -> Contributor
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Contributor -> c Contributor
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Contributor
forall a.
Typeable a
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> Contributor -> u
forall u. (forall d. Data d => d -> u) -> Contributor -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> Contributor -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> Contributor -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Contributor -> m Contributor
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Contributor -> m Contributor
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Contributor
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Contributor -> c Contributor
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c Contributor)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c Contributor)
$cContributor :: Constr
$tContributor :: DataType
gmapMo :: (forall d. Data d => d -> m d) -> Contributor -> m Contributor
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Contributor -> m Contributor
gmapMp :: (forall d. Data d => d -> m d) -> Contributor -> m Contributor
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Contributor -> m Contributor
gmapM :: (forall d. Data d => d -> m d) -> Contributor -> m Contributor
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Contributor -> m Contributor
gmapQi :: Int -> (forall d. Data d => d -> u) -> Contributor -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> Contributor -> u
gmapQ :: (forall d. Data d => d -> u) -> Contributor -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> Contributor -> [u]
gmapQr :: (r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> Contributor -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> Contributor -> r
gmapQl :: (r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> Contributor -> r
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> Contributor -> r
gmapT :: (forall b. Data b => b -> b) -> Contributor -> Contributor
$cgmapT :: (forall b. Data b => b -> b) -> Contributor -> Contributor
dataCast2 :: (forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c Contributor)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c Contributor)
dataCast1 :: (forall d. Data d => c (t d)) -> Maybe (c Contributor)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c Contributor)
dataTypeOf :: Contributor -> DataType
$cdataTypeOf :: Contributor -> DataType
toConstr :: Contributor -> Constr
$ctoConstr :: Contributor -> Constr
gunfold :: (forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Contributor
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Contributor
gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Contributor -> c Contributor
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Contributor -> c Contributor
$cp1Data :: Typeable Contributor
Data, Typeable, (forall x. Contributor -> Rep Contributor x)
-> (forall x. Rep Contributor x -> Contributor)
-> Generic Contributor
forall x. Rep Contributor x -> Contributor
forall x. Contributor -> Rep Contributor x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep Contributor x -> Contributor
$cfrom :: forall x. Contributor -> Rep Contributor x
Generic)

instance FromJSON Contributor where
    parseJSON :: Value -> Parser Contributor
parseJSON (Object Object
o) =
        StatusId -> Maybe Text -> Contributor
Contributor (StatusId -> Maybe Text -> Contributor)
-> Parser StatusId -> Parser (Maybe Text -> Contributor)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser StatusId
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"id"
            Parser (Maybe Text -> Contributor)
-> Parser (Maybe Text) -> Parser Contributor
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"screen_name"
    parseJSON v :: Value
v@(Number Scientific
_) =
        StatusId -> Maybe Text -> Contributor
Contributor (StatusId -> Maybe Text -> Contributor)
-> Parser StatusId -> Parser (Maybe Text -> Contributor)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Value -> Parser StatusId
forall a. FromJSON a => Value -> Parser a
parseJSON Value
v Parser (Maybe Text -> Contributor)
-> Parser (Maybe Text) -> Parser Contributor
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Maybe Text -> Parser (Maybe Text)
forall (f :: * -> *) a. Applicative f => a -> f a
pure Maybe Text
forall a. Maybe a
Nothing
    parseJSON Value
v = String -> Parser Contributor
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> Parser Contributor) -> String -> Parser Contributor
forall a b. (a -> b) -> a -> b
$ String
"couldn't parse contributor from: " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Value -> String
forall a. Show a => a -> String
show Value
v

instance ToJSON Contributor where
    toJSON :: Contributor -> Value
toJSON Contributor {StatusId
Maybe Text
contributorScreenName :: Maybe Text
contributorId :: StatusId
contributorScreenName :: Contributor -> Maybe Text
contributorId :: Contributor -> StatusId
..} =
        [Pair] -> Value
object
            [ Key
"id" Key -> StatusId -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= StatusId
contributorId
            , Key
"screen_name" Key -> Maybe Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Maybe Text
contributorScreenName
            ]

-- | Image size type. This type is included in the API response of \"\/1.1\/media\/upload.json\".
data ImageSizeType = ImageSizeType
    { ImageSizeType -> Int
imageSizeTypeWidth :: Int
    , ImageSizeType -> Int
imageSizeTypeHeight :: Int
    , ImageSizeType -> Text
imageSizeTypeType :: Text
    }
    deriving (Int -> ImageSizeType -> ShowS
[ImageSizeType] -> ShowS
ImageSizeType -> String
(Int -> ImageSizeType -> ShowS)
-> (ImageSizeType -> String)
-> ([ImageSizeType] -> ShowS)
-> Show ImageSizeType
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ImageSizeType] -> ShowS
$cshowList :: [ImageSizeType] -> ShowS
show :: ImageSizeType -> String
$cshow :: ImageSizeType -> String
showsPrec :: Int -> ImageSizeType -> ShowS
$cshowsPrec :: Int -> ImageSizeType -> ShowS
Show, ImageSizeType -> ImageSizeType -> Bool
(ImageSizeType -> ImageSizeType -> Bool)
-> (ImageSizeType -> ImageSizeType -> Bool) -> Eq ImageSizeType
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ImageSizeType -> ImageSizeType -> Bool
$c/= :: ImageSizeType -> ImageSizeType -> Bool
== :: ImageSizeType -> ImageSizeType -> Bool
$c== :: ImageSizeType -> ImageSizeType -> Bool
Eq, Typeable ImageSizeType
DataType
Constr
Typeable ImageSizeType
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> ImageSizeType -> c ImageSizeType)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c ImageSizeType)
-> (ImageSizeType -> Constr)
-> (ImageSizeType -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c ImageSizeType))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e))
    -> Maybe (c ImageSizeType))
-> ((forall b. Data b => b -> b) -> ImageSizeType -> ImageSizeType)
-> (forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> ImageSizeType -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> ImageSizeType -> r)
-> (forall u. (forall d. Data d => d -> u) -> ImageSizeType -> [u])
-> (forall u.
    Int -> (forall d. Data d => d -> u) -> ImageSizeType -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> ImageSizeType -> m ImageSizeType)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> ImageSizeType -> m ImageSizeType)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> ImageSizeType -> m ImageSizeType)
-> Data ImageSizeType
ImageSizeType -> DataType
ImageSizeType -> Constr
(forall b. Data b => b -> b) -> ImageSizeType -> ImageSizeType
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> ImageSizeType -> c ImageSizeType
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c ImageSizeType
forall a.
Typeable a
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> ImageSizeType -> u
forall u. (forall d. Data d => d -> u) -> ImageSizeType -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> ImageSizeType -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> ImageSizeType -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> ImageSizeType -> m ImageSizeType
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> ImageSizeType -> m ImageSizeType
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c ImageSizeType
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> ImageSizeType -> c ImageSizeType
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c ImageSizeType)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c ImageSizeType)
$cImageSizeType :: Constr
$tImageSizeType :: DataType
gmapMo :: (forall d. Data d => d -> m d) -> ImageSizeType -> m ImageSizeType
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> ImageSizeType -> m ImageSizeType
gmapMp :: (forall d. Data d => d -> m d) -> ImageSizeType -> m ImageSizeType
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> ImageSizeType -> m ImageSizeType
gmapM :: (forall d. Data d => d -> m d) -> ImageSizeType -> m ImageSizeType
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> ImageSizeType -> m ImageSizeType
gmapQi :: Int -> (forall d. Data d => d -> u) -> ImageSizeType -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> ImageSizeType -> u
gmapQ :: (forall d. Data d => d -> u) -> ImageSizeType -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> ImageSizeType -> [u]
gmapQr :: (r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> ImageSizeType -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> ImageSizeType -> r
gmapQl :: (r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> ImageSizeType -> r
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> ImageSizeType -> r
gmapT :: (forall b. Data b => b -> b) -> ImageSizeType -> ImageSizeType
$cgmapT :: (forall b. Data b => b -> b) -> ImageSizeType -> ImageSizeType
dataCast2 :: (forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c ImageSizeType)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c ImageSizeType)
dataCast1 :: (forall d. Data d => c (t d)) -> Maybe (c ImageSizeType)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c ImageSizeType)
dataTypeOf :: ImageSizeType -> DataType
$cdataTypeOf :: ImageSizeType -> DataType
toConstr :: ImageSizeType -> Constr
$ctoConstr :: ImageSizeType -> Constr
gunfold :: (forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c ImageSizeType
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c ImageSizeType
gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> ImageSizeType -> c ImageSizeType
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> ImageSizeType -> c ImageSizeType
$cp1Data :: Typeable ImageSizeType
Data, Typeable, (forall x. ImageSizeType -> Rep ImageSizeType x)
-> (forall x. Rep ImageSizeType x -> ImageSizeType)
-> Generic ImageSizeType
forall x. Rep ImageSizeType x -> ImageSizeType
forall x. ImageSizeType -> Rep ImageSizeType x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep ImageSizeType x -> ImageSizeType
$cfrom :: forall x. ImageSizeType -> Rep ImageSizeType x
Generic)

instance FromJSON ImageSizeType where
    parseJSON :: Value -> Parser ImageSizeType
parseJSON (Object Object
o) =
        Int -> Int -> Text -> ImageSizeType
ImageSizeType (Int -> Int -> Text -> ImageSizeType)
-> Parser Int -> Parser (Int -> Text -> ImageSizeType)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser Int
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"w"
            Parser (Int -> Text -> ImageSizeType)
-> Parser Int -> Parser (Text -> ImageSizeType)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Int
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"h"
            Parser (Text -> ImageSizeType)
-> Parser Text -> Parser ImageSizeType
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"image_type"
    parseJSON Value
v = String -> Parser ImageSizeType
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> Parser ImageSizeType) -> String -> Parser ImageSizeType
forall a b. (a -> b) -> a -> b
$ String
"unknown value: " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Value -> String
forall a. Show a => a -> String
show Value
v

instance ToJSON ImageSizeType where
    toJSON :: ImageSizeType -> Value
toJSON ImageSizeType {Int
Text
imageSizeTypeType :: Text
imageSizeTypeHeight :: Int
imageSizeTypeWidth :: Int
imageSizeTypeType :: ImageSizeType -> Text
imageSizeTypeHeight :: ImageSizeType -> Int
imageSizeTypeWidth :: ImageSizeType -> Int
..} =
        [Pair] -> Value
object
            [ Key
"w" Key -> Int -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Int
imageSizeTypeWidth
            , Key
"h" Key -> Int -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Int
imageSizeTypeHeight
            , Key
"image_type" Key -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Text
imageSizeTypeType
            ]

-- | This type is represents the API response of \"\/1.1\/media\/upload.json\".
-- See <https://dev.twitter.com/docs/api/multiple-media-extended-entities>.
data UploadedMedia = UploadedMedia
    { UploadedMedia -> StatusId
uploadedMediaId :: Integer
    , UploadedMedia -> StatusId
uploadedMediaSize :: Integer
    , UploadedMedia -> ImageSizeType
uploadedMediaImage :: ImageSizeType
    }
    deriving (Int -> UploadedMedia -> ShowS
[UploadedMedia] -> ShowS
UploadedMedia -> String
(Int -> UploadedMedia -> ShowS)
-> (UploadedMedia -> String)
-> ([UploadedMedia] -> ShowS)
-> Show UploadedMedia
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [UploadedMedia] -> ShowS
$cshowList :: [UploadedMedia] -> ShowS
show :: UploadedMedia -> String
$cshow :: UploadedMedia -> String
showsPrec :: Int -> UploadedMedia -> ShowS
$cshowsPrec :: Int -> UploadedMedia -> ShowS
Show, UploadedMedia -> UploadedMedia -> Bool
(UploadedMedia -> UploadedMedia -> Bool)
-> (UploadedMedia -> UploadedMedia -> Bool) -> Eq UploadedMedia
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: UploadedMedia -> UploadedMedia -> Bool
$c/= :: UploadedMedia -> UploadedMedia -> Bool
== :: UploadedMedia -> UploadedMedia -> Bool
$c== :: UploadedMedia -> UploadedMedia -> Bool
Eq, Typeable UploadedMedia
DataType
Constr
Typeable UploadedMedia
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> UploadedMedia -> c UploadedMedia)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c UploadedMedia)
-> (UploadedMedia -> Constr)
-> (UploadedMedia -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c UploadedMedia))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e))
    -> Maybe (c UploadedMedia))
-> ((forall b. Data b => b -> b) -> UploadedMedia -> UploadedMedia)
-> (forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> UploadedMedia -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> UploadedMedia -> r)
-> (forall u. (forall d. Data d => d -> u) -> UploadedMedia -> [u])
-> (forall u.
    Int -> (forall d. Data d => d -> u) -> UploadedMedia -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> UploadedMedia -> m UploadedMedia)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> UploadedMedia -> m UploadedMedia)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> UploadedMedia -> m UploadedMedia)
-> Data UploadedMedia
UploadedMedia -> DataType
UploadedMedia -> Constr
(forall b. Data b => b -> b) -> UploadedMedia -> UploadedMedia
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> UploadedMedia -> c UploadedMedia
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c UploadedMedia
forall a.
Typeable a
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> UploadedMedia -> u
forall u. (forall d. Data d => d -> u) -> UploadedMedia -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> UploadedMedia -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> UploadedMedia -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> UploadedMedia -> m UploadedMedia
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> UploadedMedia -> m UploadedMedia
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c UploadedMedia
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> UploadedMedia -> c UploadedMedia
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c UploadedMedia)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c UploadedMedia)
$cUploadedMedia :: Constr
$tUploadedMedia :: DataType
gmapMo :: (forall d. Data d => d -> m d) -> UploadedMedia -> m UploadedMedia
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> UploadedMedia -> m UploadedMedia
gmapMp :: (forall d. Data d => d -> m d) -> UploadedMedia -> m UploadedMedia
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> UploadedMedia -> m UploadedMedia
gmapM :: (forall d. Data d => d -> m d) -> UploadedMedia -> m UploadedMedia
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> UploadedMedia -> m UploadedMedia
gmapQi :: Int -> (forall d. Data d => d -> u) -> UploadedMedia -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> UploadedMedia -> u
gmapQ :: (forall d. Data d => d -> u) -> UploadedMedia -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> UploadedMedia -> [u]
gmapQr :: (r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> UploadedMedia -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> UploadedMedia -> r
gmapQl :: (r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> UploadedMedia -> r
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> UploadedMedia -> r
gmapT :: (forall b. Data b => b -> b) -> UploadedMedia -> UploadedMedia
$cgmapT :: (forall b. Data b => b -> b) -> UploadedMedia -> UploadedMedia
dataCast2 :: (forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c UploadedMedia)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c UploadedMedia)
dataCast1 :: (forall d. Data d => c (t d)) -> Maybe (c UploadedMedia)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c UploadedMedia)
dataTypeOf :: UploadedMedia -> DataType
$cdataTypeOf :: UploadedMedia -> DataType
toConstr :: UploadedMedia -> Constr
$ctoConstr :: UploadedMedia -> Constr
gunfold :: (forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c UploadedMedia
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c UploadedMedia
gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> UploadedMedia -> c UploadedMedia
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> UploadedMedia -> c UploadedMedia
$cp1Data :: Typeable UploadedMedia
Data, Typeable, (forall x. UploadedMedia -> Rep UploadedMedia x)
-> (forall x. Rep UploadedMedia x -> UploadedMedia)
-> Generic UploadedMedia
forall x. Rep UploadedMedia x -> UploadedMedia
forall x. UploadedMedia -> Rep UploadedMedia x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep UploadedMedia x -> UploadedMedia
$cfrom :: forall x. UploadedMedia -> Rep UploadedMedia x
Generic)

instance FromJSON UploadedMedia where
    parseJSON :: Value -> Parser UploadedMedia
parseJSON (Object Object
o) =
        StatusId -> StatusId -> ImageSizeType -> UploadedMedia
UploadedMedia (StatusId -> StatusId -> ImageSizeType -> UploadedMedia)
-> Parser StatusId
-> Parser (StatusId -> ImageSizeType -> UploadedMedia)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser StatusId
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"media_id"
            Parser (StatusId -> ImageSizeType -> UploadedMedia)
-> Parser StatusId -> Parser (ImageSizeType -> UploadedMedia)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser StatusId
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"size"
            Parser (ImageSizeType -> UploadedMedia)
-> Parser ImageSizeType -> Parser UploadedMedia
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser ImageSizeType
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"image"
    parseJSON Value
v = String -> Parser UploadedMedia
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> Parser UploadedMedia) -> String -> Parser UploadedMedia
forall a b. (a -> b) -> a -> b
$ String
"unknown value: " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Value -> String
forall a. Show a => a -> String
show Value
v

instance ToJSON UploadedMedia where
    toJSON :: UploadedMedia -> Value
toJSON UploadedMedia {StatusId
ImageSizeType
uploadedMediaImage :: ImageSizeType
uploadedMediaSize :: StatusId
uploadedMediaId :: StatusId
uploadedMediaImage :: UploadedMedia -> ImageSizeType
uploadedMediaSize :: UploadedMedia -> StatusId
uploadedMediaId :: UploadedMedia -> StatusId
..} =
        [Pair] -> Value
object
            [ Key
"media_id" Key -> StatusId -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= StatusId
uploadedMediaId
            , Key
"size" Key -> StatusId -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= StatusId
uploadedMediaSize
            , Key
"image" Key -> ImageSizeType -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= ImageSizeType
uploadedMediaImage
            ]

-- | unicode code point indices, identifying the inclusive start and exclusive end of the displayable content of the Tweet.
data DisplayTextRange = DisplayTextRange
    { DisplayTextRange -> Int
displayTextRangeStart :: Int
    , -- | exclusive
      DisplayTextRange -> Int
displayTextRangeEnd :: Int
    }
    deriving (Int -> DisplayTextRange -> ShowS
[DisplayTextRange] -> ShowS
DisplayTextRange -> String
(Int -> DisplayTextRange -> ShowS)
-> (DisplayTextRange -> String)
-> ([DisplayTextRange] -> ShowS)
-> Show DisplayTextRange
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DisplayTextRange] -> ShowS
$cshowList :: [DisplayTextRange] -> ShowS
show :: DisplayTextRange -> String
$cshow :: DisplayTextRange -> String
showsPrec :: Int -> DisplayTextRange -> ShowS
$cshowsPrec :: Int -> DisplayTextRange -> ShowS
Show, DisplayTextRange -> DisplayTextRange -> Bool
(DisplayTextRange -> DisplayTextRange -> Bool)
-> (DisplayTextRange -> DisplayTextRange -> Bool)
-> Eq DisplayTextRange
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DisplayTextRange -> DisplayTextRange -> Bool
$c/= :: DisplayTextRange -> DisplayTextRange -> Bool
== :: DisplayTextRange -> DisplayTextRange -> Bool
$c== :: DisplayTextRange -> DisplayTextRange -> Bool
Eq, Eq DisplayTextRange
Eq DisplayTextRange
-> (DisplayTextRange -> DisplayTextRange -> Ordering)
-> (DisplayTextRange -> DisplayTextRange -> Bool)
-> (DisplayTextRange -> DisplayTextRange -> Bool)
-> (DisplayTextRange -> DisplayTextRange -> Bool)
-> (DisplayTextRange -> DisplayTextRange -> Bool)
-> (DisplayTextRange -> DisplayTextRange -> DisplayTextRange)
-> (DisplayTextRange -> DisplayTextRange -> DisplayTextRange)
-> Ord DisplayTextRange
DisplayTextRange -> DisplayTextRange -> Bool
DisplayTextRange -> DisplayTextRange -> Ordering
DisplayTextRange -> DisplayTextRange -> DisplayTextRange
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: DisplayTextRange -> DisplayTextRange -> DisplayTextRange
$cmin :: DisplayTextRange -> DisplayTextRange -> DisplayTextRange
max :: DisplayTextRange -> DisplayTextRange -> DisplayTextRange
$cmax :: DisplayTextRange -> DisplayTextRange -> DisplayTextRange
>= :: DisplayTextRange -> DisplayTextRange -> Bool
$c>= :: DisplayTextRange -> DisplayTextRange -> Bool
> :: DisplayTextRange -> DisplayTextRange -> Bool
$c> :: DisplayTextRange -> DisplayTextRange -> Bool
<= :: DisplayTextRange -> DisplayTextRange -> Bool
$c<= :: DisplayTextRange -> DisplayTextRange -> Bool
< :: DisplayTextRange -> DisplayTextRange -> Bool
$c< :: DisplayTextRange -> DisplayTextRange -> Bool
compare :: DisplayTextRange -> DisplayTextRange -> Ordering
$ccompare :: DisplayTextRange -> DisplayTextRange -> Ordering
$cp1Ord :: Eq DisplayTextRange
Ord, Typeable DisplayTextRange
DataType
Constr
Typeable DisplayTextRange
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> DisplayTextRange -> c DisplayTextRange)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c DisplayTextRange)
-> (DisplayTextRange -> Constr)
-> (DisplayTextRange -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c DisplayTextRange))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e))
    -> Maybe (c DisplayTextRange))
-> ((forall b. Data b => b -> b)
    -> DisplayTextRange -> DisplayTextRange)
-> (forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> DisplayTextRange -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> DisplayTextRange -> r)
-> (forall u.
    (forall d. Data d => d -> u) -> DisplayTextRange -> [u])
-> (forall u.
    Int -> (forall d. Data d => d -> u) -> DisplayTextRange -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d)
    -> DisplayTextRange -> m DisplayTextRange)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> DisplayTextRange -> m DisplayTextRange)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> DisplayTextRange -> m DisplayTextRange)
-> Data DisplayTextRange
DisplayTextRange -> DataType
DisplayTextRange -> Constr
(forall b. Data b => b -> b)
-> DisplayTextRange -> DisplayTextRange
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> DisplayTextRange -> c DisplayTextRange
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c DisplayTextRange
forall a.
Typeable a
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u.
Int -> (forall d. Data d => d -> u) -> DisplayTextRange -> u
forall u. (forall d. Data d => d -> u) -> DisplayTextRange -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> DisplayTextRange -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> DisplayTextRange -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> DisplayTextRange -> m DisplayTextRange
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> DisplayTextRange -> m DisplayTextRange
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c DisplayTextRange
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> DisplayTextRange -> c DisplayTextRange
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c DisplayTextRange)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c DisplayTextRange)
$cDisplayTextRange :: Constr
$tDisplayTextRange :: DataType
gmapMo :: (forall d. Data d => d -> m d)
-> DisplayTextRange -> m DisplayTextRange
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> DisplayTextRange -> m DisplayTextRange
gmapMp :: (forall d. Data d => d -> m d)
-> DisplayTextRange -> m DisplayTextRange
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> DisplayTextRange -> m DisplayTextRange
gmapM :: (forall d. Data d => d -> m d)
-> DisplayTextRange -> m DisplayTextRange
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> DisplayTextRange -> m DisplayTextRange
gmapQi :: Int -> (forall d. Data d => d -> u) -> DisplayTextRange -> u
$cgmapQi :: forall u.
Int -> (forall d. Data d => d -> u) -> DisplayTextRange -> u
gmapQ :: (forall d. Data d => d -> u) -> DisplayTextRange -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> DisplayTextRange -> [u]
gmapQr :: (r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> DisplayTextRange -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> DisplayTextRange -> r
gmapQl :: (r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> DisplayTextRange -> r
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> DisplayTextRange -> r
gmapT :: (forall b. Data b => b -> b)
-> DisplayTextRange -> DisplayTextRange
$cgmapT :: (forall b. Data b => b -> b)
-> DisplayTextRange -> DisplayTextRange
dataCast2 :: (forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c DisplayTextRange)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c DisplayTextRange)
dataCast1 :: (forall d. Data d => c (t d)) -> Maybe (c DisplayTextRange)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c DisplayTextRange)
dataTypeOf :: DisplayTextRange -> DataType
$cdataTypeOf :: DisplayTextRange -> DataType
toConstr :: DisplayTextRange -> Constr
$ctoConstr :: DisplayTextRange -> Constr
gunfold :: (forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c DisplayTextRange
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c DisplayTextRange
gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> DisplayTextRange -> c DisplayTextRange
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> DisplayTextRange -> c DisplayTextRange
$cp1Data :: Typeable DisplayTextRange
Data, Typeable, (forall x. DisplayTextRange -> Rep DisplayTextRange x)
-> (forall x. Rep DisplayTextRange x -> DisplayTextRange)
-> Generic DisplayTextRange
forall x. Rep DisplayTextRange x -> DisplayTextRange
forall x. DisplayTextRange -> Rep DisplayTextRange x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep DisplayTextRange x -> DisplayTextRange
$cfrom :: forall x. DisplayTextRange -> Rep DisplayTextRange x
Generic)

instance FromJSON DisplayTextRange where
    parseJSON :: Value -> Parser DisplayTextRange
parseJSON Value
v = do
        Value -> Parser EntityIndices
forall a. FromJSON a => Value -> Parser a
parseJSON Value
v Parser EntityIndices
-> (EntityIndices -> Parser DisplayTextRange)
-> Parser DisplayTextRange
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \case
            [Int
s, Int
e] -> DisplayTextRange -> Parser DisplayTextRange
forall (f :: * -> *) a. Applicative f => a -> f a
pure (DisplayTextRange -> Parser DisplayTextRange)
-> DisplayTextRange -> Parser DisplayTextRange
forall a b. (a -> b) -> a -> b
$ Int -> Int -> DisplayTextRange
DisplayTextRange Int
s Int
e
            EntityIndices
unexpected ->
                String -> Parser DisplayTextRange
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> Parser DisplayTextRange)
-> String -> Parser DisplayTextRange
forall a b. (a -> b) -> a -> b
$ String
"parsing DisplayTextRange failed, expected [Int, Int], but got: " String -> ShowS
forall a. [a] -> [a] -> [a]
++ EntityIndices -> String
forall a. Show a => a -> String
show EntityIndices
unexpected
instance ToJSON DisplayTextRange where
    toJSON :: DisplayTextRange -> Value
toJSON (DisplayTextRange Int
s Int
e) = EntityIndices -> Value
forall a. ToJSON a => a -> Value
toJSON [Int
s, Int
e]