@@ -0,0 +1,139 @@
1+{-# LANGUAGE OverloadedStrings, RecordWildCards #-}
2+{-# OPTIONS_GHC -fno-warn-orphans #-}
3+
4+module Twitter.Manual
5+ (
6+ Metadata(..)
7+ , Geo(..)
8+ , Story(..)
9+ , Result(..)
10+ ) where
11+
12+import Control.Applicative
13+import Data.Aeson hiding (Result)
14+import Data.Monoid ((<>))
15+import Prelude hiding (id)
16+import Twitter
17+
18+instance ToJSON Metadata where
19+ toJSON Metadata{..} = object [
20+ "result_type" .= result_type
21+ ]
22+
23+ toEncoding Metadata{..} = series $
24+ "result_type" .= result_type
25+
26+instance FromJSON Metadata where
27+ parseJSON (Object v) = Metadata <$> v .: "result_type"
28+ parseJSON _ = empty
29+
30+instance ToJSON Geo where
31+ toJSON Geo{..} = object [
32+ "type_" .= type_
33+ , "coordinates" .= coordinates
34+ ]
35+
36+ toEncoding Geo{..} = series $
37+ "type_" .= type_
38+ <> "coordinates" .= coordinates
39+
40+instance FromJSON Geo where
41+ parseJSON (Object v) = Geo <$>
42+ v .: "type_"
43+ <*> v .: "coordinates"
44+ parseJSON _ = empty
45+
46+instance ToJSON Story where
47+ toJSON Story{..} = object [
48+ "from_user_id_str" .= from_user_id_str
49+ , "profile_image_url" .= profile_image_url
50+ , "created_at" .= created_at
51+ , "from_user" .= from_user
52+ , "id_str" .= id_str
53+ , "metadata" .= metadata
54+ , "to_user_id" .= to_user_id
55+ , "text" .= text
56+ , "id" .= id
57+ , "from_user_id" .= from_user_id
58+ , "geo" .= geo
59+ , "iso_language_code" .= iso_language_code
60+ , "to_user_id_str" .= to_user_id_str
61+ , "source" .= source
62+ ]
63+
64+ toEncoding Story{..} = series $
65+ "from_user_id_str" .= from_user_id_str
66+ <> "profile_image_url" .= profile_image_url
67+ <> "created_at" .= created_at
68+ <> "from_user" .= from_user
69+ <> "id_str" .= id_str
70+ <> "metadata" .= metadata
71+ <> "to_user_id" .= to_user_id
72+ <> "text" .= text
73+ <> "id" .= id
74+ <> "from_user_id" .= from_user_id
75+ <> "geo" .= geo
76+ <> "iso_language_code" .= iso_language_code
77+ <> "to_user_id_str" .= to_user_id_str
78+ <> "source" .= source
79+
80+instance FromJSON Story where
81+ parseJSON (Object v) = Story <$>
82+ v .: "from_user_id_str"
83+ <*> v .: "profile_image_url"
84+ <*> v .: "created_at"
85+ <*> v .: "from_user"
86+ <*> v .: "id_str"
87+ <*> v .: "metadata"
88+ <*> v .: "to_user_id"
89+ <*> v .: "text"
90+ <*> v .: "id"
91+ <*> v .: "from_user_id"
92+ <*> v .: "geo"
93+ <*> v .: "iso_language_code"
94+ <*> v .: "to_user_id_str"
95+ <*> v .: "source"
96+ parseJSON _ = empty
97+
98+instance ToJSON Result where
99+ toJSON Result{..} = object [
100+ "results" .= results
101+ , "max_id" .= max_id
102+ , "since_id" .= since_id
103+ , "refresh_url" .= refresh_url
104+ , "next_page" .= next_page
105+ , "results_per_page" .= results_per_page
106+ , "page" .= page
107+ , "completed_in" .= completed_in
108+ , "since_id_str" .= since_id_str
109+ , "max_id_str" .= max_id_str
110+ , "query" .= query
111+ ]
112+
113+ toEncoding Result{..} = series $
114+ "results" .= results
115+ <> "max_id" .= max_id
116+ <> "since_id" .= since_id
117+ <> "refresh_url" .= refresh_url
118+ <> "next_page" .= next_page
119+ <> "results_per_page" .= results_per_page
120+ <> "page" .= page
121+ <> "completed_in" .= completed_in
122+ <> "since_id_str" .= since_id_str
123+ <> "max_id_str" .= max_id_str
124+ <> "query" .= query
125+
126+instance FromJSON Result where
127+ parseJSON (Object v) = Result <$>
128+ v .: "results"
129+ <*> v .: "max_id"
130+ <*> v .: "since_id"
131+ <*> v .: "refresh_url"
132+ <*> v .: "next_page"
133+ <*> v .: "results_per_page"
134+ <*> v .: "page"
135+ <*> v .: "completed_in"
136+ <*> v .: "since_id_str"
137+ <*> v .: "max_id_str"
138+ <*> v .: "query"
139+ parseJSON _ = empty