1#[derive(Serialize, Deserialize, Debug)]
6#[serde(rename_all = "camelCase")]
7pub struct PSNUser {
8 pub online_id: String,
9 pub np_id: String,
10 pub region: String,
11 pub avatar_url: String,
12 pub about_me: String,
13 pub languages_used: Vec<String>,
14 pub plus: u8,
15 pub trophy_summary: PSNUserTrophySummary,
16}
17
18#[derive(Serialize, Deserialize, Debug)]
19#[serde(rename_all = "camelCase")]
20pub struct PSNUserTrophySummary {
21 pub level: u8,
22 pub progress: u8,
23 pub earned_trophies: EarnedTrophies,
24}
25
26#[derive(Serialize, Deserialize, Debug)]
28#[serde(rename_all = "camelCase")]
29pub struct TrophyTitles {
30 pub total_results: u32,
31 pub offset: u32,
32 pub trophy_titles: Vec<TrophyTitle>,
33}
34
35#[derive(Serialize, Deserialize, Debug)]
36#[serde(rename_all = "camelCase")]
37pub struct TrophyTitle {
38 pub np_communication_id: String,
39 pub trophy_title_name: String,
40 pub trophy_title_detail: String,
41 pub trophy_title_icon_url: String,
42 pub trophy_title_platfrom: String,
43 pub has_trophy_groups: bool,
44 pub defined_trophies: EarnedTrophies,
45 #[serde(alias = "comparedUser")]
46 pub title_detail: TitleDetail,
47}
48
49#[derive(Serialize, Deserialize, Debug)]
50#[serde(rename_all = "camelCase")]
51pub struct TitleDetail {
52 pub progress: u8,
53 pub earned_trophies: EarnedTrophies,
54 pub last_update_date: String,
55}
56
57#[derive(Serialize, Deserialize, Debug)]
58pub struct EarnedTrophies {
59 pub platinum: u32,
60 pub gold: u32,
61 pub silver: u32,
62 pub bronze: u32,
63}
64
65#[derive(Serialize, Deserialize, Debug)]
67#[serde(rename_all = "camelCase")]
68pub struct TrophySet {
69 pub trophies: Vec<Trophy>,
70}
71
72#[derive(Serialize, Deserialize, Debug)]
75#[serde(rename_all = "camelCase")]
76pub struct Trophy {
77 pub trophy_id: u8,
78 pub trophy_hidden: bool,
79 pub trophy_type: Option<String>,
80 pub trophy_name: Option<String>,
81 pub trophy_detail: Option<String>,
82 pub trophy_icon_url: Option<String>,
83 pub trophy_rare: u8,
84 pub trophy_earned_rate: String,
85 #[serde(alias = "comparedUser")]
86 pub user_info: TrophyUser,
87}
88
89#[derive(Serialize, Deserialize, Debug)]
91#[serde(rename_all = "camelCase")]
92pub struct TrophyUser {
93 pub online_id: String,
94 pub earned: bool,
95 pub earned_date: Option<String>,
96}
97
98#[derive(Serialize, Deserialize, Debug)]
100#[serde(rename_all = "camelCase")]
101pub struct MessageThreadsSummary {
102 pub threads: Vec<MessageThreadSummary>,
103 pub start: u32,
104 pub size: u32,
105 pub total_size: u32,
106}
107
108#[derive(Serialize, Deserialize, Debug)]
109#[serde(rename_all = "camelCase")]
110pub struct MessageThreadSummary {
111 pub thread_id: String,
112 pub thread_type: u8,
113 pub thread_modified_date: String,
114}
115
116#[derive(Serialize, Deserialize, Debug)]
118#[serde(rename_all = "camelCase")]
119pub struct MessageThread {
120 pub thread_members: Vec<ThreadMember>,
121 pub thread_name_detail: ThreadName,
122 pub thread_thumbnail_detail: ThreadThumbnail,
123 pub thread_property: ThreadProperty,
124 pub new_arrival_event_detail: NewArrivalEventDetail,
125 pub thread_events: Vec<ThreadEvent>,
126 pub thread_id: String,
127 pub thread_type: u8,
128 pub thread_modified_date: String,
129 pub results_count: u32,
130 pub max_event_index_cursor: String,
131 pub since_event_index_cursor: String,
132 pub latest_event_index: String,
133 pub end_of_thread_event: bool,
134}
135
136#[derive(Serialize, Deserialize, Debug)]
137#[serde(rename_all = "camelCase")]
138pub struct ThreadMember {
139 pub account_id: String,
140 pub online_id: String,
141}
142
143#[derive(Serialize, Deserialize, Debug)]
144#[serde(rename_all = "camelCase")]
145pub struct ThreadName {
146 pub status: u8,
147 pub thread_name: String,
148}
149
150#[derive(Serialize, Deserialize, Debug)]
151#[serde(rename_all = "camelCase")]
152pub struct ThreadThumbnail {
153 pub status: u8,
154}
155
156#[derive(Serialize, Deserialize, Debug)]
157#[serde(rename_all = "camelCase")]
158pub struct ThreadProperty {
159 pub favorite_detail: FavoriteDetail,
160 pub notification_detail: NotificationDetail,
161 pub kickout_flag: bool,
162 pub thread_join_date: String,
163}
164
165#[derive(Serialize, Deserialize, Debug)]
166#[serde(rename_all = "camelCase")]
167pub struct FavoriteDetail {
168 pub favorite_flag: bool,
169}
170
171#[derive(Serialize, Deserialize, Debug)]
172#[serde(rename_all = "camelCase")]
173pub struct NotificationDetail {
174 pub push_notification_flag: bool,
175}
176
177#[derive(Serialize, Deserialize, Debug)]
178#[serde(rename_all = "camelCase")]
179pub struct NewArrivalEventDetail {
180 pub new_arrival_event_flag: bool,
181}
182
183#[derive(Serialize, Deserialize, Debug)]
184#[serde(rename_all = "camelCase")]
185pub struct ThreadEvent {
186 pub message_event_detail: MessageEventDetail,
187}
188
189#[derive(Serialize, Deserialize, Debug)]
190#[serde(rename_all = "camelCase")]
191pub struct MessageEventDetail {
192 pub event_index: String,
193 pub post_date: String,
194 pub event_category_code: u32,
195 pub alt_event_category_code: u32,
196 pub sender: ThreadMember,
197 pub attached_media_path: Option<String>,
198 pub message_detail: MessageDetail,
199}
200
201#[derive(Serialize, Deserialize, Debug)]
202#[serde(rename_all = "camelCase")]
203pub struct MessageDetail {
204 pub body: Option<String>,
205}
206
207#[derive(Serialize, Deserialize, Debug)]
209#[serde(rename_all = "camelCase")]
210pub struct StoreSearchResult {
211 pub included: Vec<StoreSearchData>,
214}
215
216#[derive(Serialize, Deserialize, Debug)]
217#[serde(rename_all = "camelCase")]
218pub struct StoreSearchData {
219 pub attributes: StoreSearchAttribute,
220 pub id: String,
221 pub relationships: StoreSearchRelationship,
222 #[serde(alias = "type")]
223 pub typ: String,
224}
225
226#[derive(Serialize, Deserialize, Debug)]
227#[serde(rename_all = "camelCase")]
228pub struct StoreSearchAttribute {
230 #[serde(alias = "badge-info")]
231 pub badge_info: BadgeInfo,
232 #[serde(alias = "cero-z-status")]
233 pub ceroz_status: CeroZStatus,
234 #[serde(alias = "content-rating")]
235 pub content_rating: ContentRating,
236 #[serde(alias = "content-type")]
237 pub content_type: String,
238 #[serde(alias = "default-sku-id")]
239 pub default_sku_id: String,
240 #[serde(alias = "dob-required")]
241 pub dob_required: bool,
242 #[serde(alias = "file-size")]
243 pub file_size: FileSize,
244 #[serde(alias = "game-content-type")]
245 pub game_content_type: String,
246 pub genres: Vec<String>,
247 #[serde(alias = "is-igc-upsell")]
248 pub is_igc_upsell: bool,
249 #[serde(alias = "is-multiplayer-upsell")]
250 pub is_multiplayer_upsell: bool,
251 #[serde(alias = "kamaji-relationship")]
252 pub kamaji_relationship: String,
253 #[serde(alias = "legal-text")]
254 pub large_text: String,
255 #[serde(alias = "long-description")]
256 pub long_description: String,
257 #[serde(alias = "macross-brain-context")]
258 pub macross_brain_context: String,
259 #[serde(alias = "media-list")]
260 pub media_list: MediaList,
261 pub name: String,
262 #[serde(alias = "nsx-confirm-message")]
263 pub nsx_confirm_message: String,
264 pub parent: Option<ParentGameInfo>,
265 pub platforms: Vec<String>,
266 #[serde(alias = "plus-reward-description")]
267 pub plus_reward_description: Option<String>,
268 #[serde(alias = "primary-classification")]
269 pub primary_classification: String,
270 #[serde(alias = "secondary-classification")]
271 pub secondary_classification: String,
272 #[serde(alias = "provider-name")]
273 pub provider_name: String,
274 #[serde(alias = "ps-camera-compatibility")]
275 pub ps_camera_compatibility: String,
276 #[serde(alias = "ps-move-compatibility")]
277 pub ps_move_compatibility: String,
278 #[serde(alias = "ps-vr-compatibility")]
279 pub ps_vr_compatibility: String,
280 #[serde(alias = "release-date")]
281 pub release_date: String,
282 pub skus: Vec<Sku>,
283 #[serde(alias = "star-rating")]
284 pub star_rating: StarRating,
285 #[serde(alias = "subtitle-language-codes")]
286 pub subtitle_language_codes: Vec<String>,
288 #[serde(alias = "tertiary-classification")]
289 pub tertiary_classification: String,
290 #[serde(alias = "thumbnail-url-base")]
291 pub thumbnail_url_base: String,
292 #[serde(alias = "top-category")]
293 pub top_category: String,
294 #[serde(alias = "upsell-info")]
295 pub upsell_info: Option<String>,
297 #[serde(alias = "voice-language-codes")]
298 pub voice_language_codes: Vec<String>,
300}
301
302#[derive(Serialize, Deserialize, Debug)]
303#[serde(rename_all = "camelCase")]
304pub struct BadgeInfo {
305 #[serde(alias = "non-plus-user")]
306 pub non_plus_user: Option<BadgeInfoData>,
307 #[serde(alias = "plus-user")]
308 pub plus_user: Option<BadgeInfoData>,
309}
310
311#[derive(Serialize, Deserialize, Debug)]
312#[serde(rename_all = "camelCase")]
313pub struct BadgeInfoData {
314 #[serde(alias = "discount-percentage")]
315 pub discount_percentage: u8,
316 #[serde(alias = "is-plus")]
317 pub is_plus: bool,
318 #[serde(alias = "type")]
319 pub typ: String,
320}
321
322#[derive(Serialize, Deserialize, Debug)]
323#[serde(rename_all = "camelCase")]
324pub struct CeroZStatus {
325 #[serde(alias = "is-allowed-in-cart")]
326 pub is_allowed_in_cart: bool,
327 #[serde(alias = "is-on")]
328 pub is_on: bool,
329}
330
331#[derive(Serialize, Deserialize, Debug)]
332#[serde(rename_all = "camelCase")]
333pub struct ContentRating {
334 #[serde(alias = "content-descriptors")]
335 pub content_descriptors: Vec<ContentDescriptor>,
336 pub content_interactive_element: Vec<ContentInteractiveElement>,
337 #[serde(alias = "rating-system")]
338 pub rating_system: String,
339 pub url: String,
340}
341
342#[derive(Serialize, Deserialize, Debug)]
343#[serde(rename_all = "camelCase")]
344pub struct ContentDescriptor {
345 pub description: String,
346 pub name: String,
347 pub url: Option<String>,
348}
349
350#[derive(Serialize, Deserialize, Debug)]
351#[serde(rename_all = "camelCase")]
352pub struct ContentInteractiveElement {
353 pub description: String,
354 pub name: String,
355}
356
357#[derive(Serialize, Deserialize, Debug)]
358#[serde(rename_all = "camelCase")]
359pub struct FileSize {
360 pub unit: String,
361 pub value: f32,
362}
363
364#[derive(Serialize, Deserialize, Debug)]
365#[serde(rename_all = "camelCase")]
366pub struct MediaList {
367 pub preview: Vec<Link>,
368 pub promo: Promo,
369 pub screenshots: Vec<Link>,
370}
371
372#[derive(Serialize, Deserialize, Debug)]
373#[serde(rename_all = "camelCase")]
374pub struct Promo {
375 pub images: Vec<Link>,
376 pub videos: Vec<Link>,
377}
378
379#[derive(Serialize, Deserialize, Debug)]
380#[serde(rename_all = "camelCase")]
381pub struct Link {
382 pub url: String,
383}
384
385#[derive(Serialize, Deserialize, Debug)]
386#[serde(rename_all = "camelCase")]
387pub struct ParentGameInfo {
388 pub id: String,
389 pub name: String,
390 pub thumbnail: String,
391 pub url: String,
392}
393
394#[derive(Serialize, Deserialize, Debug)]
395#[serde(rename_all = "camelCase")]
396pub struct Sku {
397 pub entitlements: Vec<Entitlement>,
398 pub id: String,
399 #[serde(alias = "is-preorder")]
400 pub is_preorder: bool,
401 pub multibuy: Option<String>,
403 pub name: String,
404 #[serde(alias = "playability-date")]
405 pub playability_date: String,
406 #[serde(alias = "plus-reward-description")]
407 pub plus_reward_description: Option<String>,
408 pub prices: Price,
409}
410
411#[derive(Serialize, Deserialize, Debug)]
412#[serde(rename_all = "camelCase")]
413pub struct Entitlement {
414 pub duration: u32,
415 #[serde(alias = "exp-after-first-use")]
416 pub exp_after_first_use: u32,
417}
418
419#[derive(Serialize, Deserialize, Debug)]
420#[serde(rename_all = "camelCase")]
421pub struct Price {
422 #[serde(alias = "non-plus-user")]
423 pub non_plus_user: PriceData,
424 #[serde(alias = "plus-user")]
425 pub plus_user: PriceData,
426}
427
428#[derive(Serialize, Deserialize, Debug)]
429#[serde(rename_all = "camelCase")]
430pub struct PriceData {
431 #[serde(alias = "actual-price")]
432 pub actual_price: PriceDisplayValue,
433 pub availability: StartEndDate,
434 #[serde(alias = "discount-percentage")]
435 pub discount_percentage: u8,
436 #[serde(alias = "is-plus")]
437 pub is_plus: bool,
438 #[serde(alias = "strikethrough-price")]
439 pub strikethrough_price: Option<PriceDisplayValue>,
440 #[serde(alias = "upsell-price")]
441 pub upsell_price: Option<PriceDisplayValue>,
442}
443
444#[derive(Serialize, Deserialize, Debug)]
445#[serde(rename_all = "camelCase")]
446pub struct PriceDisplayValue {
447 pub display: String,
448 pub value: u16,
449}
450
451#[derive(Serialize, Deserialize, Debug)]
452#[serde(rename_all = "camelCase")]
453pub struct StartEndDate {
454 #[serde(alias = "end-date")]
455 pub end_date: Option<String>,
456 #[serde(alias = "start-date")]
457 pub start_date: Option<String>,
458}
459
460#[derive(Serialize, Deserialize, Debug)]
461#[serde(rename_all = "camelCase")]
462pub struct StarRating {
463 pub score: f32,
464 pub total: u32,
465}
466
467#[derive(Serialize, Deserialize, Debug)]
468#[serde(rename_all = "camelCase")]
469pub struct StoreSearchRelationship {
470 pub children: StoreSearchRelationshipChildren,
471 #[serde(alias = "legacy-skus")]
472 pub legacy_skus: StoreSearchRelationshipLegacySkus,
473}
474
475#[derive(Serialize, Deserialize, Debug)]
476#[serde(rename_all = "camelCase")]
477pub struct StoreSearchRelationshipChildren {
478 pub data: Vec<StoreSearchRelationshipData>,
479}
480
481#[derive(Serialize, Deserialize, Debug)]
482#[serde(rename_all = "camelCase")]
483pub struct StoreSearchRelationshipLegacySkus {
484 pub data: Vec<StoreSearchRelationshipData>,
485}
486
487#[derive(Serialize, Deserialize, Debug)]
488#[serde(rename_all = "camelCase")]
489pub struct StoreSearchRelationshipData {
490 pub id: String,
491 #[serde(alias = "type")]
492 pub typ: String,
493}