{-# LANGUAGE DeriveGeneric     #-}

module Web.Tweet.Parser.FastParser ( fastParse
                                   , FastTweet (..)
                                   ) where

import GHC.Generics
import Data.Aeson
import qualified Data.Text as T
import qualified Data.ByteString.Lazy as BSL
import qualified Data.ByteString as BS
--import Data.Vector

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

fastParse :: BS.ByteString -> Either String [FastTweet] -- (Vector FastTweet)
fastParse = eitherDecode . BSL.fromStrict