jsonifier-0.1.2.1: bench/Main/Aeson.hs
module Main.Aeson where
import Data.Aeson hiding (Result)
import qualified Data.ByteString.Builder as ByteStringBuilder
import qualified Data.ByteString.Builder.Extra as ByteStringBuilder
import qualified Data.ByteString.Lazy as Lbs
import Main.Model
import Prelude
resultToLazyByteStringWithUntrimmedStrategy :: Result -> Lbs.ByteString
resultToLazyByteStringWithUntrimmedStrategy =
ByteStringBuilder.toLazyByteStringWith
(ByteStringBuilder.untrimmedStrategy 32000 32000)
Lbs.empty
. resultToByteStringBuilder
resultToByteStringBuilder :: Result -> ByteStringBuilder.Builder
resultToByteStringBuilder =
fromEncoding . toEncoding
instance ToJSON Metadata where
toJSON Metadata {..} =
object
[ "result_type" .= result_type
]
toEncoding Metadata {..} =
pairs $
"result_type" .= result_type
instance FromJSON Metadata where
parseJSON (Object v) = Metadata <$> v .: "result_type"
parseJSON _ = empty
instance ToJSON Geo where
toJSON Geo {..} =
object
[ "type_" .= type_,
"coordinates" .= coordinates
]
toEncoding Geo {..} =
pairs $
"type_" .= type_
<> "coordinates" .= coordinates
instance FromJSON Geo where
parseJSON (Object v) =
Geo
<$> v .: "type_"
<*> v .: "coordinates"
parseJSON _ = empty
instance ToJSON Story where
toJSON Story {..} =
object
[ "from_user_id_str" .= from_user_id_str,
"profile_image_url" .= profile_image_url,
"created_at" .= created_at,
"from_user" .= from_user,
"id_str" .= id_str,
"metadata" .= metadata,
"to_user_id" .= to_user_id,
"text" .= text,
"id" .= id,
"from_user_id" .= from_user_id,
"geo" .= geo,
"iso_language_code" .= iso_language_code,
"to_user_id_str" .= to_user_id_str,
"source" .= source
]
toEncoding Story {..} =
pairs $
"from_user_id_str" .= from_user_id_str
<> "profile_image_url" .= profile_image_url
<> "created_at" .= created_at
<> "from_user" .= from_user
<> "id_str" .= id_str
<> "metadata" .= metadata
<> "to_user_id" .= to_user_id
<> "text" .= text
<> "id" .= id
<> "from_user_id" .= from_user_id
<> "geo" .= geo
<> "iso_language_code" .= iso_language_code
<> "to_user_id_str" .= to_user_id_str
<> "source" .= source
instance FromJSON Story where
parseJSON (Object v) =
Story
<$> v .: "from_user_id_str"
<*> v .: "profile_image_url"
<*> v .: "created_at"
<*> v .: "from_user"
<*> v .: "id_str"
<*> v .: "metadata"
<*> v .: "to_user_id"
<*> v .: "text"
<*> v .: "id"
<*> v .: "from_user_id"
<*> v .: "geo"
<*> v .: "iso_language_code"
<*> v .: "to_user_id_str"
<*> v .: "source"
parseJSON _ = empty
instance ToJSON Result where
toJSON Result {..} =
object
[ "results" .= results,
"max_id" .= max_id,
"since_id" .= since_id,
"refresh_url" .= refresh_url,
"next_page" .= next_page,
"results_per_page" .= results_per_page,
"page" .= page,
"completed_in" .= completed_in,
"since_id_str" .= since_id_str,
"max_id_str" .= max_id_str,
"query" .= query
]
toEncoding Result {..} =
pairs $
"results" .= results
<> "max_id" .= max_id
<> "since_id" .= since_id
<> "refresh_url" .= refresh_url
<> "next_page" .= next_page
<> "results_per_page" .= results_per_page
<> "page" .= page
<> "completed_in" .= completed_in
<> "since_id_str" .= since_id_str
<> "max_id_str" .= max_id_str
<> "query" .= query
instance FromJSON Result where
parseJSON (Object v) =
Result
<$> v .: "results"
<*> v .: "max_id"
<*> v .: "since_id"
<*> v .: "refresh_url"
<*> v .: "next_page"
<*> v .: "results_per_page"
<*> v .: "page"
<*> v .: "completed_in"
<*> v .: "since_id_str"
<*> v .: "max_id_str"
<*> v .: "query"
parseJSON _ = empty