1 package kotlinx.benchmarks.model
2
3 import kotlinx.serialization.*
4 import kotlinx.serialization.json.*
5
mainnull6 fun main() {
7 val s = MacroTwitterFeed::class.java.getResource("/twitter_macro.json").readBytes().decodeToString()
8 println(Json.decodeFromString<MacroTwitterFeed>(s))
9 }
10
11 /*
12 * Data model for twitter.json feed
13 */
14
15 @Serializable
16 data class Twitter(
17 val search_metadata: SearchMetadata,
18 val statuses: List<Status>
19 )
20
21 @Serializable
22 data class SearchMetadata(
23 val completed_in: Double,
24 val count: Int,
25 val max_id: Long,
26 val max_id_str: String,
27 val next_results: String,
28 val query: String,
29 val refresh_url: String,
30 val since_id: Int,
31 val since_id_str: String
32 )
33
34 @Serializable
35 data class Status(
36 val created_at: String,
37 val entities: Entities,
38 val favorited: Boolean,
39 val id: Long,
40 val id_str: String,
41 val possibly_sensitive: Boolean = false,
42 val retweet_count: Int,
43 val retweeted: Boolean,
44 val source: String,
45 val text: String,
46 val truncated: Boolean,
47 val user: User
48 )
49
50 @Serializable
51 data class Entities(
52 val hashtags: List<Hashtag>,
53 val media: List<Media> = emptyList(),
54 val urls: List<Url>,
55 val user_mentions: List<UserMention>
56 )
57
58 @Serializable
59 data class User(
60 val contributors_enabled: Boolean,
61 val created_at: String,
62 val default_profile: Boolean,
63 val default_profile_image: Boolean,
64 val description: String,
65 val favourites_count: Int,
66 val follow_request_sent: Boolean,
67 val followers_count: Int,
68 val following: Boolean,
69 val friends_count: Int,
70 val geo_enabled: Boolean,
71 val id: Int,
72 val id_str: String,
73 val is_translator: Boolean,
74 val lang: String,
75 val listed_count: Int,
76 val location: String,
77 val name: String,
78 val notifications: Boolean,
79 val profile_background_color: String,
80 val profile_background_image_url: String,
81 val profile_background_image_url_https: String,
82 val profile_background_tile: Boolean,
83 val profile_image_url: String,
84 val profile_image_url_https: String,
85 val profile_link_color: String,
86 val profile_sidebar_border_color: String,
87 val profile_sidebar_fill_color: String,
88 val profile_text_color: String,
89 val profile_use_background_image: Boolean,
90 val url: String? = null,
91 val `protected`: Boolean,
92 val screen_name: String,
93 val show_all_inline_media: Boolean,
94 val statuses_count: Int,
95 val time_zone: String?,
96 val utc_offset: Int?,
97 val verified: Boolean
98 )
99
100 @Serializable
101 data class Hashtag(
102 val indices: List<Int>,
103 val text: String
104 )
105
106 @Serializable
107 data class Media(
108 val display_url: String,
109 val expanded_url: String,
110 val id: Long,
111 val id_str: String,
112 val indices: List<Int>,
113 val media_url: String,
114 val media_url_https: String,
115 val sizes: Sizes,
116 val type: String,
117 val url: String
118 )
119
120 @Serializable
121 data class Url(
122 val display_url: String,
123 val expanded_url: String,
124 val indices: List<Int>,
125 val url: String
126 )
127
128 @Serializable
129 data class UserMention(
130 val id: Int,
131 val id_str: String,
132 val indices: List<Int>,
133 val name: String,
134 val screen_name: String
135 )
136
137 @Serializable
138 data class Sizes(
139 val large: Large,
140 val medium: Medium,
141 val small: Small,
142 val thumb: Thumb
143 )
144
145 @Serializable
146 data class Large(
147 val h: Int,
148 val resize: String,
149 val w: Int
150 )
151
152 @Serializable
153 data class Medium(
154 val h: Int,
155 val resize: String,
156 val w: Int
157 )
158
159 @Serializable
160 data class Small(
161 val h: Int,
162 val resize: String,
163 val w: Int
164 )
165
166 @Serializable
167 data class Thumb(
168 val h: Int,
169 val resize: String,
170 val w: Int
171 )
172