1
16
17 package decoder
18
19 import (
20 `os`
21 )
22
23 var (
24 debugSyncGC = os.Getenv("SONIC_SYNC_GC") != ""
25 debugAsyncGC = os.Getenv("SONIC_NO_ASYNC_GC") == ""
26 )
27
28
29 const TwitterJson = `{
30 "statuses": [
31 {
32 "coordinates": null,
33 "favorited": false,
34 "truncated": false,
35 "created_at": "Mon Sep 24 03:35:21 +0000 2012",
36 "id_str": "250075927172759552",
37 "entities": {
38 "urls": [
39
40 ],
41 "hashtags": [
42 {
43 "text": "freebandnames",
44 "indices": [
45 20,
46 34
47 ]
48 }
49 ],
50 "user_mentions": [
51
52 ]
53 },
54 "in_reply_to_user_id_str": null,
55 "contributors": null,
56 "text": "Aggressive Ponytail #freebandnames",
57 "metadata": {
58 "iso_language_code": "en",
59 "result_type": "recent"
60 },
61 "retweet_count": 0,
62 "in_reply_to_status_id_str": null,
63 "id": 250075927172759552,
64 "geo": null,
65 "retweeted": false,
66 "in_reply_to_user_id": null,
67 "place": null,
68 "user": {
69 "profile_sidebar_fill_color": "DDEEF6",
70 "profile_sidebar_border_color": "C0DEED",
71 "profile_background_tile": false,
72 "name": "Sean Cummings",
73 "profile_image_url": "https://a0.twimg.com/profile_images/2359746665/1v6zfgqo8g0d3mk7ii5s_normal.jpeg",
74 "created_at": "Mon Apr 26 06:01:55 +0000 2010",
75 "location": "LA, CA",
76 "follow_request_sent": null,
77 "profile_link_color": "0084B4",
78 "is_translator": false,
79 "id_str": "137238150",
80 "entities": {
81 "url": {
82 "urls": [
83 {
84 "expanded_url": null,
85 "url": "",
86 "indices": [
87 0,
88 0
89 ]
90 }
91 ]
92 },
93 "description": {
94 "urls": [
95
96 ]
97 }
98 },
99 "default_profile": true,
100 "contributors_enabled": false,
101 "favourites_count": 0,
102 "url": null,
103 "profile_image_url_https": "https://si0.twimg.com/profile_images/2359746665/1v6zfgqo8g0d3mk7ii5s_normal.jpeg",
104 "utc_offset": -28800,
105 "id": 137238150,
106 "profile_use_background_image": true,
107 "listed_count": 2,
108 "profile_text_color": "333333",
109 "lang": "en",
110 "followers_count": 70,
111 "protected": false,
112 "notifications": null,
113 "profile_background_image_url_https": "https://si0.twimg.com/images/themes/theme1/bg.png",
114 "profile_background_color": "C0DEED",
115 "verified": false,
116 "geo_enabled": true,
117 "time_zone": "Pacific Time (US & Canada)",
118 "description": "Born 330 Live 310",
119 "default_profile_image": false,
120 "profile_background_image_url": "https://a0.twimg.com/images/themes/theme1/bg.png",
121 "statuses_count": 579,
122 "friends_count": 110,
123 "following": null,
124 "show_all_inline_media": false,
125 "screen_name": "sean_cummings"
126 },
127 "in_reply_to_screen_name": null,
128 "source": "<a href=\"//itunes.apple.com/us/app/twitter/id409789998?mt=12%5C%22\" rel=\"\\\"nofollow\\\"\">Twitter for Mac</a>",
129 "in_reply_to_status_id": null
130 },
131 {
132 "coordinates": null,
133 "favorited": false,
134 "truncated": false,
135 "created_at": "Fri Sep 21 23:40:54 +0000 2012",
136 "id_str": "249292149810667520",
137 "entities": {
138 "urls": [
139
140 ],
141 "hashtags": [
142 {
143 "text": "FreeBandNames",
144 "indices": [
145 20,
146 34
147 ]
148 }
149 ],
150 "user_mentions": [
151
152 ]
153 },
154 "in_reply_to_user_id_str": null,
155 "contributors": null,
156 "text": "Thee Namaste Nerdz. #FreeBandNames",
157 "metadata": {
158 "iso_language_code": "pl",
159 "result_type": "recent"
160 },
161 "retweet_count": 0,
162 "in_reply_to_status_id_str": null,
163 "id": 249292149810667520,
164 "geo": null,
165 "retweeted": false,
166 "in_reply_to_user_id": null,
167 "place": null,
168 "user": {
169 "profile_sidebar_fill_color": "DDFFCC",
170 "profile_sidebar_border_color": "BDDCAD",
171 "profile_background_tile": true,
172 "name": "Chaz Martenstein",
173 "profile_image_url": "https://a0.twimg.com/profile_images/447958234/Lichtenstein_normal.jpg",
174 "created_at": "Tue Apr 07 19:05:07 +0000 2009",
175 "location": "Durham, NC",
176 "follow_request_sent": null,
177 "profile_link_color": "0084B4",
178 "is_translator": false,
179 "id_str": "29516238",
180 "entities": {
181 "url": {
182 "urls": [
183 {
184 "expanded_url": null,
185 "url": "https://bullcityrecords.com/wnng/",
186 "indices": [
187 0,
188 32
189 ]
190 }
191 ]
192 },
193 "description": {
194 "urls": [
195
196 ]
197 }
198 },
199 "default_profile": false,
200 "contributors_enabled": false,
201 "favourites_count": 8,
202 "url": "https://bullcityrecords.com/wnng/",
203 "profile_image_url_https": "https://si0.twimg.com/profile_images/447958234/Lichtenstein_normal.jpg",
204 "utc_offset": -18000,
205 "id": 29516238,
206 "profile_use_background_image": true,
207 "listed_count": 118,
208 "profile_text_color": "333333",
209 "lang": "en",
210 "followers_count": 2052,
211 "protected": false,
212 "notifications": null,
213 "profile_background_image_url_https": "https://si0.twimg.com/profile_background_images/9423277/background_tile.bmp",
214 "profile_background_color": "9AE4E8",
215 "verified": false,
216 "geo_enabled": false,
217 "time_zone": "Eastern Time (US & Canada)",
218 "description": "You will come to Durham, North Carolina. I will sell you some records then, here in Durham, North Carolina. Fun will happen.",
219 "default_profile_image": false,
220 "profile_background_image_url": "https://a0.twimg.com/profile_background_images/9423277/background_tile.bmp",
221 "statuses_count": 7579,
222 "friends_count": 348,
223 "following": null,
224 "show_all_inline_media": true,
225 "screen_name": "bullcityrecords"
226 },
227 "in_reply_to_screen_name": null,
228 "source": "web",
229 "in_reply_to_status_id": null
230 },
231 {
232 "coordinates": null,
233 "favorited": false,
234 "truncated": false,
235 "created_at": "Fri Sep 21 23:30:20 +0000 2012",
236 "id_str": "249289491129438208",
237 "entities": {
238 "urls": [
239
240 ],
241 "hashtags": [
242 {
243 "text": "freebandnames",
244 "indices": [
245 29,
246 43
247 ]
248 }
249 ],
250 "user_mentions": [
251
252 ]
253 },
254 "in_reply_to_user_id_str": null,
255 "contributors": null,
256 "text": "Mexican Heaven, Mexican Hell #freebandnames",
257 "metadata": {
258 "iso_language_code": "en",
259 "result_type": "recent"
260 },
261 "retweet_count": 0,
262 "in_reply_to_status_id_str": null,
263 "id": 249289491129438208,
264 "geo": null,
265 "retweeted": false,
266 "in_reply_to_user_id": null,
267 "place": null,
268 "user": {
269 "profile_sidebar_fill_color": "99CC33",
270 "profile_sidebar_border_color": "829D5E",
271 "profile_background_tile": false,
272 "name": "Thomas John Wakeman",
273 "profile_image_url": "https://a0.twimg.com/profile_images/2219333930/Froggystyle_normal.png",
274 "created_at": "Tue Sep 01 21:21:35 +0000 2009",
275 "location": "Kingston New York",
276 "follow_request_sent": null,
277 "profile_link_color": "D02B55",
278 "is_translator": false,
279 "id_str": "70789458",
280 "entities": {
281 "url": {
282 "urls": [
283 {
284 "expanded_url": null,
285 "url": "",
286 "indices": [
287 0,
288 0
289 ]
290 }
291 ]
292 },
293 "description": {
294 "urls": [
295
296 ]
297 }
298 },
299 "default_profile": false,
300 "contributors_enabled": false,
301 "favourites_count": 19,
302 "url": null,
303 "profile_image_url_https": "https://si0.twimg.com/profile_images/2219333930/Froggystyle_normal.png",
304 "utc_offset": -18000,
305 "id": 70789458,
306 "profile_use_background_image": true,
307 "listed_count": 1,
308 "profile_text_color": "3E4415",
309 "lang": "en",
310 "followers_count": 63,
311 "protected": false,
312 "notifications": null,
313 "profile_background_image_url_https": "https://si0.twimg.com/images/themes/theme5/bg.gif",
314 "profile_background_color": "352726",
315 "verified": false,
316 "geo_enabled": false,
317 "time_zone": "Eastern Time (US & Canada)",
318 "description": "Science Fiction Writer, sort of. Likes Superheroes, Mole People, Alt. Timelines.",
319 "default_profile_image": false,
320 "profile_background_image_url": "https://a0.twimg.com/images/themes/theme5/bg.gif",
321 "statuses_count": 1048,
322 "friends_count": 63,
323 "following": null,
324 "show_all_inline_media": false,
325 "screen_name": "MonkiesFist"
326 },
327 "in_reply_to_screen_name": null,
328 "source": "web",
329 "in_reply_to_status_id": null
330 },
331 {
332 "coordinates": null,
333 "favorited": false,
334 "truncated": false,
335 "created_at": "Fri Sep 21 22:51:18 +0000 2012",
336 "id_str": "249279667666817024",
337 "entities": {
338 "urls": [
339
340 ],
341 "hashtags": [
342 {
343 "text": "freebandnames",
344 "indices": [
345 20,
346 34
347 ]
348 }
349 ],
350 "user_mentions": [
351
352 ]
353 },
354 "in_reply_to_user_id_str": null,
355 "contributors": null,
356 "text": "The Foolish Mortals #freebandnames",
357 "metadata": {
358 "iso_language_code": "en",
359 "result_type": "recent"
360 },
361 "retweet_count": 0,
362 "in_reply_to_status_id_str": null,
363 "id": 249279667666817024,
364 "geo": null,
365 "retweeted": false,
366 "in_reply_to_user_id": null,
367 "place": null,
368 "user": {
369 "profile_sidebar_fill_color": "BFAC83",
370 "profile_sidebar_border_color": "615A44",
371 "profile_background_tile": true,
372 "name": "Marty Elmer",
373 "profile_image_url": "https://a0.twimg.com/profile_images/1629790393/shrinker_2000_trans_normal.png",
374 "created_at": "Mon May 04 00:05:00 +0000 2009",
375 "location": "Wisconsin, USA",
376 "follow_request_sent": null,
377 "profile_link_color": "3B2A26",
378 "is_translator": false,
379 "id_str": "37539828",
380 "entities": {
381 "url": {
382 "urls": [
383 {
384 "expanded_url": null,
385 "url": "https://www.omnitarian.me",
386 "indices": [
387 0,
388 24
389 ]
390 }
391 ]
392 },
393 "description": {
394 "urls": [
395
396 ]
397 }
398 },
399 "default_profile": false,
400 "contributors_enabled": false,
401 "favourites_count": 647,
402 "url": "https://www.omnitarian.me",
403 "profile_image_url_https": "https://si0.twimg.com/profile_images/1629790393/shrinker_2000_trans_normal.png",
404 "utc_offset": -21600,
405 "id": 37539828,
406 "profile_use_background_image": true,
407 "listed_count": 52,
408 "profile_text_color": "000000",
409 "lang": "en",
410 "followers_count": 608,
411 "protected": false,
412 "notifications": null,
413 "profile_background_image_url_https": "https://si0.twimg.com/profile_background_images/106455659/rect6056-9.png",
414 "profile_background_color": "EEE3C4",
415 "verified": false,
416 "geo_enabled": false,
417 "time_zone": "Central Time (US & Canada)",
418 "description": "Cartoonist, Illustrator, and T-Shirt connoisseur",
419 "default_profile_image": false,
420 "profile_background_image_url": "https://a0.twimg.com/profile_background_images/106455659/rect6056-9.png",
421 "statuses_count": 3575,
422 "friends_count": 249,
423 "following": null,
424 "show_all_inline_media": true,
425 "screen_name": "Omnitarian"
426 },
427 "in_reply_to_screen_name": null,
428 "source": "<a href=\"//twitter.com/download/iphone%5C%22\" rel=\"\\\"nofollow\\\"\">Twitter for iPhone</a>",
429 "in_reply_to_status_id": null
430 }
431 ],
432 "search_metadata": {
433 "max_id": 250126199840518145,
434 "since_id": 24012619984051000,
435 "refresh_url": "?since_id=250126199840518145&q=%23freebandnames&result_type=mixed&include_entities=1",
436 "next_results": "?max_id=249279667666817023&q=%23freebandnames&count=4&include_entities=1&result_type=mixed",
437 "count": 4,
438 "completed_in": 0.035,
439 "since_id_str": "24012619984051000",
440 "query": "%23freebandnames",
441 "max_id_str": "250126199840518145"
442 }
443 }`
444
445 type TwitterStruct struct {
446 Statuses []Statuses `json:"statuses"`
447 SearchMetadata SearchMetadata `json:"search_metadata"`
448 }
449
450 type Hashtags struct {
451 Text string `json:"text"`
452 Indices []int `json:"indices"`
453 }
454
455 type Entities struct {
456 Urls []interface{} `json:"urls"`
457 Hashtags []Hashtags `json:"hashtags"`
458 UserMentions []interface{} `json:"user_mentions"`
459 }
460
461 type Metadata struct {
462 IsoLanguageCode string `json:"iso_language_code"`
463 ResultType string `json:"result_type"`
464 }
465
466 type Urls struct {
467 ExpandedURL interface{} `json:"expanded_url"`
468 URL string `json:"url"`
469 Indices []int `json:"indices"`
470 }
471
472 type URL struct {
473 Urls []Urls `json:"urls"`
474 }
475
476 type Description struct {
477 Urls []interface{} `json:"urls"`
478 }
479
480 type UserEntities struct {
481 URL URL `json:"url"`
482 Description Description `json:"description"`
483 }
484
485 type User struct {
486 ProfileSidebarFillColor string `json:"profile_sidebar_fill_color"`
487 ProfileSidebarBorderColor string `json:"profile_sidebar_border_color"`
488 ProfileBackgroundTile bool `json:"profile_background_tile"`
489 Name string `json:"name"`
490 ProfileImageURL string `json:"profile_image_url"`
491 CreatedAt string `json:"created_at"`
492 Location string `json:"location"`
493 FollowRequestSent interface{} `json:"follow_request_sent"`
494 ProfileLinkColor string `json:"profile_link_color"`
495 IsTranslator bool `json:"is_translator"`
496 IDStr string `json:"id_str"`
497 Entities UserEntities `json:"entities"`
498 DefaultProfile bool `json:"default_profile"`
499 ContributorsEnabled bool `json:"contributors_enabled"`
500 FavouritesCount int `json:"favourites_count"`
501 URL interface{} `json:"url"`
502 ProfileImageURLHTTPS string `json:"profile_image_url_https"`
503 UtcOffset int `json:"utc_offset"`
504 ID int `json:"id"`
505 ProfileUseBackgroundImage bool `json:"profile_use_background_image"`
506 ListedCount int `json:"listed_count"`
507 ProfileTextColor string `json:"profile_text_color"`
508 Lang string `json:"lang"`
509 FollowersCount int `json:"followers_count"`
510 Protected bool `json:"protected"`
511 Notifications interface{} `json:"notifications"`
512 ProfileBackgroundImageURLHTTPS string `json:"profile_background_image_url_https"`
513 ProfileBackgroundColor string `json:"profile_background_color"`
514 Verified bool `json:"verified"`
515 GeoEnabled bool `json:"geo_enabled"`
516 TimeZone string `json:"time_zone"`
517 Description string `json:"description"`
518 DefaultProfileImage bool `json:"default_profile_image"`
519 ProfileBackgroundImageURL string `json:"profile_background_image_url"`
520 StatusesCount int `json:"statuses_count"`
521 FriendsCount int `json:"friends_count"`
522 Following interface{} `json:"following"`
523 ShowAllInlineMedia bool `json:"show_all_inline_media"`
524 ScreenName string `json:"screen_name"`
525 }
526
527 type Statuses struct {
528 Coordinates interface{} `json:"coordinates"`
529 Favorited bool `json:"favorited"`
530 Truncated bool `json:"truncated"`
531 CreatedAt string `json:"created_at"`
532 IDStr string `json:"id_str"`
533 Entities Entities `json:"entities"`
534 InReplyToUserIDStr interface{} `json:"in_reply_to_user_id_str"`
535 Contributors interface{} `json:"contributors"`
536 Text string `json:"text"`
537 Metadata Metadata `json:"metadata"`
538 RetweetCount int `json:"retweet_count"`
539 InReplyToStatusIDStr interface{} `json:"in_reply_to_status_id_str"`
540 ID int64 `json:"id"`
541 Geo interface{} `json:"geo"`
542 Retweeted bool `json:"retweeted"`
543 InReplyToUserID interface{} `json:"in_reply_to_user_id"`
544 Place interface{} `json:"place"`
545 User User `json:"user"`
546 InReplyToScreenName interface{} `json:"in_reply_to_screen_name"`
547 Source string `json:"source"`
548 InReplyToStatusID interface{} `json:"in_reply_to_status_id"`
549 }
550
551 type SearchMetadata struct {
552 MaxID int64 `json:"max_id"`
553 SinceID int64 `json:"since_id"`
554 RefreshURL string `json:"refresh_url"`
555 NextResults string `json:"next_results"`
556 Count int `json:"count"`
557 CompletedIn float64 `json:"completed_in"`
558 SinceIDStr string `json:"since_id_str"`
559 Query string `json:"query"`
560 MaxIDStr string `json:"max_id_str"`
561 }
562
View as plain text