@@ -1,5 +1,6 @@
1-- Manually write instances.
1-- Manually write instances.
3+{-# LANGUAGE CPP, PackageImports #-}
3{-# LANGUAGE OverloadedStrings, RecordWildCards #-}
4{-# LANGUAGE OverloadedStrings, RecordWildCards #-}
4{-# OPTIONS_GHC -fno-warn-orphans #-}
5{-# OPTIONS_GHC -fno-warn-orphans #-}
@@ -12,12 +13,19 @@ module Twitter.Manual
14import Control.Applicative
15import Control.Applicative
15−import Data.Aeson hiding (Result)
16import Data.Monoid ((<>))
16import Data.Monoid ((<>))
17import Prelude hiding (id)
17import Prelude hiding (id)
18import Twitter
18import Twitter
20+#ifndef HAS_BOTH_AESON_AND_BENCHMARKS
21+import Data.Aeson hiding (Result)
23+import "aeson" Data.Aeson hiding (Result)
24+import qualified "aeson-benchmarks" Data.Aeson as B
20instance ToJSON Metadata where
27instance ToJSON Metadata where
21 toJSON Metadata{..} = object [
29 toJSON Metadata{..} = object [
22 "result_type" .= result_type
30 "result_type" .= result_type
@@ -139,3 +147,128 @@ instance FromJSON Result where
139 <*> v .: "max_id_str"
147 <*> v .: "max_id_str"
140 <*> v .: "query"
148 <*> v .: "query"
141 parseJSON _ = empty
149 parseJSON _ = empty
151+#ifdef HAS_BOTH_AESON_AND_BENCHMARKS
152+instance B.ToJSON Metadata where
153+ toJSON Metadata{..} = B.object [
154+ "result_type" B..= result_type
157+ toEncoding Metadata{..} = B.pairs $
158+ "result_type" B..= result_type
160+instance B.FromJSON Metadata where
161+ parseJSON (B.Object v) = Metadata <$> v B..: "result_type"
164+instance B.ToJSON Geo where
165+ toJSON Geo{..} = B.object [
167+ , "coordinates" B..= coordinates
170+ toEncoding Geo{..} = B.pairs $
172+ <> "coordinates" B..= coordinates
174+instance B.FromJSON Geo where
175+ parseJSON (B.Object v) = Geo <$>
177+ <*> v B..: "coordinates"
180+instance B.ToJSON Story where
181+ toJSON Story{..} = B.object [
182+ "from_user_id_str" B..= from_user_id_str
183+ , "profile_image_url" B..= profile_image_url
184+ , "created_at" B..= created_at
185+ , "from_user" B..= from_user
186+ , "id_str" B..= id_str
187+ , "metadata" B..= metadata
188+ , "to_user_id" B..= to_user_id
191+ , "from_user_id" B..= from_user_id
193+ , "iso_language_code" B..= iso_language_code
194+ , "to_user_id_str" B..= to_user_id_str
195+ , "source" B..= source
198+ toEncoding Story{..} = B.pairs $
199+ "from_user_id_str" B..= from_user_id_str
200+ <> "profile_image_url" B..= profile_image_url
201+ <> "created_at" B..= created_at
202+ <> "from_user" B..= from_user
203+ <> "id_str" B..= id_str
204+ <> "metadata" B..= metadata
205+ <> "to_user_id" B..= to_user_id
208+ <> "from_user_id" B..= from_user_id
210+ <> "iso_language_code" B..= iso_language_code
211+ <> "to_user_id_str" B..= to_user_id_str
212+ <> "source" B..= source
214+instance B.FromJSON Story where
215+ parseJSON (B.Object v) = Story <$>
216+ v B..: "from_user_id_str"
217+ <*> v B..: "profile_image_url"
218+ <*> v B..: "created_at"
219+ <*> v B..: "from_user"
221+ <*> v B..: "metadata"
222+ <*> v B..: "to_user_id"
225+ <*> v B..: "from_user_id"
227+ <*> v B..: "iso_language_code"
228+ <*> v B..: "to_user_id_str"
232+instance B.ToJSON Result where
233+ toJSON Result{..} = B.object [
234+ "results" B..= results
235+ , "max_id" B..= max_id
236+ , "since_id" B..= since_id
237+ , "refresh_url" B..= refresh_url
238+ , "next_page" B..= next_page
239+ , "results_per_page" B..= results_per_page
241+ , "completed_in" B..= completed_in
242+ , "since_id_str" B..= since_id_str
243+ , "max_id_str" B..= max_id_str
244+ , "query" B..= query
247+ toEncoding Result{..} = B.pairs $
248+ "results" B..= results
249+ <> "max_id" B..= max_id
250+ <> "since_id" B..= since_id
251+ <> "refresh_url" B..= refresh_url
252+ <> "next_page" B..= next_page
253+ <> "results_per_page" B..= results_per_page
255+ <> "completed_in" B..= completed_in
256+ <> "since_id_str" B..= since_id_str
257+ <> "max_id_str" B..= max_id_str
258+ <> "query" B..= query
260+instance B.FromJSON Result where
261+ parseJSON (B.Object v) = Result <$>
264+ <*> v B..: "since_id"
265+ <*> v B..: "refresh_url"
266+ <*> v B..: "next_page"
267+ <*> v B..: "results_per_page"
269+ <*> v B..: "completed_in"
270+ <*> v B..: "since_id_str"
271+ <*> v B..: "max_id_str"