module Web.Tweet.Parser.FastParser ( fastParse
, fromFast
, FastTweet (..)
) where
import Data.Aeson
import qualified Data.ByteString as BS
import qualified Data.ByteString.Lazy as BSL
import Data.Text (unpack)
import qualified Data.Text as T
import GHC.Generics
import Web.Tweet.Types hiding (name, text)
data FastTweet = FastTweet
{ id :: !Int
, text :: !T.Text
, user :: User
, quoted_status :: Maybe FastTweet
, retweet_count :: !Int
, favorite_count :: !Int
} deriving (Generic, Eq, Show)
data User = User { name :: !T.Text
, screen_name :: !T.Text }
deriving (Generic, Eq, Show)
instance FromJSON FastTweet
instance FromJSON User
fromFast :: FastTweet -> TweetEntity
fromFast FastTweet{..} = TweetEntity (unpack text) (unpack . name $ user) (unpack . screen_name $ user) id (fmap fromFast quoted_status) retweet_count favorite_count
fastParse :: BS.ByteString -> Either String [FastTweet]
fastParse = eitherDecode . BSL.fromStrict