Skip to main content

jacquard_api/
games_gamesgamesgamesgames.rs

1// @generated by jacquard-lexicon. DO NOT EDIT.
2//
3// Lexicon: games.gamesgamesgamesgames.defs
4//
5// This file was automatically generated from Lexicon schemas.
6// Any manual changes will be overwritten on the next regeneration.
7
8//! Generated bindings for the `games.gamesgamesgamesgames` Lexicon namespace/module.
9pub mod accept_contribution;
10pub mod actor;
11pub mod auth_admin;
12pub mod auth_basic;
13pub mod auth_contributions;
14pub mod auth_custom_feeds;
15pub mod auth_game_browsing;
16pub mod auth_game_interactions;
17pub mod auth_games_catalog;
18pub mod auth_games_org;
19pub mod auth_profiles;
20pub mod auth_studio;
21pub mod claim;
22pub mod claim_review;
23pub mod collection;
24pub mod contribution;
25pub mod contribution_patch;
26pub mod contribution_review;
27pub mod contribution_verification;
28pub mod create_claim;
29pub mod create_contribution;
30pub mod create_game;
31pub mod create_list;
32pub mod engine;
33pub mod feed;
34pub mod game;
35pub mod get_claim;
36pub mod get_contribution;
37pub mod get_contribution_stats;
38pub mod get_game;
39pub mod get_game_count;
40pub mod get_list_count;
41pub mod get_popular_games;
42pub mod get_profile;
43pub mod get_review_count;
44pub mod get_reviews;
45pub mod get_stats;
46pub mod get_user_lists;
47pub mod graph;
48pub mod list_claims;
49pub mod list_contributions;
50pub mod list_games;
51pub mod list_org_games;
52pub mod migrate_claim;
53pub mod org;
54pub mod platform;
55pub mod platform_family;
56pub mod put_game;
57pub mod put_popularity;
58pub mod redirect;
59pub mod refresh_caches;
60pub mod review_claim;
61pub mod review_contribution;
62pub mod richtext;
63pub mod search;
64pub mod search_profiles_typeahead;
65pub mod search_slugs;
66pub mod slug;
67pub mod toggle_list_item;
68
69#[allow(unused_imports)]
70use alloc::collections::BTreeMap;
71
72#[allow(unused_imports)]
73use core::marker::PhantomData;
74use jacquard_common::deps::bytes::Bytes;
75use jacquard_common::{BosStr, CowStr, DefaultStr, FromStaticStr};
76
77#[allow(unused_imports)]
78use jacquard_common::deps::codegen::unicode_segmentation::UnicodeSegmentation;
79use jacquard_common::deps::smol_str::SmolStr;
80use jacquard_common::types::blob::BlobRef;
81use jacquard_common::types::string::{AtUri, Datetime, Did, UriValue};
82use jacquard_common::types::value::Data;
83use jacquard_derive::IntoStatic;
84use jacquard_lexicon::lexicon::LexiconDoc;
85use jacquard_lexicon::schema::LexiconSchema;
86
87use crate::app_bsky::richtext::facet::Facet;
88use crate::games_gamesgamesgamesgames;
89#[allow(unused_imports)]
90use jacquard_lexicon::validation::{ConstraintError, ValidationPath};
91use serde::{Deserialize, Serialize};
92
93#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic)]
94#[serde(
95    rename_all = "camelCase",
96    bound(deserialize = "S: Deserialize<'de> + BosStr")
97)]
98pub struct ActivityFeedItem<S: BosStr = DefaultStr> {
99    ///When the activity occurred.
100    pub created_at: Datetime,
101    ///The game associated with this activity.
102    #[serde(skip_serializing_if = "Option::is_none")]
103    pub game: Option<games_gamesgamesgamesgames::GameView<S>>,
104    ///List data, present when type is 'listCreate' or 'listAddGame'.
105    #[serde(skip_serializing_if = "Option::is_none")]
106    pub list: Option<games_gamesgamesgamesgames::ActivityListView<S>>,
107    ///Review data, present when type is 'review'.
108    #[serde(skip_serializing_if = "Option::is_none")]
109    pub review: Option<games_gamesgamesgamesgames::ActivityReviewView<S>>,
110    ///The type of activity.
111    pub r#type: ActivityFeedItemType<S>,
112    #[serde(flatten, default, skip_serializing_if = "Option::is_none")]
113    pub extra_data: Option<BTreeMap<SmolStr, Data<S>>>,
114}
115
116/// The type of activity.
117
118#[derive(Debug, Clone, PartialEq, Eq, Hash)]
119pub enum ActivityFeedItemType<S: BosStr = DefaultStr> {
120    Like,
121    Review,
122    ListCreate,
123    ListAddGame,
124    Other(S),
125}
126
127impl<S: BosStr> ActivityFeedItemType<S> {
128    pub fn as_str(&self) -> &str {
129        match self {
130            Self::Like => "like",
131            Self::Review => "review",
132            Self::ListCreate => "listCreate",
133            Self::ListAddGame => "listAddGame",
134            Self::Other(s) => s.as_ref(),
135        }
136    }
137    /// Construct from a string-like value, matching known values.
138    pub fn from_value(s: S) -> Self {
139        match s.as_ref() {
140            "like" => Self::Like,
141            "review" => Self::Review,
142            "listCreate" => Self::ListCreate,
143            "listAddGame" => Self::ListAddGame,
144            _ => Self::Other(s),
145        }
146    }
147}
148
149impl<S: BosStr> core::fmt::Display for ActivityFeedItemType<S> {
150    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
151        write!(f, "{}", self.as_str())
152    }
153}
154
155impl<S: BosStr> AsRef<str> for ActivityFeedItemType<S> {
156    fn as_ref(&self) -> &str {
157        self.as_str()
158    }
159}
160
161impl<S: BosStr> Serialize for ActivityFeedItemType<S> {
162    fn serialize<Ser>(&self, serializer: Ser) -> Result<Ser::Ok, Ser::Error>
163    where
164        Ser: serde::Serializer,
165    {
166        serializer.serialize_str(self.as_str())
167    }
168}
169
170impl<'de, S: Deserialize<'de> + BosStr> Deserialize<'de> for ActivityFeedItemType<S> {
171    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
172    where
173        D: serde::Deserializer<'de>,
174    {
175        let s = S::deserialize(deserializer)?;
176        Ok(Self::from_value(s))
177    }
178}
179
180impl<S: BosStr + Default> Default for ActivityFeedItemType<S> {
181    fn default() -> Self {
182        Self::Other(Default::default())
183    }
184}
185
186impl<S: BosStr> jacquard_common::IntoStatic for ActivityFeedItemType<S>
187where
188    S: BosStr + jacquard_common::IntoStatic,
189    S::Output: BosStr,
190{
191    type Output = ActivityFeedItemType<S::Output>;
192    fn into_static(self) -> Self::Output {
193        match self {
194            ActivityFeedItemType::Like => ActivityFeedItemType::Like,
195            ActivityFeedItemType::Review => ActivityFeedItemType::Review,
196            ActivityFeedItemType::ListCreate => ActivityFeedItemType::ListCreate,
197            ActivityFeedItemType::ListAddGame => ActivityFeedItemType::ListAddGame,
198            ActivityFeedItemType::Other(v) => ActivityFeedItemType::Other(v.into_static()),
199        }
200    }
201}
202
203#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic)]
204#[serde(
205    rename_all = "camelCase",
206    bound(deserialize = "S: Deserialize<'de> + BosStr")
207)]
208pub struct ActivityListView<S: BosStr = DefaultStr> {
209    pub created_at: Datetime,
210    pub name: S,
211    pub uri: AtUri<S>,
212    #[serde(flatten, default, skip_serializing_if = "Option::is_none")]
213    pub extra_data: Option<BTreeMap<SmolStr, Data<S>>>,
214}
215
216#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic)]
217#[serde(
218    rename_all = "camelCase",
219    bound(deserialize = "S: Deserialize<'de> + BosStr")
220)]
221pub struct ActivityReviewView<S: BosStr = DefaultStr> {
222    #[serde(skip_serializing_if = "Option::is_none")]
223    pub contains_spoilers: Option<bool>,
224    pub created_at: Datetime,
225    pub rating: i64,
226    #[serde(skip_serializing_if = "Option::is_none")]
227    pub tags: Option<Vec<S>>,
228    #[serde(skip_serializing_if = "Option::is_none")]
229    pub text: Option<S>,
230    #[serde(skip_serializing_if = "Option::is_none")]
231    pub title: Option<S>,
232    pub uri: AtUri<S>,
233    #[serde(flatten, default, skip_serializing_if = "Option::is_none")]
234    pub extra_data: Option<BTreeMap<SmolStr, Data<S>>>,
235}
236
237#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic)]
238#[serde(
239    rename_all = "camelCase",
240    bound(deserialize = "S: Deserialize<'de> + BosStr")
241)]
242pub struct ActorCreditView<S: BosStr = DefaultStr> {
243    #[serde(skip_serializing_if = "Option::is_none")]
244    pub actor_uri: Option<AtUri<S>>,
245    pub credits: Vec<games_gamesgamesgamesgames::CreditEntry<S>>,
246    #[serde(skip_serializing_if = "Option::is_none")]
247    pub display_name: Option<S>,
248    pub uri: AtUri<S>,
249    #[serde(flatten, default, skip_serializing_if = "Option::is_none")]
250    pub extra_data: Option<BTreeMap<SmolStr, Data<S>>>,
251}
252
253#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic)]
254#[serde(
255    rename_all = "camelCase",
256    bound(deserialize = "S: Deserialize<'de> + BosStr")
257)]
258pub struct ActorProfileDetailView<S: BosStr = DefaultStr> {
259    #[serde(skip_serializing_if = "Option::is_none")]
260    pub avatar: Option<BlobRef<S>>,
261    #[serde(skip_serializing_if = "Option::is_none")]
262    pub created_at: Option<Datetime>,
263    #[serde(skip_serializing_if = "Option::is_none")]
264    pub description: Option<S>,
265    #[serde(skip_serializing_if = "Option::is_none")]
266    pub description_facets: Option<Vec<Facet<S>>>,
267    pub did: Did<S>,
268    #[serde(skip_serializing_if = "Option::is_none")]
269    pub display_name: Option<S>,
270    #[serde(skip_serializing_if = "Option::is_none")]
271    pub pronouns: Option<S>,
272    pub uri: AtUri<S>,
273    #[serde(skip_serializing_if = "Option::is_none")]
274    pub websites: Option<Vec<games_gamesgamesgamesgames::Website<S>>>,
275    #[serde(flatten, default, skip_serializing_if = "Option::is_none")]
276    pub extra_data: Option<BTreeMap<SmolStr, Data<S>>>,
277}
278
279#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic)]
280#[serde(
281    rename_all = "camelCase",
282    bound(deserialize = "S: Deserialize<'de> + BosStr")
283)]
284pub struct ActorProfileSummaryView<S: BosStr = DefaultStr> {
285    #[serde(skip_serializing_if = "Option::is_none")]
286    pub avatar: Option<BlobRef<S>>,
287    pub did: Did<S>,
288    #[serde(skip_serializing_if = "Option::is_none")]
289    pub display_name: Option<S>,
290    pub uri: AtUri<S>,
291    #[serde(flatten, default, skip_serializing_if = "Option::is_none")]
292    pub extra_data: Option<BTreeMap<SmolStr, Data<S>>>,
293}
294
295#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic, Default)]
296#[serde(
297    rename_all = "camelCase",
298    bound(deserialize = "S: Deserialize<'de> + BosStr")
299)]
300pub struct AgeRating<S: BosStr = DefaultStr> {
301    #[serde(skip_serializing_if = "Option::is_none")]
302    pub content_descriptors: Option<Vec<S>>,
303    pub organization: AgeRatingOrganization<S>,
304    pub rating: S,
305    #[serde(flatten, default, skip_serializing_if = "Option::is_none")]
306    pub extra_data: Option<BTreeMap<SmolStr, Data<S>>>,
307}
308
309#[derive(Debug, Clone, PartialEq, Eq, Hash)]
310pub enum AgeRatingOrganization<S: BosStr = DefaultStr> {
311    Esrb,
312    Pegi,
313    Cero,
314    Usk,
315    Grac,
316    ClassInd,
317    Acb,
318    Other(S),
319}
320
321impl<S: BosStr> AgeRatingOrganization<S> {
322    pub fn as_str(&self) -> &str {
323        match self {
324            Self::Esrb => "esrb",
325            Self::Pegi => "pegi",
326            Self::Cero => "cero",
327            Self::Usk => "usk",
328            Self::Grac => "grac",
329            Self::ClassInd => "classInd",
330            Self::Acb => "acb",
331            Self::Other(s) => s.as_ref(),
332        }
333    }
334    /// Construct from a string-like value, matching known values.
335    pub fn from_value(s: S) -> Self {
336        match s.as_ref() {
337            "esrb" => Self::Esrb,
338            "pegi" => Self::Pegi,
339            "cero" => Self::Cero,
340            "usk" => Self::Usk,
341            "grac" => Self::Grac,
342            "classInd" => Self::ClassInd,
343            "acb" => Self::Acb,
344            _ => Self::Other(s),
345        }
346    }
347}
348
349impl<S: BosStr> core::fmt::Display for AgeRatingOrganization<S> {
350    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
351        write!(f, "{}", self.as_str())
352    }
353}
354
355impl<S: BosStr> AsRef<str> for AgeRatingOrganization<S> {
356    fn as_ref(&self) -> &str {
357        self.as_str()
358    }
359}
360
361impl<S: BosStr> Serialize for AgeRatingOrganization<S> {
362    fn serialize<Ser>(&self, serializer: Ser) -> Result<Ser::Ok, Ser::Error>
363    where
364        Ser: serde::Serializer,
365    {
366        serializer.serialize_str(self.as_str())
367    }
368}
369
370impl<'de, S: Deserialize<'de> + BosStr> Deserialize<'de> for AgeRatingOrganization<S> {
371    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
372    where
373        D: serde::Deserializer<'de>,
374    {
375        let s = S::deserialize(deserializer)?;
376        Ok(Self::from_value(s))
377    }
378}
379
380impl<S: BosStr + Default> Default for AgeRatingOrganization<S> {
381    fn default() -> Self {
382        Self::Other(Default::default())
383    }
384}
385
386impl<S: BosStr> jacquard_common::IntoStatic for AgeRatingOrganization<S>
387where
388    S: BosStr + jacquard_common::IntoStatic,
389    S::Output: BosStr,
390{
391    type Output = AgeRatingOrganization<S::Output>;
392    fn into_static(self) -> Self::Output {
393        match self {
394            AgeRatingOrganization::Esrb => AgeRatingOrganization::Esrb,
395            AgeRatingOrganization::Pegi => AgeRatingOrganization::Pegi,
396            AgeRatingOrganization::Cero => AgeRatingOrganization::Cero,
397            AgeRatingOrganization::Usk => AgeRatingOrganization::Usk,
398            AgeRatingOrganization::Grac => AgeRatingOrganization::Grac,
399            AgeRatingOrganization::ClassInd => AgeRatingOrganization::ClassInd,
400            AgeRatingOrganization::Acb => AgeRatingOrganization::Acb,
401            AgeRatingOrganization::Other(v) => AgeRatingOrganization::Other(v.into_static()),
402        }
403    }
404}
405
406#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic, Default)]
407#[serde(
408    rename_all = "camelCase",
409    bound(deserialize = "S: Deserialize<'de> + BosStr")
410)]
411pub struct AlternativeName<S: BosStr = DefaultStr> {
412    #[serde(skip_serializing_if = "Option::is_none")]
413    pub comment: Option<S>,
414    #[serde(skip_serializing_if = "Option::is_none")]
415    pub locale: Option<S>,
416    pub name: S,
417    #[serde(flatten, default, skip_serializing_if = "Option::is_none")]
418    pub extra_data: Option<BTreeMap<SmolStr, Data<S>>>,
419}
420
421pub type ApplicationType<S = DefaultStr> = S;
422
423#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic)]
424#[serde(
425    rename_all = "camelCase",
426    bound(deserialize = "S: Deserialize<'de> + BosStr")
427)]
428pub struct CollectionSummaryView<S: BosStr = DefaultStr> {
429    pub name: S,
430    #[serde(skip_serializing_if = "Option::is_none")]
431    pub slug: Option<S>,
432    #[serde(skip_serializing_if = "Option::is_none")]
433    pub r#type: Option<CollectionSummaryViewType<S>>,
434    pub uri: AtUri<S>,
435    #[serde(flatten, default, skip_serializing_if = "Option::is_none")]
436    pub extra_data: Option<BTreeMap<SmolStr, Data<S>>>,
437}
438
439#[derive(Debug, Clone, PartialEq, Eq, Hash)]
440pub enum CollectionSummaryViewType<S: BosStr = DefaultStr> {
441    Franchise,
442    Series,
443    Curated,
444    Other(S),
445}
446
447impl<S: BosStr> CollectionSummaryViewType<S> {
448    pub fn as_str(&self) -> &str {
449        match self {
450            Self::Franchise => "franchise",
451            Self::Series => "series",
452            Self::Curated => "curated",
453            Self::Other(s) => s.as_ref(),
454        }
455    }
456    /// Construct from a string-like value, matching known values.
457    pub fn from_value(s: S) -> Self {
458        match s.as_ref() {
459            "franchise" => Self::Franchise,
460            "series" => Self::Series,
461            "curated" => Self::Curated,
462            _ => Self::Other(s),
463        }
464    }
465}
466
467impl<S: BosStr> core::fmt::Display for CollectionSummaryViewType<S> {
468    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
469        write!(f, "{}", self.as_str())
470    }
471}
472
473impl<S: BosStr> AsRef<str> for CollectionSummaryViewType<S> {
474    fn as_ref(&self) -> &str {
475        self.as_str()
476    }
477}
478
479impl<S: BosStr> Serialize for CollectionSummaryViewType<S> {
480    fn serialize<Ser>(&self, serializer: Ser) -> Result<Ser::Ok, Ser::Error>
481    where
482        Ser: serde::Serializer,
483    {
484        serializer.serialize_str(self.as_str())
485    }
486}
487
488impl<'de, S: Deserialize<'de> + BosStr> Deserialize<'de> for CollectionSummaryViewType<S> {
489    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
490    where
491        D: serde::Deserializer<'de>,
492    {
493        let s = S::deserialize(deserializer)?;
494        Ok(Self::from_value(s))
495    }
496}
497
498impl<S: BosStr + Default> Default for CollectionSummaryViewType<S> {
499    fn default() -> Self {
500        Self::Other(Default::default())
501    }
502}
503
504impl<S: BosStr> jacquard_common::IntoStatic for CollectionSummaryViewType<S>
505where
506    S: BosStr + jacquard_common::IntoStatic,
507    S::Output: BosStr,
508{
509    type Output = CollectionSummaryViewType<S::Output>;
510    fn into_static(self) -> Self::Output {
511        match self {
512            CollectionSummaryViewType::Franchise => CollectionSummaryViewType::Franchise,
513            CollectionSummaryViewType::Series => CollectionSummaryViewType::Series,
514            CollectionSummaryViewType::Curated => CollectionSummaryViewType::Curated,
515            CollectionSummaryViewType::Other(v) => {
516                CollectionSummaryViewType::Other(v.into_static())
517            }
518        }
519    }
520}
521
522/// Lightweight actor view for community feed items.
523
524#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic)]
525#[serde(
526    rename_all = "camelCase",
527    bound(deserialize = "S: Deserialize<'de> + BosStr")
528)]
529pub struct CommunityFeedActorView<S: BosStr = DefaultStr> {
530    pub did: Did<S>,
531    #[serde(skip_serializing_if = "Option::is_none")]
532    pub display_name: Option<S>,
533    #[serde(skip_serializing_if = "Option::is_none")]
534    pub handle: Option<S>,
535    #[serde(flatten, default, skip_serializing_if = "Option::is_none")]
536    pub extra_data: Option<BTreeMap<SmolStr, Data<S>>>,
537}
538
539/// A community activity item with actor information.
540
541#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic)]
542#[serde(
543    rename_all = "camelCase",
544    bound(deserialize = "S: Deserialize<'de> + BosStr")
545)]
546pub struct CommunityFeedItem<S: BosStr = DefaultStr> {
547    ///The user who performed this activity.
548    pub actor: games_gamesgamesgamesgames::CommunityFeedActorView<S>,
549    ///When the activity occurred.
550    pub created_at: Datetime,
551    ///The game associated with this activity.
552    #[serde(skip_serializing_if = "Option::is_none")]
553    pub game: Option<games_gamesgamesgamesgames::GameView<S>>,
554    ///List data, present when type is 'listCreate' or 'listAddGame'.
555    #[serde(skip_serializing_if = "Option::is_none")]
556    pub list: Option<games_gamesgamesgamesgames::ActivityListView<S>>,
557    ///Review data, present when type is 'review'.
558    #[serde(skip_serializing_if = "Option::is_none")]
559    pub review: Option<games_gamesgamesgamesgames::ActivityReviewView<S>>,
560    ///The type of activity.
561    pub r#type: CommunityFeedItemType<S>,
562    #[serde(flatten, default, skip_serializing_if = "Option::is_none")]
563    pub extra_data: Option<BTreeMap<SmolStr, Data<S>>>,
564}
565
566/// The type of activity.
567
568#[derive(Debug, Clone, PartialEq, Eq, Hash)]
569pub enum CommunityFeedItemType<S: BosStr = DefaultStr> {
570    Like,
571    Review,
572    ListCreate,
573    ListAddGame,
574    Other(S),
575}
576
577impl<S: BosStr> CommunityFeedItemType<S> {
578    pub fn as_str(&self) -> &str {
579        match self {
580            Self::Like => "like",
581            Self::Review => "review",
582            Self::ListCreate => "listCreate",
583            Self::ListAddGame => "listAddGame",
584            Self::Other(s) => s.as_ref(),
585        }
586    }
587    /// Construct from a string-like value, matching known values.
588    pub fn from_value(s: S) -> Self {
589        match s.as_ref() {
590            "like" => Self::Like,
591            "review" => Self::Review,
592            "listCreate" => Self::ListCreate,
593            "listAddGame" => Self::ListAddGame,
594            _ => Self::Other(s),
595        }
596    }
597}
598
599impl<S: BosStr> core::fmt::Display for CommunityFeedItemType<S> {
600    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
601        write!(f, "{}", self.as_str())
602    }
603}
604
605impl<S: BosStr> AsRef<str> for CommunityFeedItemType<S> {
606    fn as_ref(&self) -> &str {
607        self.as_str()
608    }
609}
610
611impl<S: BosStr> Serialize for CommunityFeedItemType<S> {
612    fn serialize<Ser>(&self, serializer: Ser) -> Result<Ser::Ok, Ser::Error>
613    where
614        Ser: serde::Serializer,
615    {
616        serializer.serialize_str(self.as_str())
617    }
618}
619
620impl<'de, S: Deserialize<'de> + BosStr> Deserialize<'de> for CommunityFeedItemType<S> {
621    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
622    where
623        D: serde::Deserializer<'de>,
624    {
625        let s = S::deserialize(deserializer)?;
626        Ok(Self::from_value(s))
627    }
628}
629
630impl<S: BosStr + Default> Default for CommunityFeedItemType<S> {
631    fn default() -> Self {
632        Self::Other(Default::default())
633    }
634}
635
636impl<S: BosStr> jacquard_common::IntoStatic for CommunityFeedItemType<S>
637where
638    S: BosStr + jacquard_common::IntoStatic,
639    S::Output: BosStr,
640{
641    type Output = CommunityFeedItemType<S::Output>;
642    fn into_static(self) -> Self::Output {
643        match self {
644            CommunityFeedItemType::Like => CommunityFeedItemType::Like,
645            CommunityFeedItemType::Review => CommunityFeedItemType::Review,
646            CommunityFeedItemType::ListCreate => CommunityFeedItemType::ListCreate,
647            CommunityFeedItemType::ListAddGame => CommunityFeedItemType::ListAddGame,
648            CommunityFeedItemType::Other(v) => CommunityFeedItemType::Other(v.into_static()),
649        }
650    }
651}
652
653#[derive(Debug, Clone, PartialEq, Eq, Hash)]
654pub enum CompanyRole<S: BosStr = DefaultStr> {
655    Developer,
656    Publisher,
657    Porter,
658    Supporter,
659    Other(S),
660}
661
662impl<S: BosStr> CompanyRole<S> {
663    pub fn as_str(&self) -> &str {
664        match self {
665            Self::Developer => "developer",
666            Self::Publisher => "publisher",
667            Self::Porter => "porter",
668            Self::Supporter => "supporter",
669            Self::Other(s) => s.as_ref(),
670        }
671    }
672    /// Construct from a string-like value, matching known values.
673    pub fn from_value(s: S) -> Self {
674        match s.as_ref() {
675            "developer" => Self::Developer,
676            "publisher" => Self::Publisher,
677            "porter" => Self::Porter,
678            "supporter" => Self::Supporter,
679            _ => Self::Other(s),
680        }
681    }
682}
683
684impl<S: BosStr> AsRef<str> for CompanyRole<S> {
685    fn as_ref(&self) -> &str {
686        self.as_str()
687    }
688}
689
690impl<S: BosStr> core::fmt::Display for CompanyRole<S> {
691    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
692        write!(f, "{}", self.as_str())
693    }
694}
695
696impl<S: BosStr> Serialize for CompanyRole<S> {
697    fn serialize<Ser>(&self, serializer: Ser) -> Result<Ser::Ok, Ser::Error>
698    where
699        Ser: serde::Serializer,
700    {
701        serializer.serialize_str(self.as_str())
702    }
703}
704
705impl<'de, S: Deserialize<'de> + BosStr> Deserialize<'de> for CompanyRole<S> {
706    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
707    where
708        D: serde::Deserializer<'de>,
709    {
710        let s = S::deserialize(deserializer)?;
711        Ok(Self::from_value(s))
712    }
713}
714
715impl<S: BosStr> jacquard_common::IntoStatic for CompanyRole<S>
716where
717    S: BosStr + jacquard_common::IntoStatic,
718    S::Output: BosStr,
719{
720    type Output = CompanyRole<S::Output>;
721    fn into_static(self) -> Self::Output {
722        match self {
723            CompanyRole::Developer => CompanyRole::Developer,
724            CompanyRole::Publisher => CompanyRole::Publisher,
725            CompanyRole::Porter => CompanyRole::Porter,
726            CompanyRole::Supporter => CompanyRole::Supporter,
727            CompanyRole::Other(v) => CompanyRole::Other(v.into_static()),
728        }
729    }
730}
731
732#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic)]
733#[serde(
734    rename_all = "camelCase",
735    bound(deserialize = "S: Deserialize<'de> + BosStr")
736)]
737pub struct CreditEntry<S: BosStr = DefaultStr> {
738    #[serde(skip_serializing_if = "Option::is_none")]
739    pub department: Option<S>,
740    pub role: games_gamesgamesgamesgames::IndividualRole<S>,
741    #[serde(flatten, default, skip_serializing_if = "Option::is_none")]
742    pub extra_data: Option<BTreeMap<SmolStr, Data<S>>>,
743}
744
745#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic)]
746#[serde(
747    rename_all = "camelCase",
748    bound(deserialize = "S: Deserialize<'de> + BosStr")
749)]
750pub struct EngineSummaryView<S: BosStr = DefaultStr> {
751    pub name: S,
752    #[serde(skip_serializing_if = "Option::is_none")]
753    pub slug: Option<S>,
754    pub uri: AtUri<S>,
755    #[serde(flatten, default, skip_serializing_if = "Option::is_none")]
756    pub extra_data: Option<BTreeMap<SmolStr, Data<S>>>,
757}
758
759#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic, Default)]
760#[serde(
761    rename_all = "camelCase",
762    bound(deserialize = "S: Deserialize<'de> + BosStr")
763)]
764pub struct ExternalIds<S: BosStr = DefaultStr> {
765    #[serde(skip_serializing_if = "Option::is_none")]
766    pub apple_app_store: Option<S>,
767    #[serde(skip_serializing_if = "Option::is_none")]
768    pub epic_games: Option<S>,
769    #[serde(skip_serializing_if = "Option::is_none")]
770    pub gog: Option<S>,
771    #[serde(skip_serializing_if = "Option::is_none")]
772    pub google_play: Option<S>,
773    #[serde(skip_serializing_if = "Option::is_none")]
774    pub humble_bundle: Option<S>,
775    #[serde(skip_serializing_if = "Option::is_none")]
776    pub igdb: Option<S>,
777    #[serde(skip_serializing_if = "Option::is_none")]
778    pub itch_io: Option<games_gamesgamesgamesgames::ItchIoId<S>>,
779    #[serde(skip_serializing_if = "Option::is_none")]
780    pub nintendo_eshop: Option<S>,
781    #[serde(skip_serializing_if = "Option::is_none")]
782    pub play_station: Option<S>,
783    #[serde(skip_serializing_if = "Option::is_none")]
784    pub steam: Option<S>,
785    #[serde(skip_serializing_if = "Option::is_none")]
786    pub twitch: Option<S>,
787    #[serde(skip_serializing_if = "Option::is_none")]
788    pub xbox: Option<S>,
789    #[serde(flatten, default, skip_serializing_if = "Option::is_none")]
790    pub extra_data: Option<BTreeMap<SmolStr, Data<S>>>,
791}
792
793#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic, Default)]
794#[serde(
795    rename_all = "camelCase",
796    bound(deserialize = "S: Deserialize<'de> + BosStr")
797)]
798pub struct ExternalVideo<S: BosStr = DefaultStr> {
799    pub platform: ExternalVideoPlatform<S>,
800    #[serde(skip_serializing_if = "Option::is_none")]
801    pub title: Option<S>,
802    pub video_id: S,
803    #[serde(flatten, default, skip_serializing_if = "Option::is_none")]
804    pub extra_data: Option<BTreeMap<SmolStr, Data<S>>>,
805}
806
807#[derive(Debug, Clone, PartialEq, Eq, Hash)]
808pub enum ExternalVideoPlatform<S: BosStr = DefaultStr> {
809    Youtube,
810    Twitch,
811    Vimeo,
812    Other(S),
813}
814
815impl<S: BosStr> ExternalVideoPlatform<S> {
816    pub fn as_str(&self) -> &str {
817        match self {
818            Self::Youtube => "youtube",
819            Self::Twitch => "twitch",
820            Self::Vimeo => "vimeo",
821            Self::Other(s) => s.as_ref(),
822        }
823    }
824    /// Construct from a string-like value, matching known values.
825    pub fn from_value(s: S) -> Self {
826        match s.as_ref() {
827            "youtube" => Self::Youtube,
828            "twitch" => Self::Twitch,
829            "vimeo" => Self::Vimeo,
830            _ => Self::Other(s),
831        }
832    }
833}
834
835impl<S: BosStr> core::fmt::Display for ExternalVideoPlatform<S> {
836    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
837        write!(f, "{}", self.as_str())
838    }
839}
840
841impl<S: BosStr> AsRef<str> for ExternalVideoPlatform<S> {
842    fn as_ref(&self) -> &str {
843        self.as_str()
844    }
845}
846
847impl<S: BosStr> Serialize for ExternalVideoPlatform<S> {
848    fn serialize<Ser>(&self, serializer: Ser) -> Result<Ser::Ok, Ser::Error>
849    where
850        Ser: serde::Serializer,
851    {
852        serializer.serialize_str(self.as_str())
853    }
854}
855
856impl<'de, S: Deserialize<'de> + BosStr> Deserialize<'de> for ExternalVideoPlatform<S> {
857    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
858    where
859        D: serde::Deserializer<'de>,
860    {
861        let s = S::deserialize(deserializer)?;
862        Ok(Self::from_value(s))
863    }
864}
865
866impl<S: BosStr + Default> Default for ExternalVideoPlatform<S> {
867    fn default() -> Self {
868        Self::Other(Default::default())
869    }
870}
871
872impl<S: BosStr> jacquard_common::IntoStatic for ExternalVideoPlatform<S>
873where
874    S: BosStr + jacquard_common::IntoStatic,
875    S::Output: BosStr,
876{
877    type Output = ExternalVideoPlatform<S::Output>;
878    fn into_static(self) -> Self::Output {
879        match self {
880            ExternalVideoPlatform::Youtube => ExternalVideoPlatform::Youtube,
881            ExternalVideoPlatform::Twitch => ExternalVideoPlatform::Twitch,
882            ExternalVideoPlatform::Vimeo => ExternalVideoPlatform::Vimeo,
883            ExternalVideoPlatform::Other(v) => ExternalVideoPlatform::Other(v.into_static()),
884        }
885    }
886}
887
888#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic)]
889#[serde(
890    rename_all = "camelCase",
891    bound(deserialize = "S: Deserialize<'de> + BosStr")
892)]
893pub struct GameDetailView<S: BosStr = DefaultStr> {
894    #[serde(skip_serializing_if = "Option::is_none")]
895    pub actor_credits: Option<Vec<games_gamesgamesgamesgames::ActorCreditView<S>>>,
896    #[serde(skip_serializing_if = "Option::is_none")]
897    pub age_ratings: Option<Vec<games_gamesgamesgamesgames::AgeRating<S>>>,
898    #[serde(skip_serializing_if = "Option::is_none")]
899    pub alternative_names: Option<Vec<games_gamesgamesgamesgames::AlternativeName<S>>>,
900    #[serde(skip_serializing_if = "Option::is_none")]
901    pub application_type: Option<games_gamesgamesgamesgames::ApplicationType<S>>,
902    #[serde(skip_serializing_if = "Option::is_none")]
903    pub collections: Option<Vec<AtUri<S>>>,
904    pub created_at: Datetime,
905    #[serde(skip_serializing_if = "Option::is_none")]
906    pub engines: Option<Vec<AtUri<S>>>,
907    #[serde(skip_serializing_if = "Option::is_none")]
908    pub external_ids: Option<games_gamesgamesgamesgames::ExternalIds<S>>,
909    #[serde(skip_serializing_if = "Option::is_none")]
910    pub genres: Option<Vec<games_gamesgamesgamesgames::Genre<S>>>,
911    #[serde(skip_serializing_if = "Option::is_none")]
912    pub keywords: Option<Vec<S>>,
913    #[serde(skip_serializing_if = "Option::is_none")]
914    pub language_supports: Option<Vec<games_gamesgamesgamesgames::LanguageSupport<S>>>,
915    #[serde(skip_serializing_if = "Option::is_none")]
916    pub media: Option<Vec<games_gamesgamesgamesgames::MediaItem<S>>>,
917    #[serde(skip_serializing_if = "Option::is_none")]
918    pub modes: Option<Vec<games_gamesgamesgamesgames::Mode<S>>>,
919    #[serde(skip_serializing_if = "Option::is_none")]
920    pub multiplayer_modes: Option<Vec<games_gamesgamesgamesgames::MultiplayerMode<S>>>,
921    pub name: S,
922    #[serde(skip_serializing_if = "Option::is_none")]
923    pub org_credits: Option<Vec<games_gamesgamesgamesgames::OrgCreditView<S>>>,
924    #[serde(skip_serializing_if = "Option::is_none")]
925    pub parent: Option<AtUri<S>>,
926    #[serde(skip_serializing_if = "Option::is_none")]
927    pub player_perspectives: Option<Vec<games_gamesgamesgamesgames::PlayerPerspective<S>>>,
928    #[serde(skip_serializing_if = "Option::is_none")]
929    pub published_at: Option<Datetime>,
930    #[serde(skip_serializing_if = "Option::is_none")]
931    pub releases: Option<Vec<games_gamesgamesgamesgames::Release<S>>>,
932    #[serde(skip_serializing_if = "Option::is_none")]
933    pub slug: Option<S>,
934    #[serde(skip_serializing_if = "Option::is_none")]
935    pub storyline: Option<S>,
936    #[serde(skip_serializing_if = "Option::is_none")]
937    pub summary: Option<S>,
938    #[serde(skip_serializing_if = "Option::is_none")]
939    pub themes: Option<Vec<games_gamesgamesgamesgames::Theme<S>>>,
940    #[serde(skip_serializing_if = "Option::is_none")]
941    pub time_to_beat: Option<games_gamesgamesgamesgames::TimeToBeat<S>>,
942    pub uri: AtUri<S>,
943    #[serde(skip_serializing_if = "Option::is_none")]
944    pub videos: Option<Vec<games_gamesgamesgamesgames::ExternalVideo<S>>>,
945    #[serde(skip_serializing_if = "Option::is_none")]
946    pub websites: Option<Vec<games_gamesgamesgamesgames::Website<S>>>,
947    #[serde(flatten, default, skip_serializing_if = "Option::is_none")]
948    pub extra_data: Option<BTreeMap<SmolStr, Data<S>>>,
949}
950
951#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic)]
952#[serde(
953    rename_all = "camelCase",
954    bound(deserialize = "S: Deserialize<'de> + BosStr")
955)]
956pub struct GameFeedViewItem<S: BosStr = DefaultStr> {
957    #[serde(skip_serializing_if = "Option::is_none")]
958    pub feed_context: Option<S>,
959    pub game: games_gamesgamesgamesgames::GameView<S>,
960    #[serde(flatten, default, skip_serializing_if = "Option::is_none")]
961    pub extra_data: Option<BTreeMap<SmolStr, Data<S>>>,
962}
963
964#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic)]
965#[serde(
966    rename_all = "camelCase",
967    bound(deserialize = "S: Deserialize<'de> + BosStr")
968)]
969pub struct GameSummaryView<S: BosStr = DefaultStr> {
970    #[serde(skip_serializing_if = "Option::is_none")]
971    pub application_type: Option<games_gamesgamesgamesgames::ApplicationType<S>>,
972    ///Earliest release date as YYYYMMDD integer.
973    #[serde(skip_serializing_if = "Option::is_none")]
974    pub first_release_date: Option<i64>,
975    #[serde(skip_serializing_if = "Option::is_none")]
976    pub media: Option<Vec<games_gamesgamesgamesgames::MediaItem<S>>>,
977    pub name: S,
978    #[serde(skip_serializing_if = "Option::is_none")]
979    pub slug: Option<S>,
980    #[serde(skip_serializing_if = "Option::is_none")]
981    pub summary: Option<S>,
982    pub uri: AtUri<S>,
983    #[serde(flatten, default, skip_serializing_if = "Option::is_none")]
984    pub extra_data: Option<BTreeMap<SmolStr, Data<S>>>,
985}
986
987#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic)]
988#[serde(
989    rename_all = "camelCase",
990    bound(deserialize = "S: Deserialize<'de> + BosStr")
991)]
992pub struct GameView<S: BosStr = DefaultStr> {
993    pub application_type: games_gamesgamesgamesgames::ApplicationType<S>,
994    #[serde(skip_serializing_if = "Option::is_none")]
995    pub genres: Option<Vec<games_gamesgamesgamesgames::Genre<S>>>,
996    #[serde(skip_serializing_if = "Option::is_none")]
997    pub like_count: Option<i64>,
998    #[serde(skip_serializing_if = "Option::is_none")]
999    pub media: Option<Vec<games_gamesgamesgamesgames::MediaItem<S>>>,
1000    pub name: S,
1001    #[serde(skip_serializing_if = "Option::is_none")]
1002    pub releases: Option<Vec<games_gamesgamesgamesgames::Release<S>>>,
1003    #[serde(skip_serializing_if = "Option::is_none")]
1004    pub slug: Option<S>,
1005    #[serde(skip_serializing_if = "Option::is_none")]
1006    pub summary: Option<S>,
1007    #[serde(skip_serializing_if = "Option::is_none")]
1008    pub themes: Option<Vec<games_gamesgamesgamesgames::Theme<S>>>,
1009    pub uri: AtUri<S>,
1010    #[serde(skip_serializing_if = "Option::is_none")]
1011    pub viewer: Option<games_gamesgamesgamesgames::ViewerState<S>>,
1012    #[serde(flatten, default, skip_serializing_if = "Option::is_none")]
1013    pub extra_data: Option<BTreeMap<SmolStr, Data<S>>>,
1014}
1015
1016#[derive(Debug, Clone, PartialEq, Eq, Hash)]
1017pub enum Genre<S: BosStr = DefaultStr> {
1018    Fighting,
1019    Music,
1020    Platform,
1021    PointAndClick,
1022    Puzzle,
1023    Racing,
1024    Rpg,
1025    Rts,
1026    Shooter,
1027    Simulator,
1028    Other(S),
1029}
1030
1031impl<S: BosStr> Genre<S> {
1032    pub fn as_str(&self) -> &str {
1033        match self {
1034            Self::Fighting => "fighting",
1035            Self::Music => "music",
1036            Self::Platform => "platform",
1037            Self::PointAndClick => "pointAndClick",
1038            Self::Puzzle => "puzzle",
1039            Self::Racing => "racing",
1040            Self::Rpg => "rpg",
1041            Self::Rts => "rts",
1042            Self::Shooter => "shooter",
1043            Self::Simulator => "simulator",
1044            Self::Other(s) => s.as_ref(),
1045        }
1046    }
1047    /// Construct from a string-like value, matching known values.
1048    pub fn from_value(s: S) -> Self {
1049        match s.as_ref() {
1050            "fighting" => Self::Fighting,
1051            "music" => Self::Music,
1052            "platform" => Self::Platform,
1053            "pointAndClick" => Self::PointAndClick,
1054            "puzzle" => Self::Puzzle,
1055            "racing" => Self::Racing,
1056            "rpg" => Self::Rpg,
1057            "rts" => Self::Rts,
1058            "shooter" => Self::Shooter,
1059            "simulator" => Self::Simulator,
1060            _ => Self::Other(s),
1061        }
1062    }
1063}
1064
1065impl<S: BosStr> AsRef<str> for Genre<S> {
1066    fn as_ref(&self) -> &str {
1067        self.as_str()
1068    }
1069}
1070
1071impl<S: BosStr> core::fmt::Display for Genre<S> {
1072    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
1073        write!(f, "{}", self.as_str())
1074    }
1075}
1076
1077impl<S: BosStr> Serialize for Genre<S> {
1078    fn serialize<Ser>(&self, serializer: Ser) -> Result<Ser::Ok, Ser::Error>
1079    where
1080        Ser: serde::Serializer,
1081    {
1082        serializer.serialize_str(self.as_str())
1083    }
1084}
1085
1086impl<'de, S: Deserialize<'de> + BosStr> Deserialize<'de> for Genre<S> {
1087    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
1088    where
1089        D: serde::Deserializer<'de>,
1090    {
1091        let s = S::deserialize(deserializer)?;
1092        Ok(Self::from_value(s))
1093    }
1094}
1095
1096impl<S: BosStr> jacquard_common::IntoStatic for Genre<S>
1097where
1098    S: BosStr + jacquard_common::IntoStatic,
1099    S::Output: BosStr,
1100{
1101    type Output = Genre<S::Output>;
1102    fn into_static(self) -> Self::Output {
1103        match self {
1104            Genre::Fighting => Genre::Fighting,
1105            Genre::Music => Genre::Music,
1106            Genre::Platform => Genre::Platform,
1107            Genre::PointAndClick => Genre::PointAndClick,
1108            Genre::Puzzle => Genre::Puzzle,
1109            Genre::Racing => Genre::Racing,
1110            Genre::Rpg => Genre::Rpg,
1111            Genre::Rts => Genre::Rts,
1112            Genre::Shooter => Genre::Shooter,
1113            Genre::Simulator => Genre::Simulator,
1114            Genre::Other(v) => Genre::Other(v.into_static()),
1115        }
1116    }
1117}
1118
1119#[derive(Debug, Clone, PartialEq, Eq, Hash)]
1120pub enum IndividualRole<S: BosStr = DefaultStr> {
1121    Director,
1122    Producer,
1123    Designer,
1124    Programmer,
1125    Artist,
1126    Animator,
1127    Writer,
1128    Composer,
1129    SoundDesigner,
1130    VoiceActor,
1131    Qa,
1132    Localization,
1133    CommunityManager,
1134    Marketing,
1135    Other(S),
1136}
1137
1138impl<S: BosStr> IndividualRole<S> {
1139    pub fn as_str(&self) -> &str {
1140        match self {
1141            Self::Director => "director",
1142            Self::Producer => "producer",
1143            Self::Designer => "designer",
1144            Self::Programmer => "programmer",
1145            Self::Artist => "artist",
1146            Self::Animator => "animator",
1147            Self::Writer => "writer",
1148            Self::Composer => "composer",
1149            Self::SoundDesigner => "soundDesigner",
1150            Self::VoiceActor => "voiceActor",
1151            Self::Qa => "qa",
1152            Self::Localization => "localization",
1153            Self::CommunityManager => "communityManager",
1154            Self::Marketing => "marketing",
1155            Self::Other(s) => s.as_ref(),
1156        }
1157    }
1158    /// Construct from a string-like value, matching known values.
1159    pub fn from_value(s: S) -> Self {
1160        match s.as_ref() {
1161            "director" => Self::Director,
1162            "producer" => Self::Producer,
1163            "designer" => Self::Designer,
1164            "programmer" => Self::Programmer,
1165            "artist" => Self::Artist,
1166            "animator" => Self::Animator,
1167            "writer" => Self::Writer,
1168            "composer" => Self::Composer,
1169            "soundDesigner" => Self::SoundDesigner,
1170            "voiceActor" => Self::VoiceActor,
1171            "qa" => Self::Qa,
1172            "localization" => Self::Localization,
1173            "communityManager" => Self::CommunityManager,
1174            "marketing" => Self::Marketing,
1175            _ => Self::Other(s),
1176        }
1177    }
1178}
1179
1180impl<S: BosStr> AsRef<str> for IndividualRole<S> {
1181    fn as_ref(&self) -> &str {
1182        self.as_str()
1183    }
1184}
1185
1186impl<S: BosStr> core::fmt::Display for IndividualRole<S> {
1187    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
1188        write!(f, "{}", self.as_str())
1189    }
1190}
1191
1192impl<S: BosStr> Serialize for IndividualRole<S> {
1193    fn serialize<Ser>(&self, serializer: Ser) -> Result<Ser::Ok, Ser::Error>
1194    where
1195        Ser: serde::Serializer,
1196    {
1197        serializer.serialize_str(self.as_str())
1198    }
1199}
1200
1201impl<'de, S: Deserialize<'de> + BosStr> Deserialize<'de> for IndividualRole<S> {
1202    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
1203    where
1204        D: serde::Deserializer<'de>,
1205    {
1206        let s = S::deserialize(deserializer)?;
1207        Ok(Self::from_value(s))
1208    }
1209}
1210
1211impl<S: BosStr> jacquard_common::IntoStatic for IndividualRole<S>
1212where
1213    S: BosStr + jacquard_common::IntoStatic,
1214    S::Output: BosStr,
1215{
1216    type Output = IndividualRole<S::Output>;
1217    fn into_static(self) -> Self::Output {
1218        match self {
1219            IndividualRole::Director => IndividualRole::Director,
1220            IndividualRole::Producer => IndividualRole::Producer,
1221            IndividualRole::Designer => IndividualRole::Designer,
1222            IndividualRole::Programmer => IndividualRole::Programmer,
1223            IndividualRole::Artist => IndividualRole::Artist,
1224            IndividualRole::Animator => IndividualRole::Animator,
1225            IndividualRole::Writer => IndividualRole::Writer,
1226            IndividualRole::Composer => IndividualRole::Composer,
1227            IndividualRole::SoundDesigner => IndividualRole::SoundDesigner,
1228            IndividualRole::VoiceActor => IndividualRole::VoiceActor,
1229            IndividualRole::Qa => IndividualRole::Qa,
1230            IndividualRole::Localization => IndividualRole::Localization,
1231            IndividualRole::CommunityManager => IndividualRole::CommunityManager,
1232            IndividualRole::Marketing => IndividualRole::Marketing,
1233            IndividualRole::Other(v) => IndividualRole::Other(v.into_static()),
1234        }
1235    }
1236}
1237
1238#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic, Default)]
1239#[serde(
1240    rename_all = "camelCase",
1241    bound(deserialize = "S: Deserialize<'de> + BosStr")
1242)]
1243pub struct ItchIoId<S: BosStr = DefaultStr> {
1244    pub developer: S,
1245    pub game: S,
1246    #[serde(flatten, default, skip_serializing_if = "Option::is_none")]
1247    pub extra_data: Option<BTreeMap<SmolStr, Data<S>>>,
1248}
1249
1250#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic, Default)]
1251#[serde(
1252    rename_all = "camelCase",
1253    bound(deserialize = "S: Deserialize<'de> + BosStr")
1254)]
1255pub struct LanguageSupport<S: BosStr = DefaultStr> {
1256    #[serde(skip_serializing_if = "Option::is_none")]
1257    pub audio: Option<bool>,
1258    #[serde(skip_serializing_if = "Option::is_none")]
1259    pub interface: Option<bool>,
1260    pub language: S,
1261    #[serde(skip_serializing_if = "Option::is_none")]
1262    pub subtitles: Option<bool>,
1263    #[serde(flatten, default, skip_serializing_if = "Option::is_none")]
1264    pub extra_data: Option<BTreeMap<SmolStr, Data<S>>>,
1265}
1266
1267#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic, Default)]
1268#[serde(
1269    rename_all = "camelCase",
1270    bound(deserialize = "S: Deserialize<'de> + BosStr")
1271)]
1272pub struct MediaItem<S: BosStr = DefaultStr> {
1273    #[serde(skip_serializing_if = "Option::is_none")]
1274    pub blob: Option<BlobRef<S>>,
1275    #[serde(skip_serializing_if = "Option::is_none")]
1276    pub description: Option<S>,
1277    #[serde(skip_serializing_if = "Option::is_none")]
1278    pub height: Option<i64>,
1279    #[serde(skip_serializing_if = "Option::is_none")]
1280    pub locale: Option<S>,
1281    #[serde(skip_serializing_if = "Option::is_none")]
1282    pub media_type: Option<S>,
1283    #[serde(skip_serializing_if = "Option::is_none")]
1284    pub title: Option<S>,
1285    #[serde(skip_serializing_if = "Option::is_none")]
1286    pub width: Option<i64>,
1287    #[serde(flatten, default, skip_serializing_if = "Option::is_none")]
1288    pub extra_data: Option<BTreeMap<SmolStr, Data<S>>>,
1289}
1290
1291#[derive(Debug, Clone, PartialEq, Eq, Hash)]
1292pub enum Mode<S: BosStr = DefaultStr> {
1293    BattleRoyale,
1294    Cooperative,
1295    Mmo,
1296    Multiplayer,
1297    SinglePlayer,
1298    SplitScreen,
1299    Other(S),
1300}
1301
1302impl<S: BosStr> Mode<S> {
1303    pub fn as_str(&self) -> &str {
1304        match self {
1305            Self::BattleRoyale => "battleRoyale",
1306            Self::Cooperative => "cooperative",
1307            Self::Mmo => "mmo",
1308            Self::Multiplayer => "multiplayer",
1309            Self::SinglePlayer => "singlePlayer",
1310            Self::SplitScreen => "splitScreen",
1311            Self::Other(s) => s.as_ref(),
1312        }
1313    }
1314    /// Construct from a string-like value, matching known values.
1315    pub fn from_value(s: S) -> Self {
1316        match s.as_ref() {
1317            "battleRoyale" => Self::BattleRoyale,
1318            "cooperative" => Self::Cooperative,
1319            "mmo" => Self::Mmo,
1320            "multiplayer" => Self::Multiplayer,
1321            "singlePlayer" => Self::SinglePlayer,
1322            "splitScreen" => Self::SplitScreen,
1323            _ => Self::Other(s),
1324        }
1325    }
1326}
1327
1328impl<S: BosStr> AsRef<str> for Mode<S> {
1329    fn as_ref(&self) -> &str {
1330        self.as_str()
1331    }
1332}
1333
1334impl<S: BosStr> core::fmt::Display for Mode<S> {
1335    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
1336        write!(f, "{}", self.as_str())
1337    }
1338}
1339
1340impl<S: BosStr> Serialize for Mode<S> {
1341    fn serialize<Ser>(&self, serializer: Ser) -> Result<Ser::Ok, Ser::Error>
1342    where
1343        Ser: serde::Serializer,
1344    {
1345        serializer.serialize_str(self.as_str())
1346    }
1347}
1348
1349impl<'de, S: Deserialize<'de> + BosStr> Deserialize<'de> for Mode<S> {
1350    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
1351    where
1352        D: serde::Deserializer<'de>,
1353    {
1354        let s = S::deserialize(deserializer)?;
1355        Ok(Self::from_value(s))
1356    }
1357}
1358
1359impl<S: BosStr> jacquard_common::IntoStatic for Mode<S>
1360where
1361    S: BosStr + jacquard_common::IntoStatic,
1362    S::Output: BosStr,
1363{
1364    type Output = Mode<S::Output>;
1365    fn into_static(self) -> Self::Output {
1366        match self {
1367            Mode::BattleRoyale => Mode::BattleRoyale,
1368            Mode::Cooperative => Mode::Cooperative,
1369            Mode::Mmo => Mode::Mmo,
1370            Mode::Multiplayer => Mode::Multiplayer,
1371            Mode::SinglePlayer => Mode::SinglePlayer,
1372            Mode::SplitScreen => Mode::SplitScreen,
1373            Mode::Other(v) => Mode::Other(v.into_static()),
1374        }
1375    }
1376}
1377
1378#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic, Default)]
1379#[serde(
1380    rename_all = "camelCase",
1381    bound(deserialize = "S: Deserialize<'de> + BosStr")
1382)]
1383pub struct MultiplayerMode<S: BosStr = DefaultStr> {
1384    #[serde(skip_serializing_if = "Option::is_none")]
1385    pub has_campaign_coop: Option<bool>,
1386    #[serde(skip_serializing_if = "Option::is_none")]
1387    pub has_drop_in: Option<bool>,
1388    #[serde(skip_serializing_if = "Option::is_none")]
1389    pub has_lan_coop: Option<bool>,
1390    #[serde(skip_serializing_if = "Option::is_none")]
1391    pub has_splitscreen: Option<bool>,
1392    #[serde(skip_serializing_if = "Option::is_none")]
1393    pub has_splitscreen_online: Option<bool>,
1394    #[serde(skip_serializing_if = "Option::is_none")]
1395    pub offline_coop_max: Option<i64>,
1396    #[serde(skip_serializing_if = "Option::is_none")]
1397    pub offline_max: Option<i64>,
1398    #[serde(skip_serializing_if = "Option::is_none")]
1399    pub online_coop_max: Option<i64>,
1400    #[serde(skip_serializing_if = "Option::is_none")]
1401    pub online_max: Option<i64>,
1402    #[serde(skip_serializing_if = "Option::is_none")]
1403    pub platform: Option<S>,
1404    #[serde(flatten, default, skip_serializing_if = "Option::is_none")]
1405    pub extra_data: Option<BTreeMap<SmolStr, Data<S>>>,
1406}
1407
1408#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic)]
1409#[serde(
1410    rename_all = "camelCase",
1411    bound(deserialize = "S: Deserialize<'de> + BosStr")
1412)]
1413pub struct OrgCreditView<S: BosStr = DefaultStr> {
1414    #[serde(skip_serializing_if = "Option::is_none")]
1415    pub display_name: Option<S>,
1416    #[serde(skip_serializing_if = "Option::is_none")]
1417    pub org_uri: Option<AtUri<S>>,
1418    pub roles: Vec<games_gamesgamesgamesgames::CompanyRole<S>>,
1419    pub uri: AtUri<S>,
1420    #[serde(flatten, default, skip_serializing_if = "Option::is_none")]
1421    pub extra_data: Option<BTreeMap<SmolStr, Data<S>>>,
1422}
1423
1424#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic)]
1425#[serde(
1426    rename_all = "camelCase",
1427    bound(deserialize = "S: Deserialize<'de> + BosStr")
1428)]
1429pub struct OrgProfileDetailView<S: BosStr = DefaultStr> {
1430    #[serde(skip_serializing_if = "Option::is_none")]
1431    pub avatar: Option<BlobRef<S>>,
1432    #[serde(skip_serializing_if = "Option::is_none")]
1433    pub country: Option<S>,
1434    #[serde(skip_serializing_if = "Option::is_none")]
1435    pub created_at: Option<Datetime>,
1436    #[serde(skip_serializing_if = "Option::is_none")]
1437    pub description: Option<S>,
1438    #[serde(skip_serializing_if = "Option::is_none")]
1439    pub description_facets: Option<Vec<Facet<S>>>,
1440    pub did: Did<S>,
1441    #[serde(skip_serializing_if = "Option::is_none")]
1442    pub display_name: Option<S>,
1443    #[serde(skip_serializing_if = "Option::is_none")]
1444    pub founded_at: Option<Datetime>,
1445    #[serde(skip_serializing_if = "Option::is_none")]
1446    pub media: Option<Vec<games_gamesgamesgamesgames::MediaItem<S>>>,
1447    #[serde(skip_serializing_if = "Option::is_none")]
1448    pub parent: Option<AtUri<S>>,
1449    #[serde(skip_serializing_if = "Option::is_none")]
1450    pub status: Option<OrgProfileDetailViewStatus<S>>,
1451    pub uri: AtUri<S>,
1452    #[serde(skip_serializing_if = "Option::is_none")]
1453    pub websites: Option<Vec<games_gamesgamesgamesgames::Website<S>>>,
1454    #[serde(flatten, default, skip_serializing_if = "Option::is_none")]
1455    pub extra_data: Option<BTreeMap<SmolStr, Data<S>>>,
1456}
1457
1458#[derive(Debug, Clone, PartialEq, Eq, Hash)]
1459pub enum OrgProfileDetailViewStatus<S: BosStr = DefaultStr> {
1460    Active,
1461    Inactive,
1462    Merged,
1463    Acquired,
1464    Defunct,
1465    Other(S),
1466}
1467
1468impl<S: BosStr> OrgProfileDetailViewStatus<S> {
1469    pub fn as_str(&self) -> &str {
1470        match self {
1471            Self::Active => "active",
1472            Self::Inactive => "inactive",
1473            Self::Merged => "merged",
1474            Self::Acquired => "acquired",
1475            Self::Defunct => "defunct",
1476            Self::Other(s) => s.as_ref(),
1477        }
1478    }
1479    /// Construct from a string-like value, matching known values.
1480    pub fn from_value(s: S) -> Self {
1481        match s.as_ref() {
1482            "active" => Self::Active,
1483            "inactive" => Self::Inactive,
1484            "merged" => Self::Merged,
1485            "acquired" => Self::Acquired,
1486            "defunct" => Self::Defunct,
1487            _ => Self::Other(s),
1488        }
1489    }
1490}
1491
1492impl<S: BosStr> core::fmt::Display for OrgProfileDetailViewStatus<S> {
1493    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
1494        write!(f, "{}", self.as_str())
1495    }
1496}
1497
1498impl<S: BosStr> AsRef<str> for OrgProfileDetailViewStatus<S> {
1499    fn as_ref(&self) -> &str {
1500        self.as_str()
1501    }
1502}
1503
1504impl<S: BosStr> Serialize for OrgProfileDetailViewStatus<S> {
1505    fn serialize<Ser>(&self, serializer: Ser) -> Result<Ser::Ok, Ser::Error>
1506    where
1507        Ser: serde::Serializer,
1508    {
1509        serializer.serialize_str(self.as_str())
1510    }
1511}
1512
1513impl<'de, S: Deserialize<'de> + BosStr> Deserialize<'de> for OrgProfileDetailViewStatus<S> {
1514    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
1515    where
1516        D: serde::Deserializer<'de>,
1517    {
1518        let s = S::deserialize(deserializer)?;
1519        Ok(Self::from_value(s))
1520    }
1521}
1522
1523impl<S: BosStr + Default> Default for OrgProfileDetailViewStatus<S> {
1524    fn default() -> Self {
1525        Self::Other(Default::default())
1526    }
1527}
1528
1529impl<S: BosStr> jacquard_common::IntoStatic for OrgProfileDetailViewStatus<S>
1530where
1531    S: BosStr + jacquard_common::IntoStatic,
1532    S::Output: BosStr,
1533{
1534    type Output = OrgProfileDetailViewStatus<S::Output>;
1535    fn into_static(self) -> Self::Output {
1536        match self {
1537            OrgProfileDetailViewStatus::Active => OrgProfileDetailViewStatus::Active,
1538            OrgProfileDetailViewStatus::Inactive => OrgProfileDetailViewStatus::Inactive,
1539            OrgProfileDetailViewStatus::Merged => OrgProfileDetailViewStatus::Merged,
1540            OrgProfileDetailViewStatus::Acquired => OrgProfileDetailViewStatus::Acquired,
1541            OrgProfileDetailViewStatus::Defunct => OrgProfileDetailViewStatus::Defunct,
1542            OrgProfileDetailViewStatus::Other(v) => {
1543                OrgProfileDetailViewStatus::Other(v.into_static())
1544            }
1545        }
1546    }
1547}
1548
1549#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic)]
1550#[serde(
1551    rename_all = "camelCase",
1552    bound(deserialize = "S: Deserialize<'de> + BosStr")
1553)]
1554pub struct OrgProfileSummaryView<S: BosStr = DefaultStr> {
1555    #[serde(skip_serializing_if = "Option::is_none")]
1556    pub avatar: Option<BlobRef<S>>,
1557    pub did: Did<S>,
1558    #[serde(skip_serializing_if = "Option::is_none")]
1559    pub display_name: Option<S>,
1560    pub uri: AtUri<S>,
1561    #[serde(flatten, default, skip_serializing_if = "Option::is_none")]
1562    pub extra_data: Option<BTreeMap<SmolStr, Data<S>>>,
1563}
1564
1565#[derive(Debug, Clone, PartialEq, Eq, Hash)]
1566pub enum PlatformCategory<S: BosStr = DefaultStr> {
1567    Console,
1568    Portable,
1569    Computer,
1570    Arcade,
1571    OperatingSystem,
1572    Other(S),
1573}
1574
1575impl<S: BosStr> PlatformCategory<S> {
1576    pub fn as_str(&self) -> &str {
1577        match self {
1578            Self::Console => "console",
1579            Self::Portable => "portable",
1580            Self::Computer => "computer",
1581            Self::Arcade => "arcade",
1582            Self::OperatingSystem => "operatingSystem",
1583            Self::Other(s) => s.as_ref(),
1584        }
1585    }
1586    /// Construct from a string-like value, matching known values.
1587    pub fn from_value(s: S) -> Self {
1588        match s.as_ref() {
1589            "console" => Self::Console,
1590            "portable" => Self::Portable,
1591            "computer" => Self::Computer,
1592            "arcade" => Self::Arcade,
1593            "operatingSystem" => Self::OperatingSystem,
1594            _ => Self::Other(s),
1595        }
1596    }
1597}
1598
1599impl<S: BosStr> AsRef<str> for PlatformCategory<S> {
1600    fn as_ref(&self) -> &str {
1601        self.as_str()
1602    }
1603}
1604
1605impl<S: BosStr> core::fmt::Display for PlatformCategory<S> {
1606    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
1607        write!(f, "{}", self.as_str())
1608    }
1609}
1610
1611impl<S: BosStr> Serialize for PlatformCategory<S> {
1612    fn serialize<Ser>(&self, serializer: Ser) -> Result<Ser::Ok, Ser::Error>
1613    where
1614        Ser: serde::Serializer,
1615    {
1616        serializer.serialize_str(self.as_str())
1617    }
1618}
1619
1620impl<'de, S: Deserialize<'de> + BosStr> Deserialize<'de> for PlatformCategory<S> {
1621    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
1622    where
1623        D: serde::Deserializer<'de>,
1624    {
1625        let s = S::deserialize(deserializer)?;
1626        Ok(Self::from_value(s))
1627    }
1628}
1629
1630impl<S: BosStr> jacquard_common::IntoStatic for PlatformCategory<S>
1631where
1632    S: BosStr + jacquard_common::IntoStatic,
1633    S::Output: BosStr,
1634{
1635    type Output = PlatformCategory<S::Output>;
1636    fn into_static(self) -> Self::Output {
1637        match self {
1638            PlatformCategory::Console => PlatformCategory::Console,
1639            PlatformCategory::Portable => PlatformCategory::Portable,
1640            PlatformCategory::Computer => PlatformCategory::Computer,
1641            PlatformCategory::Arcade => PlatformCategory::Arcade,
1642            PlatformCategory::OperatingSystem => PlatformCategory::OperatingSystem,
1643            PlatformCategory::Other(v) => PlatformCategory::Other(v.into_static()),
1644        }
1645    }
1646}
1647
1648/// Features supported by a game on a specific storefront/platform.
1649
1650#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic)]
1651#[serde(
1652    rename_all = "camelCase",
1653    bound(deserialize = "S: Deserialize<'de> + BosStr")
1654)]
1655pub struct PlatformFeatures<S: BosStr = DefaultStr> {
1656    pub features: Vec<S>,
1657    pub platform: PlatformFeaturesPlatform<S>,
1658    #[serde(flatten, default, skip_serializing_if = "Option::is_none")]
1659    pub extra_data: Option<BTreeMap<SmolStr, Data<S>>>,
1660}
1661
1662#[derive(Debug, Clone, PartialEq, Eq, Hash)]
1663pub enum PlatformFeaturesPlatform<S: BosStr = DefaultStr> {
1664    Steam,
1665    Gog,
1666    EpicGames,
1667    PlayStation,
1668    Xbox,
1669    NintendoEshop,
1670    Other(S),
1671}
1672
1673impl<S: BosStr> PlatformFeaturesPlatform<S> {
1674    pub fn as_str(&self) -> &str {
1675        match self {
1676            Self::Steam => "steam",
1677            Self::Gog => "gog",
1678            Self::EpicGames => "epicGames",
1679            Self::PlayStation => "playStation",
1680            Self::Xbox => "xbox",
1681            Self::NintendoEshop => "nintendoEshop",
1682            Self::Other(s) => s.as_ref(),
1683        }
1684    }
1685    /// Construct from a string-like value, matching known values.
1686    pub fn from_value(s: S) -> Self {
1687        match s.as_ref() {
1688            "steam" => Self::Steam,
1689            "gog" => Self::Gog,
1690            "epicGames" => Self::EpicGames,
1691            "playStation" => Self::PlayStation,
1692            "xbox" => Self::Xbox,
1693            "nintendoEshop" => Self::NintendoEshop,
1694            _ => Self::Other(s),
1695        }
1696    }
1697}
1698
1699impl<S: BosStr> core::fmt::Display for PlatformFeaturesPlatform<S> {
1700    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
1701        write!(f, "{}", self.as_str())
1702    }
1703}
1704
1705impl<S: BosStr> AsRef<str> for PlatformFeaturesPlatform<S> {
1706    fn as_ref(&self) -> &str {
1707        self.as_str()
1708    }
1709}
1710
1711impl<S: BosStr> Serialize for PlatformFeaturesPlatform<S> {
1712    fn serialize<Ser>(&self, serializer: Ser) -> Result<Ser::Ok, Ser::Error>
1713    where
1714        Ser: serde::Serializer,
1715    {
1716        serializer.serialize_str(self.as_str())
1717    }
1718}
1719
1720impl<'de, S: Deserialize<'de> + BosStr> Deserialize<'de> for PlatformFeaturesPlatform<S> {
1721    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
1722    where
1723        D: serde::Deserializer<'de>,
1724    {
1725        let s = S::deserialize(deserializer)?;
1726        Ok(Self::from_value(s))
1727    }
1728}
1729
1730impl<S: BosStr + Default> Default for PlatformFeaturesPlatform<S> {
1731    fn default() -> Self {
1732        Self::Other(Default::default())
1733    }
1734}
1735
1736impl<S: BosStr> jacquard_common::IntoStatic for PlatformFeaturesPlatform<S>
1737where
1738    S: BosStr + jacquard_common::IntoStatic,
1739    S::Output: BosStr,
1740{
1741    type Output = PlatformFeaturesPlatform<S::Output>;
1742    fn into_static(self) -> Self::Output {
1743        match self {
1744            PlatformFeaturesPlatform::Steam => PlatformFeaturesPlatform::Steam,
1745            PlatformFeaturesPlatform::Gog => PlatformFeaturesPlatform::Gog,
1746            PlatformFeaturesPlatform::EpicGames => PlatformFeaturesPlatform::EpicGames,
1747            PlatformFeaturesPlatform::PlayStation => PlatformFeaturesPlatform::PlayStation,
1748            PlatformFeaturesPlatform::Xbox => PlatformFeaturesPlatform::Xbox,
1749            PlatformFeaturesPlatform::NintendoEshop => PlatformFeaturesPlatform::NintendoEshop,
1750            PlatformFeaturesPlatform::Other(v) => PlatformFeaturesPlatform::Other(v.into_static()),
1751        }
1752    }
1753}
1754
1755#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic)]
1756#[serde(
1757    rename_all = "camelCase",
1758    bound(deserialize = "S: Deserialize<'de> + BosStr")
1759)]
1760pub struct PlatformSummaryView<S: BosStr = DefaultStr> {
1761    #[serde(skip_serializing_if = "Option::is_none")]
1762    pub abbreviation: Option<S>,
1763    #[serde(skip_serializing_if = "Option::is_none")]
1764    pub category: Option<games_gamesgamesgamesgames::PlatformCategory<S>>,
1765    pub name: S,
1766    #[serde(skip_serializing_if = "Option::is_none")]
1767    pub slug: Option<S>,
1768    pub uri: AtUri<S>,
1769    #[serde(flatten, default, skip_serializing_if = "Option::is_none")]
1770    pub extra_data: Option<BTreeMap<SmolStr, Data<S>>>,
1771}
1772
1773#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic, Default)]
1774#[serde(
1775    rename_all = "camelCase",
1776    bound(deserialize = "S: Deserialize<'de> + BosStr")
1777)]
1778pub struct PlatformVersion<S: BosStr = DefaultStr> {
1779    #[serde(skip_serializing_if = "Option::is_none")]
1780    pub connectivity: Option<S>,
1781    #[serde(skip_serializing_if = "Option::is_none")]
1782    pub cpu: Option<S>,
1783    #[serde(skip_serializing_if = "Option::is_none")]
1784    pub gpu: Option<S>,
1785    #[serde(skip_serializing_if = "Option::is_none")]
1786    pub max_resolution: Option<S>,
1787    #[serde(skip_serializing_if = "Option::is_none")]
1788    pub media: Option<Vec<games_gamesgamesgamesgames::MediaItem<S>>>,
1789    #[serde(skip_serializing_if = "Option::is_none")]
1790    pub memory: Option<S>,
1791    pub name: S,
1792    #[serde(skip_serializing_if = "Option::is_none")]
1793    pub os: Option<S>,
1794    #[serde(skip_serializing_if = "Option::is_none")]
1795    pub output: Option<S>,
1796    #[serde(skip_serializing_if = "Option::is_none")]
1797    pub storage: Option<S>,
1798    #[serde(skip_serializing_if = "Option::is_none")]
1799    pub summary: Option<S>,
1800    #[serde(flatten, default, skip_serializing_if = "Option::is_none")]
1801    pub extra_data: Option<BTreeMap<SmolStr, Data<S>>>,
1802}
1803
1804#[derive(Debug, Clone, PartialEq, Eq, Hash)]
1805pub enum PlayerPerspective<S: BosStr = DefaultStr> {
1806    Auditory,
1807    FirstPerson,
1808    Isometric,
1809    SideView,
1810    Text,
1811    ThirdPerson,
1812    TopDown,
1813    Vr,
1814    Other(S),
1815}
1816
1817impl<S: BosStr> PlayerPerspective<S> {
1818    pub fn as_str(&self) -> &str {
1819        match self {
1820            Self::Auditory => "auditory",
1821            Self::FirstPerson => "firstPerson",
1822            Self::Isometric => "isometric",
1823            Self::SideView => "sideView",
1824            Self::Text => "text",
1825            Self::ThirdPerson => "thirdPerson",
1826            Self::TopDown => "topDown",
1827            Self::Vr => "vr",
1828            Self::Other(s) => s.as_ref(),
1829        }
1830    }
1831    /// Construct from a string-like value, matching known values.
1832    pub fn from_value(s: S) -> Self {
1833        match s.as_ref() {
1834            "auditory" => Self::Auditory,
1835            "firstPerson" => Self::FirstPerson,
1836            "isometric" => Self::Isometric,
1837            "sideView" => Self::SideView,
1838            "text" => Self::Text,
1839            "thirdPerson" => Self::ThirdPerson,
1840            "topDown" => Self::TopDown,
1841            "vr" => Self::Vr,
1842            _ => Self::Other(s),
1843        }
1844    }
1845}
1846
1847impl<S: BosStr> AsRef<str> for PlayerPerspective<S> {
1848    fn as_ref(&self) -> &str {
1849        self.as_str()
1850    }
1851}
1852
1853impl<S: BosStr> core::fmt::Display for PlayerPerspective<S> {
1854    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
1855        write!(f, "{}", self.as_str())
1856    }
1857}
1858
1859impl<S: BosStr> Serialize for PlayerPerspective<S> {
1860    fn serialize<Ser>(&self, serializer: Ser) -> Result<Ser::Ok, Ser::Error>
1861    where
1862        Ser: serde::Serializer,
1863    {
1864        serializer.serialize_str(self.as_str())
1865    }
1866}
1867
1868impl<'de, S: Deserialize<'de> + BosStr> Deserialize<'de> for PlayerPerspective<S> {
1869    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
1870    where
1871        D: serde::Deserializer<'de>,
1872    {
1873        let s = S::deserialize(deserializer)?;
1874        Ok(Self::from_value(s))
1875    }
1876}
1877
1878impl<S: BosStr> jacquard_common::IntoStatic for PlayerPerspective<S>
1879where
1880    S: BosStr + jacquard_common::IntoStatic,
1881    S::Output: BosStr,
1882{
1883    type Output = PlayerPerspective<S::Output>;
1884    fn into_static(self) -> Self::Output {
1885        match self {
1886            PlayerPerspective::Auditory => PlayerPerspective::Auditory,
1887            PlayerPerspective::FirstPerson => PlayerPerspective::FirstPerson,
1888            PlayerPerspective::Isometric => PlayerPerspective::Isometric,
1889            PlayerPerspective::SideView => PlayerPerspective::SideView,
1890            PlayerPerspective::Text => PlayerPerspective::Text,
1891            PlayerPerspective::ThirdPerson => PlayerPerspective::ThirdPerson,
1892            PlayerPerspective::TopDown => PlayerPerspective::TopDown,
1893            PlayerPerspective::Vr => PlayerPerspective::Vr,
1894            PlayerPerspective::Other(v) => PlayerPerspective::Other(v.into_static()),
1895        }
1896    }
1897}
1898
1899#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic)]
1900#[serde(
1901    rename_all = "camelCase",
1902    bound(deserialize = "S: Deserialize<'de> + BosStr")
1903)]
1904pub struct ProfileSummaryView<S: BosStr = DefaultStr> {
1905    #[serde(skip_serializing_if = "Option::is_none")]
1906    pub avatar: Option<BlobRef<S>>,
1907    pub did: Did<S>,
1908    #[serde(skip_serializing_if = "Option::is_none")]
1909    pub display_name: Option<S>,
1910    pub profile_type: ProfileSummaryViewProfileType<S>,
1911    pub uri: AtUri<S>,
1912    #[serde(flatten, default, skip_serializing_if = "Option::is_none")]
1913    pub extra_data: Option<BTreeMap<SmolStr, Data<S>>>,
1914}
1915
1916#[derive(Debug, Clone, PartialEq, Eq, Hash)]
1917pub enum ProfileSummaryViewProfileType<S: BosStr = DefaultStr> {
1918    Actor,
1919    Org,
1920    Other(S),
1921}
1922
1923impl<S: BosStr> ProfileSummaryViewProfileType<S> {
1924    pub fn as_str(&self) -> &str {
1925        match self {
1926            Self::Actor => "actor",
1927            Self::Org => "org",
1928            Self::Other(s) => s.as_ref(),
1929        }
1930    }
1931    /// Construct from a string-like value, matching known values.
1932    pub fn from_value(s: S) -> Self {
1933        match s.as_ref() {
1934            "actor" => Self::Actor,
1935            "org" => Self::Org,
1936            _ => Self::Other(s),
1937        }
1938    }
1939}
1940
1941impl<S: BosStr> core::fmt::Display for ProfileSummaryViewProfileType<S> {
1942    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
1943        write!(f, "{}", self.as_str())
1944    }
1945}
1946
1947impl<S: BosStr> AsRef<str> for ProfileSummaryViewProfileType<S> {
1948    fn as_ref(&self) -> &str {
1949        self.as_str()
1950    }
1951}
1952
1953impl<S: BosStr> Serialize for ProfileSummaryViewProfileType<S> {
1954    fn serialize<Ser>(&self, serializer: Ser) -> Result<Ser::Ok, Ser::Error>
1955    where
1956        Ser: serde::Serializer,
1957    {
1958        serializer.serialize_str(self.as_str())
1959    }
1960}
1961
1962impl<'de, S: Deserialize<'de> + BosStr> Deserialize<'de> for ProfileSummaryViewProfileType<S> {
1963    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
1964    where
1965        D: serde::Deserializer<'de>,
1966    {
1967        let s = S::deserialize(deserializer)?;
1968        Ok(Self::from_value(s))
1969    }
1970}
1971
1972impl<S: BosStr + Default> Default for ProfileSummaryViewProfileType<S> {
1973    fn default() -> Self {
1974        Self::Other(Default::default())
1975    }
1976}
1977
1978impl<S: BosStr> jacquard_common::IntoStatic for ProfileSummaryViewProfileType<S>
1979where
1980    S: BosStr + jacquard_common::IntoStatic,
1981    S::Output: BosStr,
1982{
1983    type Output = ProfileSummaryViewProfileType<S::Output>;
1984    fn into_static(self) -> Self::Output {
1985        match self {
1986            ProfileSummaryViewProfileType::Actor => ProfileSummaryViewProfileType::Actor,
1987            ProfileSummaryViewProfileType::Org => ProfileSummaryViewProfileType::Org,
1988            ProfileSummaryViewProfileType::Other(v) => {
1989                ProfileSummaryViewProfileType::Other(v.into_static())
1990            }
1991        }
1992    }
1993}
1994
1995#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic, Default)]
1996#[serde(
1997    rename_all = "camelCase",
1998    bound(deserialize = "S: Deserialize<'de> + BosStr")
1999)]
2000pub struct Release<S: BosStr = DefaultStr> {
2001    ///Free-text platform name, used when no platform record exists.
2002    #[serde(skip_serializing_if = "Option::is_none")]
2003    pub platform: Option<S>,
2004    ///AT URI of a platform record.
2005    #[serde(skip_serializing_if = "Option::is_none")]
2006    pub platform_uri: Option<AtUri<S>>,
2007    #[serde(skip_serializing_if = "Option::is_none")]
2008    pub release_dates: Option<Vec<games_gamesgamesgamesgames::ReleaseDate<S>>>,
2009    #[serde(flatten, default, skip_serializing_if = "Option::is_none")]
2010    pub extra_data: Option<BTreeMap<SmolStr, Data<S>>>,
2011}
2012
2013#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic, Default)]
2014#[serde(
2015    rename_all = "camelCase",
2016    bound(deserialize = "S: Deserialize<'de> + BosStr")
2017)]
2018pub struct ReleaseDate<S: BosStr = DefaultStr> {
2019    #[serde(skip_serializing_if = "Option::is_none")]
2020    pub region: Option<ReleaseDateRegion<S>>,
2021    #[serde(skip_serializing_if = "Option::is_none")]
2022    pub released_at: Option<S>,
2023    #[serde(skip_serializing_if = "Option::is_none")]
2024    pub released_at_format: Option<S>,
2025    #[serde(skip_serializing_if = "Option::is_none")]
2026    pub status: Option<ReleaseDateStatus<S>>,
2027    #[serde(flatten, default, skip_serializing_if = "Option::is_none")]
2028    pub extra_data: Option<BTreeMap<SmolStr, Data<S>>>,
2029}
2030
2031#[derive(Debug, Clone, PartialEq, Eq, Hash)]
2032pub enum ReleaseDateRegion<S: BosStr = DefaultStr> {
2033    Worldwide,
2034    Europe,
2035    NorthAmerica,
2036    Australia,
2037    NewZealand,
2038    Japan,
2039    China,
2040    Asia,
2041    Korea,
2042    Brazil,
2043    Other(S),
2044}
2045
2046impl<S: BosStr> ReleaseDateRegion<S> {
2047    pub fn as_str(&self) -> &str {
2048        match self {
2049            Self::Worldwide => "worldwide",
2050            Self::Europe => "europe",
2051            Self::NorthAmerica => "northAmerica",
2052            Self::Australia => "australia",
2053            Self::NewZealand => "newZealand",
2054            Self::Japan => "japan",
2055            Self::China => "china",
2056            Self::Asia => "asia",
2057            Self::Korea => "korea",
2058            Self::Brazil => "brazil",
2059            Self::Other(s) => s.as_ref(),
2060        }
2061    }
2062    /// Construct from a string-like value, matching known values.
2063    pub fn from_value(s: S) -> Self {
2064        match s.as_ref() {
2065            "worldwide" => Self::Worldwide,
2066            "europe" => Self::Europe,
2067            "northAmerica" => Self::NorthAmerica,
2068            "australia" => Self::Australia,
2069            "newZealand" => Self::NewZealand,
2070            "japan" => Self::Japan,
2071            "china" => Self::China,
2072            "asia" => Self::Asia,
2073            "korea" => Self::Korea,
2074            "brazil" => Self::Brazil,
2075            _ => Self::Other(s),
2076        }
2077    }
2078}
2079
2080impl<S: BosStr> core::fmt::Display for ReleaseDateRegion<S> {
2081    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
2082        write!(f, "{}", self.as_str())
2083    }
2084}
2085
2086impl<S: BosStr> AsRef<str> for ReleaseDateRegion<S> {
2087    fn as_ref(&self) -> &str {
2088        self.as_str()
2089    }
2090}
2091
2092impl<S: BosStr> Serialize for ReleaseDateRegion<S> {
2093    fn serialize<Ser>(&self, serializer: Ser) -> Result<Ser::Ok, Ser::Error>
2094    where
2095        Ser: serde::Serializer,
2096    {
2097        serializer.serialize_str(self.as_str())
2098    }
2099}
2100
2101impl<'de, S: Deserialize<'de> + BosStr> Deserialize<'de> for ReleaseDateRegion<S> {
2102    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
2103    where
2104        D: serde::Deserializer<'de>,
2105    {
2106        let s = S::deserialize(deserializer)?;
2107        Ok(Self::from_value(s))
2108    }
2109}
2110
2111impl<S: BosStr + Default> Default for ReleaseDateRegion<S> {
2112    fn default() -> Self {
2113        Self::Other(Default::default())
2114    }
2115}
2116
2117impl<S: BosStr> jacquard_common::IntoStatic for ReleaseDateRegion<S>
2118where
2119    S: BosStr + jacquard_common::IntoStatic,
2120    S::Output: BosStr,
2121{
2122    type Output = ReleaseDateRegion<S::Output>;
2123    fn into_static(self) -> Self::Output {
2124        match self {
2125            ReleaseDateRegion::Worldwide => ReleaseDateRegion::Worldwide,
2126            ReleaseDateRegion::Europe => ReleaseDateRegion::Europe,
2127            ReleaseDateRegion::NorthAmerica => ReleaseDateRegion::NorthAmerica,
2128            ReleaseDateRegion::Australia => ReleaseDateRegion::Australia,
2129            ReleaseDateRegion::NewZealand => ReleaseDateRegion::NewZealand,
2130            ReleaseDateRegion::Japan => ReleaseDateRegion::Japan,
2131            ReleaseDateRegion::China => ReleaseDateRegion::China,
2132            ReleaseDateRegion::Asia => ReleaseDateRegion::Asia,
2133            ReleaseDateRegion::Korea => ReleaseDateRegion::Korea,
2134            ReleaseDateRegion::Brazil => ReleaseDateRegion::Brazil,
2135            ReleaseDateRegion::Other(v) => ReleaseDateRegion::Other(v.into_static()),
2136        }
2137    }
2138}
2139
2140#[derive(Debug, Clone, PartialEq, Eq, Hash)]
2141pub enum ReleaseDateStatus<S: BosStr = DefaultStr> {
2142    AdvancedAccess,
2143    Alpha,
2144    Beta,
2145    Cancelled,
2146    DigitalCompatibilityRelease,
2147    EarlyAccess,
2148    NextGenOptimizationRelease,
2149    Offline,
2150    Release,
2151    Other(S),
2152}
2153
2154impl<S: BosStr> ReleaseDateStatus<S> {
2155    pub fn as_str(&self) -> &str {
2156        match self {
2157            Self::AdvancedAccess => "advancedAccess",
2158            Self::Alpha => "alpha",
2159            Self::Beta => "beta",
2160            Self::Cancelled => "cancelled",
2161            Self::DigitalCompatibilityRelease => "digitalCompatibilityRelease",
2162            Self::EarlyAccess => "earlyAccess",
2163            Self::NextGenOptimizationRelease => "nextGenOptimizationRelease",
2164            Self::Offline => "offline",
2165            Self::Release => "release",
2166            Self::Other(s) => s.as_ref(),
2167        }
2168    }
2169    /// Construct from a string-like value, matching known values.
2170    pub fn from_value(s: S) -> Self {
2171        match s.as_ref() {
2172            "advancedAccess" => Self::AdvancedAccess,
2173            "alpha" => Self::Alpha,
2174            "beta" => Self::Beta,
2175            "cancelled" => Self::Cancelled,
2176            "digitalCompatibilityRelease" => Self::DigitalCompatibilityRelease,
2177            "earlyAccess" => Self::EarlyAccess,
2178            "nextGenOptimizationRelease" => Self::NextGenOptimizationRelease,
2179            "offline" => Self::Offline,
2180            "release" => Self::Release,
2181            _ => Self::Other(s),
2182        }
2183    }
2184}
2185
2186impl<S: BosStr> core::fmt::Display for ReleaseDateStatus<S> {
2187    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
2188        write!(f, "{}", self.as_str())
2189    }
2190}
2191
2192impl<S: BosStr> AsRef<str> for ReleaseDateStatus<S> {
2193    fn as_ref(&self) -> &str {
2194        self.as_str()
2195    }
2196}
2197
2198impl<S: BosStr> Serialize for ReleaseDateStatus<S> {
2199    fn serialize<Ser>(&self, serializer: Ser) -> Result<Ser::Ok, Ser::Error>
2200    where
2201        Ser: serde::Serializer,
2202    {
2203        serializer.serialize_str(self.as_str())
2204    }
2205}
2206
2207impl<'de, S: Deserialize<'de> + BosStr> Deserialize<'de> for ReleaseDateStatus<S> {
2208    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
2209    where
2210        D: serde::Deserializer<'de>,
2211    {
2212        let s = S::deserialize(deserializer)?;
2213        Ok(Self::from_value(s))
2214    }
2215}
2216
2217impl<S: BosStr + Default> Default for ReleaseDateStatus<S> {
2218    fn default() -> Self {
2219        Self::Other(Default::default())
2220    }
2221}
2222
2223impl<S: BosStr> jacquard_common::IntoStatic for ReleaseDateStatus<S>
2224where
2225    S: BosStr + jacquard_common::IntoStatic,
2226    S::Output: BosStr,
2227{
2228    type Output = ReleaseDateStatus<S::Output>;
2229    fn into_static(self) -> Self::Output {
2230        match self {
2231            ReleaseDateStatus::AdvancedAccess => ReleaseDateStatus::AdvancedAccess,
2232            ReleaseDateStatus::Alpha => ReleaseDateStatus::Alpha,
2233            ReleaseDateStatus::Beta => ReleaseDateStatus::Beta,
2234            ReleaseDateStatus::Cancelled => ReleaseDateStatus::Cancelled,
2235            ReleaseDateStatus::DigitalCompatibilityRelease => {
2236                ReleaseDateStatus::DigitalCompatibilityRelease
2237            }
2238            ReleaseDateStatus::EarlyAccess => ReleaseDateStatus::EarlyAccess,
2239            ReleaseDateStatus::NextGenOptimizationRelease => {
2240                ReleaseDateStatus::NextGenOptimizationRelease
2241            }
2242            ReleaseDateStatus::Offline => ReleaseDateStatus::Offline,
2243            ReleaseDateStatus::Release => ReleaseDateStatus::Release,
2244            ReleaseDateStatus::Other(v) => ReleaseDateStatus::Other(v.into_static()),
2245        }
2246    }
2247}
2248
2249/// An inline attestation signature.
2250
2251#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic)]
2252#[serde(
2253    rename_all = "camelCase",
2254    bound(deserialize = "S: Deserialize<'de> + BosStr")
2255)]
2256pub struct Signature<S: BosStr = DefaultStr> {
2257    ///DID key reference (e.g., did:web:example.com#signing1).
2258    pub key: S,
2259    ///The signature bytes.
2260    #[serde(with = "jacquard_common::serde_bytes_helper")]
2261    pub signature: Bytes,
2262    #[serde(flatten, default, skip_serializing_if = "Option::is_none")]
2263    pub extra_data: Option<BTreeMap<SmolStr, Data<S>>>,
2264}
2265
2266#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic)]
2267#[serde(
2268    rename_all = "camelCase",
2269    bound(deserialize = "S: Deserialize<'de> + BosStr")
2270)]
2271pub struct SkeletonGameFeedItem<S: BosStr = DefaultStr> {
2272    #[serde(skip_serializing_if = "Option::is_none")]
2273    pub feed_context: Option<S>,
2274    pub game: AtUri<S>,
2275    #[serde(flatten, default, skip_serializing_if = "Option::is_none")]
2276    pub extra_data: Option<BTreeMap<SmolStr, Data<S>>>,
2277}
2278
2279/// System requirements for a game on a specific platform.
2280
2281#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic, Default)]
2282#[serde(
2283    rename_all = "camelCase",
2284    bound(deserialize = "S: Deserialize<'de> + BosStr")
2285)]
2286pub struct SystemRequirements<S: BosStr = DefaultStr> {
2287    #[serde(skip_serializing_if = "Option::is_none")]
2288    pub minimum: Option<games_gamesgamesgamesgames::SystemSpec<S>>,
2289    pub platform: SystemRequirementsPlatform<S>,
2290    #[serde(skip_serializing_if = "Option::is_none")]
2291    pub recommended: Option<games_gamesgamesgamesgames::SystemSpec<S>>,
2292    #[serde(flatten, default, skip_serializing_if = "Option::is_none")]
2293    pub extra_data: Option<BTreeMap<SmolStr, Data<S>>>,
2294}
2295
2296#[derive(Debug, Clone, PartialEq, Eq, Hash)]
2297pub enum SystemRequirementsPlatform<S: BosStr = DefaultStr> {
2298    Windows,
2299    Mac,
2300    Linux,
2301    Other(S),
2302}
2303
2304impl<S: BosStr> SystemRequirementsPlatform<S> {
2305    pub fn as_str(&self) -> &str {
2306        match self {
2307            Self::Windows => "windows",
2308            Self::Mac => "mac",
2309            Self::Linux => "linux",
2310            Self::Other(s) => s.as_ref(),
2311        }
2312    }
2313    /// Construct from a string-like value, matching known values.
2314    pub fn from_value(s: S) -> Self {
2315        match s.as_ref() {
2316            "windows" => Self::Windows,
2317            "mac" => Self::Mac,
2318            "linux" => Self::Linux,
2319            _ => Self::Other(s),
2320        }
2321    }
2322}
2323
2324impl<S: BosStr> core::fmt::Display for SystemRequirementsPlatform<S> {
2325    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
2326        write!(f, "{}", self.as_str())
2327    }
2328}
2329
2330impl<S: BosStr> AsRef<str> for SystemRequirementsPlatform<S> {
2331    fn as_ref(&self) -> &str {
2332        self.as_str()
2333    }
2334}
2335
2336impl<S: BosStr> Serialize for SystemRequirementsPlatform<S> {
2337    fn serialize<Ser>(&self, serializer: Ser) -> Result<Ser::Ok, Ser::Error>
2338    where
2339        Ser: serde::Serializer,
2340    {
2341        serializer.serialize_str(self.as_str())
2342    }
2343}
2344
2345impl<'de, S: Deserialize<'de> + BosStr> Deserialize<'de> for SystemRequirementsPlatform<S> {
2346    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
2347    where
2348        D: serde::Deserializer<'de>,
2349    {
2350        let s = S::deserialize(deserializer)?;
2351        Ok(Self::from_value(s))
2352    }
2353}
2354
2355impl<S: BosStr + Default> Default for SystemRequirementsPlatform<S> {
2356    fn default() -> Self {
2357        Self::Other(Default::default())
2358    }
2359}
2360
2361impl<S: BosStr> jacquard_common::IntoStatic for SystemRequirementsPlatform<S>
2362where
2363    S: BosStr + jacquard_common::IntoStatic,
2364    S::Output: BosStr,
2365{
2366    type Output = SystemRequirementsPlatform<S::Output>;
2367    fn into_static(self) -> Self::Output {
2368        match self {
2369            SystemRequirementsPlatform::Windows => SystemRequirementsPlatform::Windows,
2370            SystemRequirementsPlatform::Mac => SystemRequirementsPlatform::Mac,
2371            SystemRequirementsPlatform::Linux => SystemRequirementsPlatform::Linux,
2372            SystemRequirementsPlatform::Other(v) => {
2373                SystemRequirementsPlatform::Other(v.into_static())
2374            }
2375        }
2376    }
2377}
2378
2379/// Hardware/software specification for a platform.
2380
2381#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic, Default)]
2382#[serde(
2383    rename_all = "camelCase",
2384    bound(deserialize = "S: Deserialize<'de> + BosStr")
2385)]
2386pub struct SystemSpec<S: BosStr = DefaultStr> {
2387    #[serde(skip_serializing_if = "Option::is_none")]
2388    pub additional_notes: Option<S>,
2389    #[serde(skip_serializing_if = "Option::is_none")]
2390    pub directx: Option<S>,
2391    #[serde(skip_serializing_if = "Option::is_none")]
2392    pub graphics: Option<S>,
2393    #[serde(skip_serializing_if = "Option::is_none")]
2394    pub memory: Option<S>,
2395    #[serde(skip_serializing_if = "Option::is_none")]
2396    pub os: Option<S>,
2397    #[serde(skip_serializing_if = "Option::is_none")]
2398    pub processor: Option<S>,
2399    #[serde(skip_serializing_if = "Option::is_none")]
2400    pub sound_card: Option<S>,
2401    #[serde(skip_serializing_if = "Option::is_none")]
2402    pub storage: Option<S>,
2403    #[serde(flatten, default, skip_serializing_if = "Option::is_none")]
2404    pub extra_data: Option<BTreeMap<SmolStr, Data<S>>>,
2405}
2406
2407#[derive(Debug, Clone, PartialEq, Eq, Hash)]
2408pub enum Theme<S: BosStr = DefaultStr> {
2409    _4x,
2410    Action,
2411    Business,
2412    Comedy,
2413    Drama,
2414    Educational,
2415    Erotic,
2416    Fantasy,
2417    Historical,
2418    Horror,
2419    Kids,
2420    Mystery,
2421    Nonfiction,
2422    OpenWorld,
2423    Party,
2424    Romance,
2425    Sandbox,
2426    Scifi,
2427    Stealth,
2428    Survival,
2429    Thriller,
2430    Warfare,
2431    Other(S),
2432}
2433
2434impl<S: BosStr> Theme<S> {
2435    pub fn as_str(&self) -> &str {
2436        match self {
2437            Self::_4x => "4x",
2438            Self::Action => "action",
2439            Self::Business => "business",
2440            Self::Comedy => "comedy",
2441            Self::Drama => "drama",
2442            Self::Educational => "educational",
2443            Self::Erotic => "erotic",
2444            Self::Fantasy => "fantasy",
2445            Self::Historical => "historical",
2446            Self::Horror => "horror",
2447            Self::Kids => "kids",
2448            Self::Mystery => "mystery",
2449            Self::Nonfiction => "nonfiction",
2450            Self::OpenWorld => "openWorld",
2451            Self::Party => "party",
2452            Self::Romance => "romance",
2453            Self::Sandbox => "sandbox",
2454            Self::Scifi => "scifi",
2455            Self::Stealth => "stealth",
2456            Self::Survival => "survival",
2457            Self::Thriller => "thriller",
2458            Self::Warfare => "warfare",
2459            Self::Other(s) => s.as_ref(),
2460        }
2461    }
2462    /// Construct from a string-like value, matching known values.
2463    pub fn from_value(s: S) -> Self {
2464        match s.as_ref() {
2465            "4x" => Self::_4x,
2466            "action" => Self::Action,
2467            "business" => Self::Business,
2468            "comedy" => Self::Comedy,
2469            "drama" => Self::Drama,
2470            "educational" => Self::Educational,
2471            "erotic" => Self::Erotic,
2472            "fantasy" => Self::Fantasy,
2473            "historical" => Self::Historical,
2474            "horror" => Self::Horror,
2475            "kids" => Self::Kids,
2476            "mystery" => Self::Mystery,
2477            "nonfiction" => Self::Nonfiction,
2478            "openWorld" => Self::OpenWorld,
2479            "party" => Self::Party,
2480            "romance" => Self::Romance,
2481            "sandbox" => Self::Sandbox,
2482            "scifi" => Self::Scifi,
2483            "stealth" => Self::Stealth,
2484            "survival" => Self::Survival,
2485            "thriller" => Self::Thriller,
2486            "warfare" => Self::Warfare,
2487            _ => Self::Other(s),
2488        }
2489    }
2490}
2491
2492impl<S: BosStr> AsRef<str> for Theme<S> {
2493    fn as_ref(&self) -> &str {
2494        self.as_str()
2495    }
2496}
2497
2498impl<S: BosStr> core::fmt::Display for Theme<S> {
2499    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
2500        write!(f, "{}", self.as_str())
2501    }
2502}
2503
2504impl<S: BosStr> Serialize for Theme<S> {
2505    fn serialize<Ser>(&self, serializer: Ser) -> Result<Ser::Ok, Ser::Error>
2506    where
2507        Ser: serde::Serializer,
2508    {
2509        serializer.serialize_str(self.as_str())
2510    }
2511}
2512
2513impl<'de, S: Deserialize<'de> + BosStr> Deserialize<'de> for Theme<S> {
2514    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
2515    where
2516        D: serde::Deserializer<'de>,
2517    {
2518        let s = S::deserialize(deserializer)?;
2519        Ok(Self::from_value(s))
2520    }
2521}
2522
2523impl<S: BosStr> jacquard_common::IntoStatic for Theme<S>
2524where
2525    S: BosStr + jacquard_common::IntoStatic,
2526    S::Output: BosStr,
2527{
2528    type Output = Theme<S::Output>;
2529    fn into_static(self) -> Self::Output {
2530        match self {
2531            Theme::_4x => Theme::_4x,
2532            Theme::Action => Theme::Action,
2533            Theme::Business => Theme::Business,
2534            Theme::Comedy => Theme::Comedy,
2535            Theme::Drama => Theme::Drama,
2536            Theme::Educational => Theme::Educational,
2537            Theme::Erotic => Theme::Erotic,
2538            Theme::Fantasy => Theme::Fantasy,
2539            Theme::Historical => Theme::Historical,
2540            Theme::Horror => Theme::Horror,
2541            Theme::Kids => Theme::Kids,
2542            Theme::Mystery => Theme::Mystery,
2543            Theme::Nonfiction => Theme::Nonfiction,
2544            Theme::OpenWorld => Theme::OpenWorld,
2545            Theme::Party => Theme::Party,
2546            Theme::Romance => Theme::Romance,
2547            Theme::Sandbox => Theme::Sandbox,
2548            Theme::Scifi => Theme::Scifi,
2549            Theme::Stealth => Theme::Stealth,
2550            Theme::Survival => Theme::Survival,
2551            Theme::Thriller => Theme::Thriller,
2552            Theme::Warfare => Theme::Warfare,
2553            Theme::Other(v) => Theme::Other(v.into_static()),
2554        }
2555    }
2556}
2557
2558#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic, Default)]
2559#[serde(
2560    rename_all = "camelCase",
2561    bound(deserialize = "S: Deserialize<'de> + BosStr")
2562)]
2563pub struct TimeToBeat<S: BosStr = DefaultStr> {
2564    #[serde(skip_serializing_if = "Option::is_none")]
2565    pub completely: Option<i64>,
2566    #[serde(skip_serializing_if = "Option::is_none")]
2567    pub hastily: Option<i64>,
2568    #[serde(skip_serializing_if = "Option::is_none")]
2569    pub normally: Option<i64>,
2570    #[serde(flatten, default, skip_serializing_if = "Option::is_none")]
2571    pub extra_data: Option<BTreeMap<SmolStr, Data<S>>>,
2572}
2573
2574#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic, Default)]
2575#[serde(
2576    rename_all = "camelCase",
2577    bound(deserialize = "S: Deserialize<'de> + BosStr")
2578)]
2579pub struct ViewerState<S: BosStr = DefaultStr> {
2580    #[serde(skip_serializing_if = "Option::is_none")]
2581    pub like: Option<AtUri<S>>,
2582    #[serde(flatten, default, skip_serializing_if = "Option::is_none")]
2583    pub extra_data: Option<BTreeMap<SmolStr, Data<S>>>,
2584}
2585
2586#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic)]
2587#[serde(
2588    rename_all = "camelCase",
2589    bound(deserialize = "S: Deserialize<'de> + BosStr")
2590)]
2591pub struct Website<S: BosStr = DefaultStr> {
2592    #[serde(skip_serializing_if = "Option::is_none")]
2593    pub r#type: Option<WebsiteType<S>>,
2594    pub url: UriValue<S>,
2595    #[serde(flatten, default, skip_serializing_if = "Option::is_none")]
2596    pub extra_data: Option<BTreeMap<SmolStr, Data<S>>>,
2597}
2598
2599#[derive(Debug, Clone, PartialEq, Eq, Hash)]
2600pub enum WebsiteType<S: BosStr = DefaultStr> {
2601    Official,
2602    Wiki,
2603    Steam,
2604    Gog,
2605    EpicGames,
2606    ItchIo,
2607    Twitter,
2608    Instagram,
2609    Youtube,
2610    Twitch,
2611    Discord,
2612    Reddit,
2613    Facebook,
2614    Wikipedia,
2615    Bluesky,
2616    Xbox,
2617    Playstation,
2618    Nintendo,
2619    Meta,
2620    Other,
2621    UnknownValue(S),
2622}
2623
2624impl<S: BosStr> WebsiteType<S> {
2625    pub fn as_str(&self) -> &str {
2626        match self {
2627            Self::Official => "official",
2628            Self::Wiki => "wiki",
2629            Self::Steam => "steam",
2630            Self::Gog => "gog",
2631            Self::EpicGames => "epicGames",
2632            Self::ItchIo => "itchIo",
2633            Self::Twitter => "twitter",
2634            Self::Instagram => "instagram",
2635            Self::Youtube => "youtube",
2636            Self::Twitch => "twitch",
2637            Self::Discord => "discord",
2638            Self::Reddit => "reddit",
2639            Self::Facebook => "facebook",
2640            Self::Wikipedia => "wikipedia",
2641            Self::Bluesky => "bluesky",
2642            Self::Xbox => "xbox",
2643            Self::Playstation => "playstation",
2644            Self::Nintendo => "nintendo",
2645            Self::Meta => "meta",
2646            Self::Other => "other",
2647            Self::UnknownValue(s) => s.as_ref(),
2648        }
2649    }
2650    /// Construct from a string-like value, matching known values.
2651    pub fn from_value(s: S) -> Self {
2652        match s.as_ref() {
2653            "official" => Self::Official,
2654            "wiki" => Self::Wiki,
2655            "steam" => Self::Steam,
2656            "gog" => Self::Gog,
2657            "epicGames" => Self::EpicGames,
2658            "itchIo" => Self::ItchIo,
2659            "twitter" => Self::Twitter,
2660            "instagram" => Self::Instagram,
2661            "youtube" => Self::Youtube,
2662            "twitch" => Self::Twitch,
2663            "discord" => Self::Discord,
2664            "reddit" => Self::Reddit,
2665            "facebook" => Self::Facebook,
2666            "wikipedia" => Self::Wikipedia,
2667            "bluesky" => Self::Bluesky,
2668            "xbox" => Self::Xbox,
2669            "playstation" => Self::Playstation,
2670            "nintendo" => Self::Nintendo,
2671            "meta" => Self::Meta,
2672            "other" => Self::Other,
2673            _ => Self::UnknownValue(s),
2674        }
2675    }
2676}
2677
2678impl<S: BosStr> core::fmt::Display for WebsiteType<S> {
2679    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
2680        write!(f, "{}", self.as_str())
2681    }
2682}
2683
2684impl<S: BosStr> AsRef<str> for WebsiteType<S> {
2685    fn as_ref(&self) -> &str {
2686        self.as_str()
2687    }
2688}
2689
2690impl<S: BosStr> Serialize for WebsiteType<S> {
2691    fn serialize<Ser>(&self, serializer: Ser) -> Result<Ser::Ok, Ser::Error>
2692    where
2693        Ser: serde::Serializer,
2694    {
2695        serializer.serialize_str(self.as_str())
2696    }
2697}
2698
2699impl<'de, S: Deserialize<'de> + BosStr> Deserialize<'de> for WebsiteType<S> {
2700    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
2701    where
2702        D: serde::Deserializer<'de>,
2703    {
2704        let s = S::deserialize(deserializer)?;
2705        Ok(Self::from_value(s))
2706    }
2707}
2708
2709impl<S: BosStr + Default> Default for WebsiteType<S> {
2710    fn default() -> Self {
2711        Self::UnknownValue(Default::default())
2712    }
2713}
2714
2715impl<S: BosStr> jacquard_common::IntoStatic for WebsiteType<S>
2716where
2717    S: BosStr + jacquard_common::IntoStatic,
2718    S::Output: BosStr,
2719{
2720    type Output = WebsiteType<S::Output>;
2721    fn into_static(self) -> Self::Output {
2722        match self {
2723            WebsiteType::Official => WebsiteType::Official,
2724            WebsiteType::Wiki => WebsiteType::Wiki,
2725            WebsiteType::Steam => WebsiteType::Steam,
2726            WebsiteType::Gog => WebsiteType::Gog,
2727            WebsiteType::EpicGames => WebsiteType::EpicGames,
2728            WebsiteType::ItchIo => WebsiteType::ItchIo,
2729            WebsiteType::Twitter => WebsiteType::Twitter,
2730            WebsiteType::Instagram => WebsiteType::Instagram,
2731            WebsiteType::Youtube => WebsiteType::Youtube,
2732            WebsiteType::Twitch => WebsiteType::Twitch,
2733            WebsiteType::Discord => WebsiteType::Discord,
2734            WebsiteType::Reddit => WebsiteType::Reddit,
2735            WebsiteType::Facebook => WebsiteType::Facebook,
2736            WebsiteType::Wikipedia => WebsiteType::Wikipedia,
2737            WebsiteType::Bluesky => WebsiteType::Bluesky,
2738            WebsiteType::Xbox => WebsiteType::Xbox,
2739            WebsiteType::Playstation => WebsiteType::Playstation,
2740            WebsiteType::Nintendo => WebsiteType::Nintendo,
2741            WebsiteType::Meta => WebsiteType::Meta,
2742            WebsiteType::Other => WebsiteType::Other,
2743            WebsiteType::UnknownValue(v) => WebsiteType::UnknownValue(v.into_static()),
2744        }
2745    }
2746}
2747
2748impl<S: BosStr> LexiconSchema for ActivityFeedItem<S> {
2749    fn nsid() -> &'static str {
2750        "games.gamesgamesgamesgames.defs"
2751    }
2752    fn def_name() -> &'static str {
2753        "activityFeedItem"
2754    }
2755    fn lexicon_doc() -> LexiconDoc<'static> {
2756        lexicon_doc_games_gamesgamesgamesgames_defs()
2757    }
2758    fn validate(&self) -> Result<(), ConstraintError> {
2759        Ok(())
2760    }
2761}
2762
2763impl<S: BosStr> LexiconSchema for ActivityListView<S> {
2764    fn nsid() -> &'static str {
2765        "games.gamesgamesgamesgames.defs"
2766    }
2767    fn def_name() -> &'static str {
2768        "activityListView"
2769    }
2770    fn lexicon_doc() -> LexiconDoc<'static> {
2771        lexicon_doc_games_gamesgamesgamesgames_defs()
2772    }
2773    fn validate(&self) -> Result<(), ConstraintError> {
2774        Ok(())
2775    }
2776}
2777
2778impl<S: BosStr> LexiconSchema for ActivityReviewView<S> {
2779    fn nsid() -> &'static str {
2780        "games.gamesgamesgamesgames.defs"
2781    }
2782    fn def_name() -> &'static str {
2783        "activityReviewView"
2784    }
2785    fn lexicon_doc() -> LexiconDoc<'static> {
2786        lexicon_doc_games_gamesgamesgamesgames_defs()
2787    }
2788    fn validate(&self) -> Result<(), ConstraintError> {
2789        {
2790            let value = &self.rating;
2791            if *value > 10i64 {
2792                return Err(ConstraintError::Maximum {
2793                    path: ValidationPath::from_field("rating"),
2794                    max: 10i64,
2795                    actual: *value,
2796                });
2797            }
2798        }
2799        {
2800            let value = &self.rating;
2801            if *value < 0i64 {
2802                return Err(ConstraintError::Minimum {
2803                    path: ValidationPath::from_field("rating"),
2804                    min: 0i64,
2805                    actual: *value,
2806                });
2807            }
2808        }
2809        Ok(())
2810    }
2811}
2812
2813impl<S: BosStr> LexiconSchema for ActorCreditView<S> {
2814    fn nsid() -> &'static str {
2815        "games.gamesgamesgamesgames.defs"
2816    }
2817    fn def_name() -> &'static str {
2818        "actorCreditView"
2819    }
2820    fn lexicon_doc() -> LexiconDoc<'static> {
2821        lexicon_doc_games_gamesgamesgamesgames_defs()
2822    }
2823    fn validate(&self) -> Result<(), ConstraintError> {
2824        if let Some(ref value) = self.display_name {
2825            #[allow(unused_comparisons)]
2826            if <str>::len(value.as_ref()) > 640usize {
2827                return Err(ConstraintError::MaxLength {
2828                    path: ValidationPath::from_field("display_name"),
2829                    max: 640usize,
2830                    actual: <str>::len(value.as_ref()),
2831                });
2832            }
2833        }
2834        Ok(())
2835    }
2836}
2837
2838impl<S: BosStr> LexiconSchema for ActorProfileDetailView<S> {
2839    fn nsid() -> &'static str {
2840        "games.gamesgamesgamesgames.defs"
2841    }
2842    fn def_name() -> &'static str {
2843        "actorProfileDetailView"
2844    }
2845    fn lexicon_doc() -> LexiconDoc<'static> {
2846        lexicon_doc_games_gamesgamesgamesgames_defs()
2847    }
2848    fn validate(&self) -> Result<(), ConstraintError> {
2849        if let Some(ref value) = self.avatar {
2850            {
2851                let size = value.blob().size;
2852                if size > 10000000usize {
2853                    return Err(ConstraintError::BlobTooLarge {
2854                        path: ValidationPath::from_field("avatar"),
2855                        max: 10000000usize,
2856                        actual: size,
2857                    });
2858                }
2859            }
2860        }
2861        if let Some(ref value) = self.avatar {
2862            {
2863                let mime = value.blob().mime_type.as_str();
2864                let accepted: &[&str] = &["image/png", "image/jpeg"];
2865                let matched = accepted.iter().any(|pattern| {
2866                    if *pattern == "*/*" {
2867                        true
2868                    } else if pattern.ends_with("/*") {
2869                        let prefix = &pattern[..pattern.len() - 2];
2870                        mime.starts_with(prefix) && mime.as_bytes().get(prefix.len()) == Some(&b'/')
2871                    } else {
2872                        mime == *pattern
2873                    }
2874                });
2875                if !matched {
2876                    return Err(ConstraintError::BlobMimeTypeNotAccepted {
2877                        path: ValidationPath::from_field("avatar"),
2878                        accepted: vec!["image/png".to_string(), "image/jpeg".to_string()],
2879                        actual: mime.to_string(),
2880                    });
2881                }
2882            }
2883        }
2884        if let Some(ref value) = self.description {
2885            #[allow(unused_comparisons)]
2886            if <str>::len(value.as_ref()) > 3000usize {
2887                return Err(ConstraintError::MaxLength {
2888                    path: ValidationPath::from_field("description"),
2889                    max: 3000usize,
2890                    actual: <str>::len(value.as_ref()),
2891                });
2892            }
2893        }
2894        if let Some(ref value) = self.display_name {
2895            #[allow(unused_comparisons)]
2896            if <str>::len(value.as_ref()) > 640usize {
2897                return Err(ConstraintError::MaxLength {
2898                    path: ValidationPath::from_field("display_name"),
2899                    max: 640usize,
2900                    actual: <str>::len(value.as_ref()),
2901                });
2902            }
2903        }
2904        if let Some(ref value) = self.pronouns {
2905            #[allow(unused_comparisons)]
2906            if <str>::len(value.as_ref()) > 200usize {
2907                return Err(ConstraintError::MaxLength {
2908                    path: ValidationPath::from_field("pronouns"),
2909                    max: 200usize,
2910                    actual: <str>::len(value.as_ref()),
2911                });
2912            }
2913        }
2914        Ok(())
2915    }
2916}
2917
2918impl<S: BosStr> LexiconSchema for ActorProfileSummaryView<S> {
2919    fn nsid() -> &'static str {
2920        "games.gamesgamesgamesgames.defs"
2921    }
2922    fn def_name() -> &'static str {
2923        "actorProfileSummaryView"
2924    }
2925    fn lexicon_doc() -> LexiconDoc<'static> {
2926        lexicon_doc_games_gamesgamesgamesgames_defs()
2927    }
2928    fn validate(&self) -> Result<(), ConstraintError> {
2929        if let Some(ref value) = self.avatar {
2930            {
2931                let size = value.blob().size;
2932                if size > 10000000usize {
2933                    return Err(ConstraintError::BlobTooLarge {
2934                        path: ValidationPath::from_field("avatar"),
2935                        max: 10000000usize,
2936                        actual: size,
2937                    });
2938                }
2939            }
2940        }
2941        if let Some(ref value) = self.avatar {
2942            {
2943                let mime = value.blob().mime_type.as_str();
2944                let accepted: &[&str] = &["image/png", "image/jpeg"];
2945                let matched = accepted.iter().any(|pattern| {
2946                    if *pattern == "*/*" {
2947                        true
2948                    } else if pattern.ends_with("/*") {
2949                        let prefix = &pattern[..pattern.len() - 2];
2950                        mime.starts_with(prefix) && mime.as_bytes().get(prefix.len()) == Some(&b'/')
2951                    } else {
2952                        mime == *pattern
2953                    }
2954                });
2955                if !matched {
2956                    return Err(ConstraintError::BlobMimeTypeNotAccepted {
2957                        path: ValidationPath::from_field("avatar"),
2958                        accepted: vec!["image/png".to_string(), "image/jpeg".to_string()],
2959                        actual: mime.to_string(),
2960                    });
2961                }
2962            }
2963        }
2964        if let Some(ref value) = self.display_name {
2965            #[allow(unused_comparisons)]
2966            if <str>::len(value.as_ref()) > 640usize {
2967                return Err(ConstraintError::MaxLength {
2968                    path: ValidationPath::from_field("display_name"),
2969                    max: 640usize,
2970                    actual: <str>::len(value.as_ref()),
2971                });
2972            }
2973        }
2974        Ok(())
2975    }
2976}
2977
2978impl<S: BosStr> LexiconSchema for AgeRating<S> {
2979    fn nsid() -> &'static str {
2980        "games.gamesgamesgamesgames.defs"
2981    }
2982    fn def_name() -> &'static str {
2983        "ageRating"
2984    }
2985    fn lexicon_doc() -> LexiconDoc<'static> {
2986        lexicon_doc_games_gamesgamesgamesgames_defs()
2987    }
2988    fn validate(&self) -> Result<(), ConstraintError> {
2989        Ok(())
2990    }
2991}
2992
2993impl<S: BosStr> LexiconSchema for AlternativeName<S> {
2994    fn nsid() -> &'static str {
2995        "games.gamesgamesgamesgames.defs"
2996    }
2997    fn def_name() -> &'static str {
2998        "alternativeName"
2999    }
3000    fn lexicon_doc() -> LexiconDoc<'static> {
3001        lexicon_doc_games_gamesgamesgamesgames_defs()
3002    }
3003    fn validate(&self) -> Result<(), ConstraintError> {
3004        Ok(())
3005    }
3006}
3007
3008impl<S: BosStr> LexiconSchema for CollectionSummaryView<S> {
3009    fn nsid() -> &'static str {
3010        "games.gamesgamesgamesgames.defs"
3011    }
3012    fn def_name() -> &'static str {
3013        "collectionSummaryView"
3014    }
3015    fn lexicon_doc() -> LexiconDoc<'static> {
3016        lexicon_doc_games_gamesgamesgamesgames_defs()
3017    }
3018    fn validate(&self) -> Result<(), ConstraintError> {
3019        Ok(())
3020    }
3021}
3022
3023impl<S: BosStr> LexiconSchema for CommunityFeedActorView<S> {
3024    fn nsid() -> &'static str {
3025        "games.gamesgamesgamesgames.defs"
3026    }
3027    fn def_name() -> &'static str {
3028        "communityFeedActorView"
3029    }
3030    fn lexicon_doc() -> LexiconDoc<'static> {
3031        lexicon_doc_games_gamesgamesgamesgames_defs()
3032    }
3033    fn validate(&self) -> Result<(), ConstraintError> {
3034        if let Some(ref value) = self.display_name {
3035            #[allow(unused_comparisons)]
3036            if <str>::len(value.as_ref()) > 640usize {
3037                return Err(ConstraintError::MaxLength {
3038                    path: ValidationPath::from_field("display_name"),
3039                    max: 640usize,
3040                    actual: <str>::len(value.as_ref()),
3041                });
3042            }
3043        }
3044        Ok(())
3045    }
3046}
3047
3048impl<S: BosStr> LexiconSchema for CommunityFeedItem<S> {
3049    fn nsid() -> &'static str {
3050        "games.gamesgamesgamesgames.defs"
3051    }
3052    fn def_name() -> &'static str {
3053        "communityFeedItem"
3054    }
3055    fn lexicon_doc() -> LexiconDoc<'static> {
3056        lexicon_doc_games_gamesgamesgamesgames_defs()
3057    }
3058    fn validate(&self) -> Result<(), ConstraintError> {
3059        Ok(())
3060    }
3061}
3062
3063impl<S: BosStr> LexiconSchema for CreditEntry<S> {
3064    fn nsid() -> &'static str {
3065        "games.gamesgamesgamesgames.defs"
3066    }
3067    fn def_name() -> &'static str {
3068        "creditEntry"
3069    }
3070    fn lexicon_doc() -> LexiconDoc<'static> {
3071        lexicon_doc_games_gamesgamesgamesgames_defs()
3072    }
3073    fn validate(&self) -> Result<(), ConstraintError> {
3074        if let Some(ref value) = self.department {
3075            #[allow(unused_comparisons)]
3076            if <str>::len(value.as_ref()) > 640usize {
3077                return Err(ConstraintError::MaxLength {
3078                    path: ValidationPath::from_field("department"),
3079                    max: 640usize,
3080                    actual: <str>::len(value.as_ref()),
3081                });
3082            }
3083        }
3084        Ok(())
3085    }
3086}
3087
3088impl<S: BosStr> LexiconSchema for EngineSummaryView<S> {
3089    fn nsid() -> &'static str {
3090        "games.gamesgamesgamesgames.defs"
3091    }
3092    fn def_name() -> &'static str {
3093        "engineSummaryView"
3094    }
3095    fn lexicon_doc() -> LexiconDoc<'static> {
3096        lexicon_doc_games_gamesgamesgamesgames_defs()
3097    }
3098    fn validate(&self) -> Result<(), ConstraintError> {
3099        Ok(())
3100    }
3101}
3102
3103impl<S: BosStr> LexiconSchema for ExternalIds<S> {
3104    fn nsid() -> &'static str {
3105        "games.gamesgamesgamesgames.defs"
3106    }
3107    fn def_name() -> &'static str {
3108        "externalIds"
3109    }
3110    fn lexicon_doc() -> LexiconDoc<'static> {
3111        lexicon_doc_games_gamesgamesgamesgames_defs()
3112    }
3113    fn validate(&self) -> Result<(), ConstraintError> {
3114        Ok(())
3115    }
3116}
3117
3118impl<S: BosStr> LexiconSchema for ExternalVideo<S> {
3119    fn nsid() -> &'static str {
3120        "games.gamesgamesgamesgames.defs"
3121    }
3122    fn def_name() -> &'static str {
3123        "externalVideo"
3124    }
3125    fn lexicon_doc() -> LexiconDoc<'static> {
3126        lexicon_doc_games_gamesgamesgamesgames_defs()
3127    }
3128    fn validate(&self) -> Result<(), ConstraintError> {
3129        Ok(())
3130    }
3131}
3132
3133impl<S: BosStr> LexiconSchema for GameDetailView<S> {
3134    fn nsid() -> &'static str {
3135        "games.gamesgamesgamesgames.defs"
3136    }
3137    fn def_name() -> &'static str {
3138        "gameDetailView"
3139    }
3140    fn lexicon_doc() -> LexiconDoc<'static> {
3141        lexicon_doc_games_gamesgamesgamesgames_defs()
3142    }
3143    fn validate(&self) -> Result<(), ConstraintError> {
3144        Ok(())
3145    }
3146}
3147
3148impl<S: BosStr> LexiconSchema for GameFeedViewItem<S> {
3149    fn nsid() -> &'static str {
3150        "games.gamesgamesgamesgames.defs"
3151    }
3152    fn def_name() -> &'static str {
3153        "gameFeedViewItem"
3154    }
3155    fn lexicon_doc() -> LexiconDoc<'static> {
3156        lexicon_doc_games_gamesgamesgamesgames_defs()
3157    }
3158    fn validate(&self) -> Result<(), ConstraintError> {
3159        if let Some(ref value) = self.feed_context {
3160            #[allow(unused_comparisons)]
3161            if <str>::len(value.as_ref()) > 2000usize {
3162                return Err(ConstraintError::MaxLength {
3163                    path: ValidationPath::from_field("feed_context"),
3164                    max: 2000usize,
3165                    actual: <str>::len(value.as_ref()),
3166                });
3167            }
3168        }
3169        Ok(())
3170    }
3171}
3172
3173impl<S: BosStr> LexiconSchema for GameSummaryView<S> {
3174    fn nsid() -> &'static str {
3175        "games.gamesgamesgamesgames.defs"
3176    }
3177    fn def_name() -> &'static str {
3178        "gameSummaryView"
3179    }
3180    fn lexicon_doc() -> LexiconDoc<'static> {
3181        lexicon_doc_games_gamesgamesgamesgames_defs()
3182    }
3183    fn validate(&self) -> Result<(), ConstraintError> {
3184        Ok(())
3185    }
3186}
3187
3188impl<S: BosStr> LexiconSchema for GameView<S> {
3189    fn nsid() -> &'static str {
3190        "games.gamesgamesgamesgames.defs"
3191    }
3192    fn def_name() -> &'static str {
3193        "gameView"
3194    }
3195    fn lexicon_doc() -> LexiconDoc<'static> {
3196        lexicon_doc_games_gamesgamesgamesgames_defs()
3197    }
3198    fn validate(&self) -> Result<(), ConstraintError> {
3199        if let Some(ref value) = self.like_count {
3200            if *value < 0i64 {
3201                return Err(ConstraintError::Minimum {
3202                    path: ValidationPath::from_field("like_count"),
3203                    min: 0i64,
3204                    actual: *value,
3205                });
3206            }
3207        }
3208        Ok(())
3209    }
3210}
3211
3212impl<S: BosStr> LexiconSchema for ItchIoId<S> {
3213    fn nsid() -> &'static str {
3214        "games.gamesgamesgamesgames.defs"
3215    }
3216    fn def_name() -> &'static str {
3217        "itchIoId"
3218    }
3219    fn lexicon_doc() -> LexiconDoc<'static> {
3220        lexicon_doc_games_gamesgamesgamesgames_defs()
3221    }
3222    fn validate(&self) -> Result<(), ConstraintError> {
3223        Ok(())
3224    }
3225}
3226
3227impl<S: BosStr> LexiconSchema for LanguageSupport<S> {
3228    fn nsid() -> &'static str {
3229        "games.gamesgamesgamesgames.defs"
3230    }
3231    fn def_name() -> &'static str {
3232        "languageSupport"
3233    }
3234    fn lexicon_doc() -> LexiconDoc<'static> {
3235        lexicon_doc_games_gamesgamesgamesgames_defs()
3236    }
3237    fn validate(&self) -> Result<(), ConstraintError> {
3238        Ok(())
3239    }
3240}
3241
3242impl<S: BosStr> LexiconSchema for MediaItem<S> {
3243    fn nsid() -> &'static str {
3244        "games.gamesgamesgamesgames.defs"
3245    }
3246    fn def_name() -> &'static str {
3247        "mediaItem"
3248    }
3249    fn lexicon_doc() -> LexiconDoc<'static> {
3250        lexicon_doc_games_gamesgamesgamesgames_defs()
3251    }
3252    fn validate(&self) -> Result<(), ConstraintError> {
3253        if let Some(ref value) = self.blob {
3254            {
3255                let size = value.blob().size;
3256                if size > 200000000usize {
3257                    return Err(ConstraintError::BlobTooLarge {
3258                        path: ValidationPath::from_field("blob"),
3259                        max: 200000000usize,
3260                        actual: size,
3261                    });
3262                }
3263            }
3264        }
3265        if let Some(ref value) = self.blob {
3266            {
3267                let mime = value.blob().mime_type.as_str();
3268                let accepted: &[&str] = &["image/*", "video/*"];
3269                let matched = accepted.iter().any(|pattern| {
3270                    if *pattern == "*/*" {
3271                        true
3272                    } else if pattern.ends_with("/*") {
3273                        let prefix = &pattern[..pattern.len() - 2];
3274                        mime.starts_with(prefix) && mime.as_bytes().get(prefix.len()) == Some(&b'/')
3275                    } else {
3276                        mime == *pattern
3277                    }
3278                });
3279                if !matched {
3280                    return Err(ConstraintError::BlobMimeTypeNotAccepted {
3281                        path: ValidationPath::from_field("blob"),
3282                        accepted: vec!["image/*".to_string(), "video/*".to_string()],
3283                        actual: mime.to_string(),
3284                    });
3285                }
3286            }
3287        }
3288        Ok(())
3289    }
3290}
3291
3292impl<S: BosStr> LexiconSchema for MultiplayerMode<S> {
3293    fn nsid() -> &'static str {
3294        "games.gamesgamesgamesgames.defs"
3295    }
3296    fn def_name() -> &'static str {
3297        "multiplayerMode"
3298    }
3299    fn lexicon_doc() -> LexiconDoc<'static> {
3300        lexicon_doc_games_gamesgamesgamesgames_defs()
3301    }
3302    fn validate(&self) -> Result<(), ConstraintError> {
3303        Ok(())
3304    }
3305}
3306
3307impl<S: BosStr> LexiconSchema for OrgCreditView<S> {
3308    fn nsid() -> &'static str {
3309        "games.gamesgamesgamesgames.defs"
3310    }
3311    fn def_name() -> &'static str {
3312        "orgCreditView"
3313    }
3314    fn lexicon_doc() -> LexiconDoc<'static> {
3315        lexicon_doc_games_gamesgamesgamesgames_defs()
3316    }
3317    fn validate(&self) -> Result<(), ConstraintError> {
3318        if let Some(ref value) = self.display_name {
3319            #[allow(unused_comparisons)]
3320            if <str>::len(value.as_ref()) > 640usize {
3321                return Err(ConstraintError::MaxLength {
3322                    path: ValidationPath::from_field("display_name"),
3323                    max: 640usize,
3324                    actual: <str>::len(value.as_ref()),
3325                });
3326            }
3327        }
3328        Ok(())
3329    }
3330}
3331
3332impl<S: BosStr> LexiconSchema for OrgProfileDetailView<S> {
3333    fn nsid() -> &'static str {
3334        "games.gamesgamesgamesgames.defs"
3335    }
3336    fn def_name() -> &'static str {
3337        "orgProfileDetailView"
3338    }
3339    fn lexicon_doc() -> LexiconDoc<'static> {
3340        lexicon_doc_games_gamesgamesgamesgames_defs()
3341    }
3342    fn validate(&self) -> Result<(), ConstraintError> {
3343        if let Some(ref value) = self.avatar {
3344            {
3345                let size = value.blob().size;
3346                if size > 10000000usize {
3347                    return Err(ConstraintError::BlobTooLarge {
3348                        path: ValidationPath::from_field("avatar"),
3349                        max: 10000000usize,
3350                        actual: size,
3351                    });
3352                }
3353            }
3354        }
3355        if let Some(ref value) = self.avatar {
3356            {
3357                let mime = value.blob().mime_type.as_str();
3358                let accepted: &[&str] = &["image/png", "image/jpeg"];
3359                let matched = accepted.iter().any(|pattern| {
3360                    if *pattern == "*/*" {
3361                        true
3362                    } else if pattern.ends_with("/*") {
3363                        let prefix = &pattern[..pattern.len() - 2];
3364                        mime.starts_with(prefix) && mime.as_bytes().get(prefix.len()) == Some(&b'/')
3365                    } else {
3366                        mime == *pattern
3367                    }
3368                });
3369                if !matched {
3370                    return Err(ConstraintError::BlobMimeTypeNotAccepted {
3371                        path: ValidationPath::from_field("avatar"),
3372                        accepted: vec!["image/png".to_string(), "image/jpeg".to_string()],
3373                        actual: mime.to_string(),
3374                    });
3375                }
3376            }
3377        }
3378        if let Some(ref value) = self.description {
3379            #[allow(unused_comparisons)]
3380            if <str>::len(value.as_ref()) > 3000usize {
3381                return Err(ConstraintError::MaxLength {
3382                    path: ValidationPath::from_field("description"),
3383                    max: 3000usize,
3384                    actual: <str>::len(value.as_ref()),
3385                });
3386            }
3387        }
3388        if let Some(ref value) = self.display_name {
3389            #[allow(unused_comparisons)]
3390            if <str>::len(value.as_ref()) > 640usize {
3391                return Err(ConstraintError::MaxLength {
3392                    path: ValidationPath::from_field("display_name"),
3393                    max: 640usize,
3394                    actual: <str>::len(value.as_ref()),
3395                });
3396            }
3397        }
3398        Ok(())
3399    }
3400}
3401
3402impl<S: BosStr> LexiconSchema for OrgProfileSummaryView<S> {
3403    fn nsid() -> &'static str {
3404        "games.gamesgamesgamesgames.defs"
3405    }
3406    fn def_name() -> &'static str {
3407        "orgProfileSummaryView"
3408    }
3409    fn lexicon_doc() -> LexiconDoc<'static> {
3410        lexicon_doc_games_gamesgamesgamesgames_defs()
3411    }
3412    fn validate(&self) -> Result<(), ConstraintError> {
3413        if let Some(ref value) = self.avatar {
3414            {
3415                let size = value.blob().size;
3416                if size > 10000000usize {
3417                    return Err(ConstraintError::BlobTooLarge {
3418                        path: ValidationPath::from_field("avatar"),
3419                        max: 10000000usize,
3420                        actual: size,
3421                    });
3422                }
3423            }
3424        }
3425        if let Some(ref value) = self.avatar {
3426            {
3427                let mime = value.blob().mime_type.as_str();
3428                let accepted: &[&str] = &["image/png", "image/jpeg"];
3429                let matched = accepted.iter().any(|pattern| {
3430                    if *pattern == "*/*" {
3431                        true
3432                    } else if pattern.ends_with("/*") {
3433                        let prefix = &pattern[..pattern.len() - 2];
3434                        mime.starts_with(prefix) && mime.as_bytes().get(prefix.len()) == Some(&b'/')
3435                    } else {
3436                        mime == *pattern
3437                    }
3438                });
3439                if !matched {
3440                    return Err(ConstraintError::BlobMimeTypeNotAccepted {
3441                        path: ValidationPath::from_field("avatar"),
3442                        accepted: vec!["image/png".to_string(), "image/jpeg".to_string()],
3443                        actual: mime.to_string(),
3444                    });
3445                }
3446            }
3447        }
3448        if let Some(ref value) = self.display_name {
3449            #[allow(unused_comparisons)]
3450            if <str>::len(value.as_ref()) > 640usize {
3451                return Err(ConstraintError::MaxLength {
3452                    path: ValidationPath::from_field("display_name"),
3453                    max: 640usize,
3454                    actual: <str>::len(value.as_ref()),
3455                });
3456            }
3457        }
3458        Ok(())
3459    }
3460}
3461
3462impl<S: BosStr> LexiconSchema for PlatformFeatures<S> {
3463    fn nsid() -> &'static str {
3464        "games.gamesgamesgamesgames.defs"
3465    }
3466    fn def_name() -> &'static str {
3467        "platformFeatures"
3468    }
3469    fn lexicon_doc() -> LexiconDoc<'static> {
3470        lexicon_doc_games_gamesgamesgamesgames_defs()
3471    }
3472    fn validate(&self) -> Result<(), ConstraintError> {
3473        Ok(())
3474    }
3475}
3476
3477impl<S: BosStr> LexiconSchema for PlatformSummaryView<S> {
3478    fn nsid() -> &'static str {
3479        "games.gamesgamesgamesgames.defs"
3480    }
3481    fn def_name() -> &'static str {
3482        "platformSummaryView"
3483    }
3484    fn lexicon_doc() -> LexiconDoc<'static> {
3485        lexicon_doc_games_gamesgamesgamesgames_defs()
3486    }
3487    fn validate(&self) -> Result<(), ConstraintError> {
3488        Ok(())
3489    }
3490}
3491
3492impl<S: BosStr> LexiconSchema for PlatformVersion<S> {
3493    fn nsid() -> &'static str {
3494        "games.gamesgamesgamesgames.defs"
3495    }
3496    fn def_name() -> &'static str {
3497        "platformVersion"
3498    }
3499    fn lexicon_doc() -> LexiconDoc<'static> {
3500        lexicon_doc_games_gamesgamesgamesgames_defs()
3501    }
3502    fn validate(&self) -> Result<(), ConstraintError> {
3503        Ok(())
3504    }
3505}
3506
3507impl<S: BosStr> LexiconSchema for ProfileSummaryView<S> {
3508    fn nsid() -> &'static str {
3509        "games.gamesgamesgamesgames.defs"
3510    }
3511    fn def_name() -> &'static str {
3512        "profileSummaryView"
3513    }
3514    fn lexicon_doc() -> LexiconDoc<'static> {
3515        lexicon_doc_games_gamesgamesgamesgames_defs()
3516    }
3517    fn validate(&self) -> Result<(), ConstraintError> {
3518        if let Some(ref value) = self.avatar {
3519            {
3520                let size = value.blob().size;
3521                if size > 10000000usize {
3522                    return Err(ConstraintError::BlobTooLarge {
3523                        path: ValidationPath::from_field("avatar"),
3524                        max: 10000000usize,
3525                        actual: size,
3526                    });
3527                }
3528            }
3529        }
3530        if let Some(ref value) = self.avatar {
3531            {
3532                let mime = value.blob().mime_type.as_str();
3533                let accepted: &[&str] = &["image/png", "image/jpeg"];
3534                let matched = accepted.iter().any(|pattern| {
3535                    if *pattern == "*/*" {
3536                        true
3537                    } else if pattern.ends_with("/*") {
3538                        let prefix = &pattern[..pattern.len() - 2];
3539                        mime.starts_with(prefix) && mime.as_bytes().get(prefix.len()) == Some(&b'/')
3540                    } else {
3541                        mime == *pattern
3542                    }
3543                });
3544                if !matched {
3545                    return Err(ConstraintError::BlobMimeTypeNotAccepted {
3546                        path: ValidationPath::from_field("avatar"),
3547                        accepted: vec!["image/png".to_string(), "image/jpeg".to_string()],
3548                        actual: mime.to_string(),
3549                    });
3550                }
3551            }
3552        }
3553        if let Some(ref value) = self.display_name {
3554            #[allow(unused_comparisons)]
3555            if <str>::len(value.as_ref()) > 640usize {
3556                return Err(ConstraintError::MaxLength {
3557                    path: ValidationPath::from_field("display_name"),
3558                    max: 640usize,
3559                    actual: <str>::len(value.as_ref()),
3560                });
3561            }
3562        }
3563        Ok(())
3564    }
3565}
3566
3567impl<S: BosStr> LexiconSchema for Release<S> {
3568    fn nsid() -> &'static str {
3569        "games.gamesgamesgamesgames.defs"
3570    }
3571    fn def_name() -> &'static str {
3572        "release"
3573    }
3574    fn lexicon_doc() -> LexiconDoc<'static> {
3575        lexicon_doc_games_gamesgamesgamesgames_defs()
3576    }
3577    fn validate(&self) -> Result<(), ConstraintError> {
3578        Ok(())
3579    }
3580}
3581
3582impl<S: BosStr> LexiconSchema for ReleaseDate<S> {
3583    fn nsid() -> &'static str {
3584        "games.gamesgamesgamesgames.defs"
3585    }
3586    fn def_name() -> &'static str {
3587        "releaseDate"
3588    }
3589    fn lexicon_doc() -> LexiconDoc<'static> {
3590        lexicon_doc_games_gamesgamesgamesgames_defs()
3591    }
3592    fn validate(&self) -> Result<(), ConstraintError> {
3593        Ok(())
3594    }
3595}
3596
3597impl<S: BosStr> LexiconSchema for Signature<S> {
3598    fn nsid() -> &'static str {
3599        "games.gamesgamesgamesgames.defs"
3600    }
3601    fn def_name() -> &'static str {
3602        "signature"
3603    }
3604    fn lexicon_doc() -> LexiconDoc<'static> {
3605        lexicon_doc_games_gamesgamesgamesgames_defs()
3606    }
3607    fn validate(&self) -> Result<(), ConstraintError> {
3608        Ok(())
3609    }
3610}
3611
3612impl<S: BosStr> LexiconSchema for SkeletonGameFeedItem<S> {
3613    fn nsid() -> &'static str {
3614        "games.gamesgamesgamesgames.defs"
3615    }
3616    fn def_name() -> &'static str {
3617        "skeletonGameFeedItem"
3618    }
3619    fn lexicon_doc() -> LexiconDoc<'static> {
3620        lexicon_doc_games_gamesgamesgamesgames_defs()
3621    }
3622    fn validate(&self) -> Result<(), ConstraintError> {
3623        if let Some(ref value) = self.feed_context {
3624            #[allow(unused_comparisons)]
3625            if <str>::len(value.as_ref()) > 2000usize {
3626                return Err(ConstraintError::MaxLength {
3627                    path: ValidationPath::from_field("feed_context"),
3628                    max: 2000usize,
3629                    actual: <str>::len(value.as_ref()),
3630                });
3631            }
3632        }
3633        Ok(())
3634    }
3635}
3636
3637impl<S: BosStr> LexiconSchema for SystemRequirements<S> {
3638    fn nsid() -> &'static str {
3639        "games.gamesgamesgamesgames.defs"
3640    }
3641    fn def_name() -> &'static str {
3642        "systemRequirements"
3643    }
3644    fn lexicon_doc() -> LexiconDoc<'static> {
3645        lexicon_doc_games_gamesgamesgamesgames_defs()
3646    }
3647    fn validate(&self) -> Result<(), ConstraintError> {
3648        Ok(())
3649    }
3650}
3651
3652impl<S: BosStr> LexiconSchema for SystemSpec<S> {
3653    fn nsid() -> &'static str {
3654        "games.gamesgamesgamesgames.defs"
3655    }
3656    fn def_name() -> &'static str {
3657        "systemSpec"
3658    }
3659    fn lexicon_doc() -> LexiconDoc<'static> {
3660        lexicon_doc_games_gamesgamesgamesgames_defs()
3661    }
3662    fn validate(&self) -> Result<(), ConstraintError> {
3663        Ok(())
3664    }
3665}
3666
3667impl<S: BosStr> LexiconSchema for TimeToBeat<S> {
3668    fn nsid() -> &'static str {
3669        "games.gamesgamesgamesgames.defs"
3670    }
3671    fn def_name() -> &'static str {
3672        "timeToBeat"
3673    }
3674    fn lexicon_doc() -> LexiconDoc<'static> {
3675        lexicon_doc_games_gamesgamesgamesgames_defs()
3676    }
3677    fn validate(&self) -> Result<(), ConstraintError> {
3678        Ok(())
3679    }
3680}
3681
3682impl<S: BosStr> LexiconSchema for ViewerState<S> {
3683    fn nsid() -> &'static str {
3684        "games.gamesgamesgamesgames.defs"
3685    }
3686    fn def_name() -> &'static str {
3687        "viewerState"
3688    }
3689    fn lexicon_doc() -> LexiconDoc<'static> {
3690        lexicon_doc_games_gamesgamesgamesgames_defs()
3691    }
3692    fn validate(&self) -> Result<(), ConstraintError> {
3693        Ok(())
3694    }
3695}
3696
3697impl<S: BosStr> LexiconSchema for Website<S> {
3698    fn nsid() -> &'static str {
3699        "games.gamesgamesgamesgames.defs"
3700    }
3701    fn def_name() -> &'static str {
3702        "website"
3703    }
3704    fn lexicon_doc() -> LexiconDoc<'static> {
3705        lexicon_doc_games_gamesgamesgamesgames_defs()
3706    }
3707    fn validate(&self) -> Result<(), ConstraintError> {
3708        Ok(())
3709    }
3710}
3711
3712pub mod activity_feed_item_state {
3713
3714    pub use crate::builder_types::{IsSet, IsUnset, Set, Unset};
3715    #[allow(unused)]
3716    use ::core::marker::PhantomData;
3717    mod sealed {
3718        pub trait Sealed {}
3719    }
3720    /// State trait tracking which required fields have been set
3721    pub trait State: sealed::Sealed {
3722        type CreatedAt;
3723        type Type;
3724    }
3725    /// Empty state - all required fields are unset
3726    pub struct Empty(());
3727    impl sealed::Sealed for Empty {}
3728    impl State for Empty {
3729        type CreatedAt = Unset;
3730        type Type = Unset;
3731    }
3732    ///State transition - sets the `created_at` field to Set
3733    pub struct SetCreatedAt<St: State = Empty>(PhantomData<fn() -> St>);
3734    impl<St: State> sealed::Sealed for SetCreatedAt<St> {}
3735    impl<St: State> State for SetCreatedAt<St> {
3736        type CreatedAt = Set<members::created_at>;
3737        type Type = St::Type;
3738    }
3739    ///State transition - sets the `type` field to Set
3740    pub struct SetType<St: State = Empty>(PhantomData<fn() -> St>);
3741    impl<St: State> sealed::Sealed for SetType<St> {}
3742    impl<St: State> State for SetType<St> {
3743        type CreatedAt = St::CreatedAt;
3744        type Type = Set<members::r#type>;
3745    }
3746    /// Marker types for field names
3747    #[allow(non_camel_case_types)]
3748    pub mod members {
3749        ///Marker type for the `created_at` field
3750        pub struct created_at(());
3751        ///Marker type for the `type` field
3752        pub struct r#type(());
3753    }
3754}
3755
3756/// Builder for constructing an instance of this type.
3757pub struct ActivityFeedItemBuilder<St: activity_feed_item_state::State, S: BosStr = DefaultStr> {
3758    _state: PhantomData<fn() -> St>,
3759    _fields: (
3760        Option<Datetime>,
3761        Option<games_gamesgamesgamesgames::GameView<S>>,
3762        Option<games_gamesgamesgamesgames::ActivityListView<S>>,
3763        Option<games_gamesgamesgamesgames::ActivityReviewView<S>>,
3764        Option<ActivityFeedItemType<S>>,
3765    ),
3766    _type: PhantomData<fn() -> S>,
3767}
3768
3769impl ActivityFeedItem<DefaultStr> {
3770    /// Create a new builder for this type, using the default string type (DefaultStr = SmolStr) if needed
3771    pub fn new() -> ActivityFeedItemBuilder<activity_feed_item_state::Empty, DefaultStr> {
3772        ActivityFeedItemBuilder::new()
3773    }
3774}
3775
3776impl<S: BosStr> ActivityFeedItem<S> {
3777    /// Create a new builder for this type
3778    pub fn builder() -> ActivityFeedItemBuilder<activity_feed_item_state::Empty, S> {
3779        ActivityFeedItemBuilder::builder()
3780    }
3781}
3782
3783impl ActivityFeedItemBuilder<activity_feed_item_state::Empty, DefaultStr> {
3784    /// Create a new builder with all fields unset, using the default string type, if needed
3785    pub fn new() -> Self {
3786        ActivityFeedItemBuilder {
3787            _state: PhantomData,
3788            _fields: (None, None, None, None, None),
3789            _type: PhantomData,
3790        }
3791    }
3792}
3793
3794impl<S: BosStr> ActivityFeedItemBuilder<activity_feed_item_state::Empty, S> {
3795    /// Create a new builder with all fields unset
3796    pub fn builder() -> Self {
3797        ActivityFeedItemBuilder {
3798            _state: PhantomData,
3799            _fields: (None, None, None, None, None),
3800            _type: PhantomData,
3801        }
3802    }
3803}
3804
3805impl<St, S: BosStr> ActivityFeedItemBuilder<St, S>
3806where
3807    St: activity_feed_item_state::State,
3808    St::CreatedAt: activity_feed_item_state::IsUnset,
3809{
3810    /// Set the `createdAt` field (required)
3811    pub fn created_at(
3812        mut self,
3813        value: impl Into<Datetime>,
3814    ) -> ActivityFeedItemBuilder<activity_feed_item_state::SetCreatedAt<St>, S> {
3815        self._fields.0 = Option::Some(value.into());
3816        ActivityFeedItemBuilder {
3817            _state: PhantomData,
3818            _fields: self._fields,
3819            _type: PhantomData,
3820        }
3821    }
3822}
3823
3824impl<St: activity_feed_item_state::State, S: BosStr> ActivityFeedItemBuilder<St, S> {
3825    /// Set the `game` field (optional)
3826    pub fn game(
3827        mut self,
3828        value: impl Into<Option<games_gamesgamesgamesgames::GameView<S>>>,
3829    ) -> Self {
3830        self._fields.1 = value.into();
3831        self
3832    }
3833    /// Set the `game` field to an Option value (optional)
3834    pub fn maybe_game(mut self, value: Option<games_gamesgamesgamesgames::GameView<S>>) -> Self {
3835        self._fields.1 = value;
3836        self
3837    }
3838}
3839
3840impl<St: activity_feed_item_state::State, S: BosStr> ActivityFeedItemBuilder<St, S> {
3841    /// Set the `list` field (optional)
3842    pub fn list(
3843        mut self,
3844        value: impl Into<Option<games_gamesgamesgamesgames::ActivityListView<S>>>,
3845    ) -> Self {
3846        self._fields.2 = value.into();
3847        self
3848    }
3849    /// Set the `list` field to an Option value (optional)
3850    pub fn maybe_list(
3851        mut self,
3852        value: Option<games_gamesgamesgamesgames::ActivityListView<S>>,
3853    ) -> Self {
3854        self._fields.2 = value;
3855        self
3856    }
3857}
3858
3859impl<St: activity_feed_item_state::State, S: BosStr> ActivityFeedItemBuilder<St, S> {
3860    /// Set the `review` field (optional)
3861    pub fn review(
3862        mut self,
3863        value: impl Into<Option<games_gamesgamesgamesgames::ActivityReviewView<S>>>,
3864    ) -> Self {
3865        self._fields.3 = value.into();
3866        self
3867    }
3868    /// Set the `review` field to an Option value (optional)
3869    pub fn maybe_review(
3870        mut self,
3871        value: Option<games_gamesgamesgamesgames::ActivityReviewView<S>>,
3872    ) -> Self {
3873        self._fields.3 = value;
3874        self
3875    }
3876}
3877
3878impl<St, S: BosStr> ActivityFeedItemBuilder<St, S>
3879where
3880    St: activity_feed_item_state::State,
3881    St::Type: activity_feed_item_state::IsUnset,
3882{
3883    /// Set the `type` field (required)
3884    pub fn r#type(
3885        mut self,
3886        value: impl Into<ActivityFeedItemType<S>>,
3887    ) -> ActivityFeedItemBuilder<activity_feed_item_state::SetType<St>, S> {
3888        self._fields.4 = Option::Some(value.into());
3889        ActivityFeedItemBuilder {
3890            _state: PhantomData,
3891            _fields: self._fields,
3892            _type: PhantomData,
3893        }
3894    }
3895}
3896
3897impl<St, S: BosStr> ActivityFeedItemBuilder<St, S>
3898where
3899    St: activity_feed_item_state::State,
3900    St::CreatedAt: activity_feed_item_state::IsSet,
3901    St::Type: activity_feed_item_state::IsSet,
3902{
3903    /// Build the final struct.
3904    pub fn build(self) -> ActivityFeedItem<S> {
3905        ActivityFeedItem {
3906            created_at: self._fields.0.unwrap(),
3907            game: self._fields.1,
3908            list: self._fields.2,
3909            review: self._fields.3,
3910            r#type: self._fields.4.unwrap(),
3911            extra_data: Default::default(),
3912        }
3913    }
3914    /// Build the final struct with custom extra_data.
3915    pub fn build_with_data(self, extra_data: BTreeMap<SmolStr, Data<S>>) -> ActivityFeedItem<S> {
3916        ActivityFeedItem {
3917            created_at: self._fields.0.unwrap(),
3918            game: self._fields.1,
3919            list: self._fields.2,
3920            review: self._fields.3,
3921            r#type: self._fields.4.unwrap(),
3922            extra_data: Some(extra_data),
3923        }
3924    }
3925}
3926
3927fn lexicon_doc_games_gamesgamesgamesgames_defs() -> LexiconDoc<'static> {
3928    use alloc::collections::BTreeMap;
3929    #[allow(unused_imports)]
3930    use jacquard_common::{CowStr, deps::smol_str::SmolStr, types::blob::MimeType};
3931    use jacquard_lexicon::lexicon::*;
3932    LexiconDoc {
3933        lexicon: Lexicon::Lexicon1,
3934        id: CowStr::new_static("games.gamesgamesgamesgames.defs"),
3935        defs: {
3936            let mut map = BTreeMap::new();
3937            map.insert(
3938                SmolStr::new_static("activityFeedItem"),
3939                LexUserType::Object(LexObject {
3940                    required: Some(vec![
3941                        SmolStr::new_static("type"),
3942                        SmolStr::new_static("createdAt"),
3943                    ]),
3944                    properties: {
3945                        #[allow(unused_mut)]
3946                        let mut map = BTreeMap::new();
3947                        map.insert(
3948                            SmolStr::new_static("createdAt"),
3949                            LexObjectProperty::String(LexString {
3950                                description: Some(CowStr::new_static(
3951                                    "When the activity occurred.",
3952                                )),
3953                                format: Some(LexStringFormat::Datetime),
3954                                ..Default::default()
3955                            }),
3956                        );
3957                        map.insert(
3958                            SmolStr::new_static("game"),
3959                            LexObjectProperty::Ref(LexRef {
3960                                r#ref: CowStr::new_static(
3961                                    "games.gamesgamesgamesgames.defs#gameView",
3962                                ),
3963                                ..Default::default()
3964                            }),
3965                        );
3966                        map.insert(
3967                            SmolStr::new_static("list"),
3968                            LexObjectProperty::Ref(LexRef {
3969                                r#ref: CowStr::new_static(
3970                                    "games.gamesgamesgamesgames.defs#activityListView",
3971                                ),
3972                                ..Default::default()
3973                            }),
3974                        );
3975                        map.insert(
3976                            SmolStr::new_static("review"),
3977                            LexObjectProperty::Ref(LexRef {
3978                                r#ref: CowStr::new_static(
3979                                    "games.gamesgamesgamesgames.defs#activityReviewView",
3980                                ),
3981                                ..Default::default()
3982                            }),
3983                        );
3984                        map.insert(
3985                            SmolStr::new_static("type"),
3986                            LexObjectProperty::String(LexString {
3987                                description: Some(CowStr::new_static("The type of activity.")),
3988                                ..Default::default()
3989                            }),
3990                        );
3991                        map
3992                    },
3993                    ..Default::default()
3994                }),
3995            );
3996            map.insert(
3997                SmolStr::new_static("activityListView"),
3998                LexUserType::Object(LexObject {
3999                    required: Some(vec![
4000                        SmolStr::new_static("uri"),
4001                        SmolStr::new_static("name"),
4002                        SmolStr::new_static("createdAt"),
4003                    ]),
4004                    properties: {
4005                        #[allow(unused_mut)]
4006                        let mut map = BTreeMap::new();
4007                        map.insert(
4008                            SmolStr::new_static("createdAt"),
4009                            LexObjectProperty::String(LexString {
4010                                format: Some(LexStringFormat::Datetime),
4011                                ..Default::default()
4012                            }),
4013                        );
4014                        map.insert(
4015                            SmolStr::new_static("name"),
4016                            LexObjectProperty::String(LexString {
4017                                ..Default::default()
4018                            }),
4019                        );
4020                        map.insert(
4021                            SmolStr::new_static("uri"),
4022                            LexObjectProperty::String(LexString {
4023                                format: Some(LexStringFormat::AtUri),
4024                                ..Default::default()
4025                            }),
4026                        );
4027                        map
4028                    },
4029                    ..Default::default()
4030                }),
4031            );
4032            map.insert(
4033                SmolStr::new_static("activityReviewView"),
4034                LexUserType::Object(LexObject {
4035                    required: Some(vec![
4036                        SmolStr::new_static("uri"),
4037                        SmolStr::new_static("rating"),
4038                        SmolStr::new_static("createdAt"),
4039                    ]),
4040                    properties: {
4041                        #[allow(unused_mut)]
4042                        let mut map = BTreeMap::new();
4043                        map.insert(
4044                            SmolStr::new_static("containsSpoilers"),
4045                            LexObjectProperty::Boolean(LexBoolean {
4046                                ..Default::default()
4047                            }),
4048                        );
4049                        map.insert(
4050                            SmolStr::new_static("createdAt"),
4051                            LexObjectProperty::String(LexString {
4052                                format: Some(LexStringFormat::Datetime),
4053                                ..Default::default()
4054                            }),
4055                        );
4056                        map.insert(
4057                            SmolStr::new_static("rating"),
4058                            LexObjectProperty::Integer(LexInteger {
4059                                minimum: Some(0i64),
4060                                maximum: Some(10i64),
4061                                ..Default::default()
4062                            }),
4063                        );
4064                        map.insert(
4065                            SmolStr::new_static("tags"),
4066                            LexObjectProperty::Array(LexArray {
4067                                items: LexArrayItem::String(LexString {
4068                                    ..Default::default()
4069                                }),
4070                                ..Default::default()
4071                            }),
4072                        );
4073                        map.insert(
4074                            SmolStr::new_static("text"),
4075                            LexObjectProperty::String(LexString {
4076                                ..Default::default()
4077                            }),
4078                        );
4079                        map.insert(
4080                            SmolStr::new_static("title"),
4081                            LexObjectProperty::String(LexString {
4082                                ..Default::default()
4083                            }),
4084                        );
4085                        map.insert(
4086                            SmolStr::new_static("uri"),
4087                            LexObjectProperty::String(LexString {
4088                                format: Some(LexStringFormat::AtUri),
4089                                ..Default::default()
4090                            }),
4091                        );
4092                        map
4093                    },
4094                    ..Default::default()
4095                }),
4096            );
4097            map.insert(
4098                SmolStr::new_static("actorCreditView"),
4099                LexUserType::Object(LexObject {
4100                    required: Some(vec![
4101                        SmolStr::new_static("uri"),
4102                        SmolStr::new_static("credits"),
4103                    ]),
4104                    properties: {
4105                        #[allow(unused_mut)]
4106                        let mut map = BTreeMap::new();
4107                        map.insert(
4108                            SmolStr::new_static("actorUri"),
4109                            LexObjectProperty::String(LexString {
4110                                format: Some(LexStringFormat::AtUri),
4111                                ..Default::default()
4112                            }),
4113                        );
4114                        map.insert(
4115                            SmolStr::new_static("credits"),
4116                            LexObjectProperty::Array(LexArray {
4117                                items: LexArrayItem::Ref(LexRef {
4118                                    r#ref: CowStr::new_static(
4119                                        "games.gamesgamesgamesgames.defs#creditEntry",
4120                                    ),
4121                                    ..Default::default()
4122                                }),
4123                                ..Default::default()
4124                            }),
4125                        );
4126                        map.insert(
4127                            SmolStr::new_static("displayName"),
4128                            LexObjectProperty::String(LexString {
4129                                max_length: Some(640usize),
4130                                ..Default::default()
4131                            }),
4132                        );
4133                        map.insert(
4134                            SmolStr::new_static("uri"),
4135                            LexObjectProperty::String(LexString {
4136                                format: Some(LexStringFormat::AtUri),
4137                                ..Default::default()
4138                            }),
4139                        );
4140                        map
4141                    },
4142                    ..Default::default()
4143                }),
4144            );
4145            map.insert(
4146                SmolStr::new_static("actorProfileDetailView"),
4147                LexUserType::Object(LexObject {
4148                    required: Some(vec![SmolStr::new_static("uri"), SmolStr::new_static("did")]),
4149                    properties: {
4150                        #[allow(unused_mut)]
4151                        let mut map = BTreeMap::new();
4152                        map.insert(
4153                            SmolStr::new_static("avatar"),
4154                            LexObjectProperty::Blob(LexBlob {
4155                                ..Default::default()
4156                            }),
4157                        );
4158                        map.insert(
4159                            SmolStr::new_static("createdAt"),
4160                            LexObjectProperty::String(LexString {
4161                                format: Some(LexStringFormat::Datetime),
4162                                ..Default::default()
4163                            }),
4164                        );
4165                        map.insert(
4166                            SmolStr::new_static("description"),
4167                            LexObjectProperty::String(LexString {
4168                                max_length: Some(3000usize),
4169                                ..Default::default()
4170                            }),
4171                        );
4172                        map.insert(
4173                            SmolStr::new_static("descriptionFacets"),
4174                            LexObjectProperty::Array(LexArray {
4175                                items: LexArrayItem::Ref(LexRef {
4176                                    r#ref: CowStr::new_static("app.bsky.richtext.facet"),
4177                                    ..Default::default()
4178                                }),
4179                                ..Default::default()
4180                            }),
4181                        );
4182                        map.insert(
4183                            SmolStr::new_static("did"),
4184                            LexObjectProperty::String(LexString {
4185                                format: Some(LexStringFormat::Did),
4186                                ..Default::default()
4187                            }),
4188                        );
4189                        map.insert(
4190                            SmolStr::new_static("displayName"),
4191                            LexObjectProperty::String(LexString {
4192                                max_length: Some(640usize),
4193                                ..Default::default()
4194                            }),
4195                        );
4196                        map.insert(
4197                            SmolStr::new_static("pronouns"),
4198                            LexObjectProperty::String(LexString {
4199                                max_length: Some(200usize),
4200                                ..Default::default()
4201                            }),
4202                        );
4203                        map.insert(
4204                            SmolStr::new_static("uri"),
4205                            LexObjectProperty::String(LexString {
4206                                format: Some(LexStringFormat::AtUri),
4207                                ..Default::default()
4208                            }),
4209                        );
4210                        map.insert(
4211                            SmolStr::new_static("websites"),
4212                            LexObjectProperty::Array(LexArray {
4213                                items: LexArrayItem::Ref(LexRef {
4214                                    r#ref: CowStr::new_static(
4215                                        "games.gamesgamesgamesgames.defs#website",
4216                                    ),
4217                                    ..Default::default()
4218                                }),
4219                                ..Default::default()
4220                            }),
4221                        );
4222                        map
4223                    },
4224                    ..Default::default()
4225                }),
4226            );
4227            map.insert(
4228                SmolStr::new_static("actorProfileSummaryView"),
4229                LexUserType::Object(LexObject {
4230                    required: Some(vec![SmolStr::new_static("uri"), SmolStr::new_static("did")]),
4231                    properties: {
4232                        #[allow(unused_mut)]
4233                        let mut map = BTreeMap::new();
4234                        map.insert(
4235                            SmolStr::new_static("avatar"),
4236                            LexObjectProperty::Blob(LexBlob {
4237                                ..Default::default()
4238                            }),
4239                        );
4240                        map.insert(
4241                            SmolStr::new_static("did"),
4242                            LexObjectProperty::String(LexString {
4243                                format: Some(LexStringFormat::Did),
4244                                ..Default::default()
4245                            }),
4246                        );
4247                        map.insert(
4248                            SmolStr::new_static("displayName"),
4249                            LexObjectProperty::String(LexString {
4250                                max_length: Some(640usize),
4251                                ..Default::default()
4252                            }),
4253                        );
4254                        map.insert(
4255                            SmolStr::new_static("uri"),
4256                            LexObjectProperty::String(LexString {
4257                                format: Some(LexStringFormat::AtUri),
4258                                ..Default::default()
4259                            }),
4260                        );
4261                        map
4262                    },
4263                    ..Default::default()
4264                }),
4265            );
4266            map.insert(
4267                SmolStr::new_static("ageRating"),
4268                LexUserType::Object(LexObject {
4269                    required: Some(vec![
4270                        SmolStr::new_static("organization"),
4271                        SmolStr::new_static("rating"),
4272                    ]),
4273                    properties: {
4274                        #[allow(unused_mut)]
4275                        let mut map = BTreeMap::new();
4276                        map.insert(
4277                            SmolStr::new_static("contentDescriptors"),
4278                            LexObjectProperty::Array(LexArray {
4279                                items: LexArrayItem::String(LexString {
4280                                    ..Default::default()
4281                                }),
4282                                ..Default::default()
4283                            }),
4284                        );
4285                        map.insert(
4286                            SmolStr::new_static("organization"),
4287                            LexObjectProperty::String(LexString {
4288                                ..Default::default()
4289                            }),
4290                        );
4291                        map.insert(
4292                            SmolStr::new_static("rating"),
4293                            LexObjectProperty::String(LexString {
4294                                ..Default::default()
4295                            }),
4296                        );
4297                        map
4298                    },
4299                    ..Default::default()
4300                }),
4301            );
4302            map.insert(
4303                SmolStr::new_static("alternativeName"),
4304                LexUserType::Object(LexObject {
4305                    required: Some(vec![SmolStr::new_static("name")]),
4306                    properties: {
4307                        #[allow(unused_mut)]
4308                        let mut map = BTreeMap::new();
4309                        map.insert(
4310                            SmolStr::new_static("comment"),
4311                            LexObjectProperty::String(LexString {
4312                                ..Default::default()
4313                            }),
4314                        );
4315                        map.insert(
4316                            SmolStr::new_static("locale"),
4317                            LexObjectProperty::String(LexString {
4318                                ..Default::default()
4319                            }),
4320                        );
4321                        map.insert(
4322                            SmolStr::new_static("name"),
4323                            LexObjectProperty::String(LexString {
4324                                ..Default::default()
4325                            }),
4326                        );
4327                        map
4328                    },
4329                    ..Default::default()
4330                }),
4331            );
4332            map.insert(
4333                SmolStr::new_static("applicationType"),
4334                LexUserType::String(LexString {
4335                    ..Default::default()
4336                }),
4337            );
4338            map.insert(
4339                SmolStr::new_static("collectionSummaryView"),
4340                LexUserType::Object(LexObject {
4341                    required: Some(vec![
4342                        SmolStr::new_static("uri"),
4343                        SmolStr::new_static("name"),
4344                    ]),
4345                    properties: {
4346                        #[allow(unused_mut)]
4347                        let mut map = BTreeMap::new();
4348                        map.insert(
4349                            SmolStr::new_static("name"),
4350                            LexObjectProperty::String(LexString {
4351                                ..Default::default()
4352                            }),
4353                        );
4354                        map.insert(
4355                            SmolStr::new_static("slug"),
4356                            LexObjectProperty::String(LexString {
4357                                ..Default::default()
4358                            }),
4359                        );
4360                        map.insert(
4361                            SmolStr::new_static("type"),
4362                            LexObjectProperty::String(LexString {
4363                                ..Default::default()
4364                            }),
4365                        );
4366                        map.insert(
4367                            SmolStr::new_static("uri"),
4368                            LexObjectProperty::String(LexString {
4369                                format: Some(LexStringFormat::AtUri),
4370                                ..Default::default()
4371                            }),
4372                        );
4373                        map
4374                    },
4375                    ..Default::default()
4376                }),
4377            );
4378            map.insert(
4379                SmolStr::new_static("communityFeedActorView"),
4380                LexUserType::Object(LexObject {
4381                    description: Some(CowStr::new_static(
4382                        "Lightweight actor view for community feed items.",
4383                    )),
4384                    required: Some(vec![SmolStr::new_static("did")]),
4385                    properties: {
4386                        #[allow(unused_mut)]
4387                        let mut map = BTreeMap::new();
4388                        map.insert(
4389                            SmolStr::new_static("did"),
4390                            LexObjectProperty::String(LexString {
4391                                format: Some(LexStringFormat::Did),
4392                                ..Default::default()
4393                            }),
4394                        );
4395                        map.insert(
4396                            SmolStr::new_static("displayName"),
4397                            LexObjectProperty::String(LexString {
4398                                max_length: Some(640usize),
4399                                ..Default::default()
4400                            }),
4401                        );
4402                        map.insert(
4403                            SmolStr::new_static("handle"),
4404                            LexObjectProperty::String(LexString {
4405                                ..Default::default()
4406                            }),
4407                        );
4408                        map
4409                    },
4410                    ..Default::default()
4411                }),
4412            );
4413            map.insert(
4414                SmolStr::new_static("communityFeedItem"),
4415                LexUserType::Object(LexObject {
4416                    description: Some(CowStr::new_static(
4417                        "A community activity item with actor information.",
4418                    )),
4419                    required: Some(vec![
4420                        SmolStr::new_static("type"),
4421                        SmolStr::new_static("createdAt"),
4422                        SmolStr::new_static("actor"),
4423                    ]),
4424                    properties: {
4425                        #[allow(unused_mut)]
4426                        let mut map = BTreeMap::new();
4427                        map.insert(
4428                            SmolStr::new_static("actor"),
4429                            LexObjectProperty::Ref(LexRef {
4430                                r#ref: CowStr::new_static(
4431                                    "games.gamesgamesgamesgames.defs#communityFeedActorView",
4432                                ),
4433                                ..Default::default()
4434                            }),
4435                        );
4436                        map.insert(
4437                            SmolStr::new_static("createdAt"),
4438                            LexObjectProperty::String(LexString {
4439                                description: Some(CowStr::new_static(
4440                                    "When the activity occurred.",
4441                                )),
4442                                format: Some(LexStringFormat::Datetime),
4443                                ..Default::default()
4444                            }),
4445                        );
4446                        map.insert(
4447                            SmolStr::new_static("game"),
4448                            LexObjectProperty::Ref(LexRef {
4449                                r#ref: CowStr::new_static(
4450                                    "games.gamesgamesgamesgames.defs#gameView",
4451                                ),
4452                                ..Default::default()
4453                            }),
4454                        );
4455                        map.insert(
4456                            SmolStr::new_static("list"),
4457                            LexObjectProperty::Ref(LexRef {
4458                                r#ref: CowStr::new_static(
4459                                    "games.gamesgamesgamesgames.defs#activityListView",
4460                                ),
4461                                ..Default::default()
4462                            }),
4463                        );
4464                        map.insert(
4465                            SmolStr::new_static("review"),
4466                            LexObjectProperty::Ref(LexRef {
4467                                r#ref: CowStr::new_static(
4468                                    "games.gamesgamesgamesgames.defs#activityReviewView",
4469                                ),
4470                                ..Default::default()
4471                            }),
4472                        );
4473                        map.insert(
4474                            SmolStr::new_static("type"),
4475                            LexObjectProperty::String(LexString {
4476                                description: Some(CowStr::new_static("The type of activity.")),
4477                                ..Default::default()
4478                            }),
4479                        );
4480                        map
4481                    },
4482                    ..Default::default()
4483                }),
4484            );
4485            map.insert(
4486                SmolStr::new_static("companyRole"),
4487                LexUserType::String(LexString {
4488                    ..Default::default()
4489                }),
4490            );
4491            map.insert(
4492                SmolStr::new_static("creditEntry"),
4493                LexUserType::Object(LexObject {
4494                    required: Some(vec![SmolStr::new_static("role")]),
4495                    properties: {
4496                        #[allow(unused_mut)]
4497                        let mut map = BTreeMap::new();
4498                        map.insert(
4499                            SmolStr::new_static("department"),
4500                            LexObjectProperty::String(LexString {
4501                                max_length: Some(640usize),
4502                                ..Default::default()
4503                            }),
4504                        );
4505                        map.insert(
4506                            SmolStr::new_static("role"),
4507                            LexObjectProperty::Ref(LexRef {
4508                                r#ref: CowStr::new_static(
4509                                    "games.gamesgamesgamesgames.defs#individualRole",
4510                                ),
4511                                ..Default::default()
4512                            }),
4513                        );
4514                        map
4515                    },
4516                    ..Default::default()
4517                }),
4518            );
4519            map.insert(
4520                SmolStr::new_static("engineSummaryView"),
4521                LexUserType::Object(LexObject {
4522                    required: Some(vec![
4523                        SmolStr::new_static("uri"),
4524                        SmolStr::new_static("name"),
4525                    ]),
4526                    properties: {
4527                        #[allow(unused_mut)]
4528                        let mut map = BTreeMap::new();
4529                        map.insert(
4530                            SmolStr::new_static("name"),
4531                            LexObjectProperty::String(LexString {
4532                                ..Default::default()
4533                            }),
4534                        );
4535                        map.insert(
4536                            SmolStr::new_static("slug"),
4537                            LexObjectProperty::String(LexString {
4538                                ..Default::default()
4539                            }),
4540                        );
4541                        map.insert(
4542                            SmolStr::new_static("uri"),
4543                            LexObjectProperty::String(LexString {
4544                                format: Some(LexStringFormat::AtUri),
4545                                ..Default::default()
4546                            }),
4547                        );
4548                        map
4549                    },
4550                    ..Default::default()
4551                }),
4552            );
4553            map.insert(
4554                SmolStr::new_static("externalIds"),
4555                LexUserType::Object(LexObject {
4556                    properties: {
4557                        #[allow(unused_mut)]
4558                        let mut map = BTreeMap::new();
4559                        map.insert(
4560                            SmolStr::new_static("appleAppStore"),
4561                            LexObjectProperty::String(LexString {
4562                                ..Default::default()
4563                            }),
4564                        );
4565                        map.insert(
4566                            SmolStr::new_static("epicGames"),
4567                            LexObjectProperty::String(LexString {
4568                                ..Default::default()
4569                            }),
4570                        );
4571                        map.insert(
4572                            SmolStr::new_static("gog"),
4573                            LexObjectProperty::String(LexString {
4574                                ..Default::default()
4575                            }),
4576                        );
4577                        map.insert(
4578                            SmolStr::new_static("googlePlay"),
4579                            LexObjectProperty::String(LexString {
4580                                ..Default::default()
4581                            }),
4582                        );
4583                        map.insert(
4584                            SmolStr::new_static("humbleBundle"),
4585                            LexObjectProperty::String(LexString {
4586                                ..Default::default()
4587                            }),
4588                        );
4589                        map.insert(
4590                            SmolStr::new_static("igdb"),
4591                            LexObjectProperty::String(LexString {
4592                                ..Default::default()
4593                            }),
4594                        );
4595                        map.insert(
4596                            SmolStr::new_static("itchIo"),
4597                            LexObjectProperty::Ref(LexRef {
4598                                r#ref: CowStr::new_static(
4599                                    "games.gamesgamesgamesgames.defs#itchIoId",
4600                                ),
4601                                ..Default::default()
4602                            }),
4603                        );
4604                        map.insert(
4605                            SmolStr::new_static("nintendoEshop"),
4606                            LexObjectProperty::String(LexString {
4607                                ..Default::default()
4608                            }),
4609                        );
4610                        map.insert(
4611                            SmolStr::new_static("playStation"),
4612                            LexObjectProperty::String(LexString {
4613                                ..Default::default()
4614                            }),
4615                        );
4616                        map.insert(
4617                            SmolStr::new_static("steam"),
4618                            LexObjectProperty::String(LexString {
4619                                ..Default::default()
4620                            }),
4621                        );
4622                        map.insert(
4623                            SmolStr::new_static("twitch"),
4624                            LexObjectProperty::String(LexString {
4625                                ..Default::default()
4626                            }),
4627                        );
4628                        map.insert(
4629                            SmolStr::new_static("xbox"),
4630                            LexObjectProperty::String(LexString {
4631                                ..Default::default()
4632                            }),
4633                        );
4634                        map
4635                    },
4636                    ..Default::default()
4637                }),
4638            );
4639            map.insert(
4640                SmolStr::new_static("externalVideo"),
4641                LexUserType::Object(LexObject {
4642                    required: Some(vec![
4643                        SmolStr::new_static("videoId"),
4644                        SmolStr::new_static("platform"),
4645                    ]),
4646                    properties: {
4647                        #[allow(unused_mut)]
4648                        let mut map = BTreeMap::new();
4649                        map.insert(
4650                            SmolStr::new_static("platform"),
4651                            LexObjectProperty::String(LexString {
4652                                ..Default::default()
4653                            }),
4654                        );
4655                        map.insert(
4656                            SmolStr::new_static("title"),
4657                            LexObjectProperty::String(LexString {
4658                                ..Default::default()
4659                            }),
4660                        );
4661                        map.insert(
4662                            SmolStr::new_static("videoId"),
4663                            LexObjectProperty::String(LexString {
4664                                ..Default::default()
4665                            }),
4666                        );
4667                        map
4668                    },
4669                    ..Default::default()
4670                }),
4671            );
4672            map.insert(
4673                SmolStr::new_static("gameDetailView"),
4674                LexUserType::Object(LexObject {
4675                    required: Some(vec![
4676                        SmolStr::new_static("name"),
4677                        SmolStr::new_static("uri"),
4678                        SmolStr::new_static("createdAt"),
4679                    ]),
4680                    properties: {
4681                        #[allow(unused_mut)]
4682                        let mut map = BTreeMap::new();
4683                        map.insert(
4684                            SmolStr::new_static("actorCredits"),
4685                            LexObjectProperty::Array(LexArray {
4686                                items: LexArrayItem::Ref(LexRef {
4687                                    r#ref: CowStr::new_static(
4688                                        "games.gamesgamesgamesgames.defs#actorCreditView",
4689                                    ),
4690                                    ..Default::default()
4691                                }),
4692                                ..Default::default()
4693                            }),
4694                        );
4695                        map.insert(
4696                            SmolStr::new_static("ageRatings"),
4697                            LexObjectProperty::Array(LexArray {
4698                                items: LexArrayItem::Ref(LexRef {
4699                                    r#ref: CowStr::new_static(
4700                                        "games.gamesgamesgamesgames.defs#ageRating",
4701                                    ),
4702                                    ..Default::default()
4703                                }),
4704                                ..Default::default()
4705                            }),
4706                        );
4707                        map.insert(
4708                            SmolStr::new_static("alternativeNames"),
4709                            LexObjectProperty::Array(LexArray {
4710                                items: LexArrayItem::Ref(LexRef {
4711                                    r#ref: CowStr::new_static(
4712                                        "games.gamesgamesgamesgames.defs#alternativeName",
4713                                    ),
4714                                    ..Default::default()
4715                                }),
4716                                ..Default::default()
4717                            }),
4718                        );
4719                        map.insert(
4720                            SmolStr::new_static("applicationType"),
4721                            LexObjectProperty::Ref(LexRef {
4722                                r#ref: CowStr::new_static(
4723                                    "games.gamesgamesgamesgames.defs#applicationType",
4724                                ),
4725                                ..Default::default()
4726                            }),
4727                        );
4728                        map.insert(
4729                            SmolStr::new_static("collections"),
4730                            LexObjectProperty::Array(LexArray {
4731                                items: LexArrayItem::String(LexString {
4732                                    format: Some(LexStringFormat::AtUri),
4733                                    ..Default::default()
4734                                }),
4735                                ..Default::default()
4736                            }),
4737                        );
4738                        map.insert(
4739                            SmolStr::new_static("createdAt"),
4740                            LexObjectProperty::String(LexString {
4741                                format: Some(LexStringFormat::Datetime),
4742                                ..Default::default()
4743                            }),
4744                        );
4745                        map.insert(
4746                            SmolStr::new_static("engines"),
4747                            LexObjectProperty::Array(LexArray {
4748                                items: LexArrayItem::String(LexString {
4749                                    format: Some(LexStringFormat::AtUri),
4750                                    ..Default::default()
4751                                }),
4752                                ..Default::default()
4753                            }),
4754                        );
4755                        map.insert(
4756                            SmolStr::new_static("externalIds"),
4757                            LexObjectProperty::Ref(LexRef {
4758                                r#ref: CowStr::new_static(
4759                                    "games.gamesgamesgamesgames.defs#externalIds",
4760                                ),
4761                                ..Default::default()
4762                            }),
4763                        );
4764                        map.insert(
4765                            SmolStr::new_static("genres"),
4766                            LexObjectProperty::Array(LexArray {
4767                                items: LexArrayItem::Ref(LexRef {
4768                                    r#ref: CowStr::new_static(
4769                                        "games.gamesgamesgamesgames.defs#genre",
4770                                    ),
4771                                    ..Default::default()
4772                                }),
4773                                ..Default::default()
4774                            }),
4775                        );
4776                        map.insert(
4777                            SmolStr::new_static("keywords"),
4778                            LexObjectProperty::Array(LexArray {
4779                                items: LexArrayItem::String(LexString {
4780                                    ..Default::default()
4781                                }),
4782                                ..Default::default()
4783                            }),
4784                        );
4785                        map.insert(
4786                            SmolStr::new_static("languageSupports"),
4787                            LexObjectProperty::Array(LexArray {
4788                                items: LexArrayItem::Ref(LexRef {
4789                                    r#ref: CowStr::new_static(
4790                                        "games.gamesgamesgamesgames.defs#languageSupport",
4791                                    ),
4792                                    ..Default::default()
4793                                }),
4794                                ..Default::default()
4795                            }),
4796                        );
4797                        map.insert(
4798                            SmolStr::new_static("media"),
4799                            LexObjectProperty::Array(LexArray {
4800                                items: LexArrayItem::Ref(LexRef {
4801                                    r#ref: CowStr::new_static(
4802                                        "games.gamesgamesgamesgames.defs#mediaItem",
4803                                    ),
4804                                    ..Default::default()
4805                                }),
4806                                ..Default::default()
4807                            }),
4808                        );
4809                        map.insert(
4810                            SmolStr::new_static("modes"),
4811                            LexObjectProperty::Array(LexArray {
4812                                items: LexArrayItem::Ref(LexRef {
4813                                    r#ref: CowStr::new_static(
4814                                        "games.gamesgamesgamesgames.defs#mode",
4815                                    ),
4816                                    ..Default::default()
4817                                }),
4818                                ..Default::default()
4819                            }),
4820                        );
4821                        map.insert(
4822                            SmolStr::new_static("multiplayerModes"),
4823                            LexObjectProperty::Array(LexArray {
4824                                items: LexArrayItem::Ref(LexRef {
4825                                    r#ref: CowStr::new_static(
4826                                        "games.gamesgamesgamesgames.defs#multiplayerMode",
4827                                    ),
4828                                    ..Default::default()
4829                                }),
4830                                ..Default::default()
4831                            }),
4832                        );
4833                        map.insert(
4834                            SmolStr::new_static("name"),
4835                            LexObjectProperty::String(LexString {
4836                                ..Default::default()
4837                            }),
4838                        );
4839                        map.insert(
4840                            SmolStr::new_static("orgCredits"),
4841                            LexObjectProperty::Array(LexArray {
4842                                items: LexArrayItem::Ref(LexRef {
4843                                    r#ref: CowStr::new_static(
4844                                        "games.gamesgamesgamesgames.defs#orgCreditView",
4845                                    ),
4846                                    ..Default::default()
4847                                }),
4848                                ..Default::default()
4849                            }),
4850                        );
4851                        map.insert(
4852                            SmolStr::new_static("parent"),
4853                            LexObjectProperty::String(LexString {
4854                                format: Some(LexStringFormat::AtUri),
4855                                ..Default::default()
4856                            }),
4857                        );
4858                        map.insert(
4859                            SmolStr::new_static("playerPerspectives"),
4860                            LexObjectProperty::Array(LexArray {
4861                                items: LexArrayItem::Ref(LexRef {
4862                                    r#ref: CowStr::new_static(
4863                                        "games.gamesgamesgamesgames.defs#playerPerspective",
4864                                    ),
4865                                    ..Default::default()
4866                                }),
4867                                ..Default::default()
4868                            }),
4869                        );
4870                        map.insert(
4871                            SmolStr::new_static("publishedAt"),
4872                            LexObjectProperty::String(LexString {
4873                                format: Some(LexStringFormat::Datetime),
4874                                ..Default::default()
4875                            }),
4876                        );
4877                        map.insert(
4878                            SmolStr::new_static("releases"),
4879                            LexObjectProperty::Array(LexArray {
4880                                items: LexArrayItem::Ref(LexRef {
4881                                    r#ref: CowStr::new_static(
4882                                        "games.gamesgamesgamesgames.defs#release",
4883                                    ),
4884                                    ..Default::default()
4885                                }),
4886                                ..Default::default()
4887                            }),
4888                        );
4889                        map.insert(
4890                            SmolStr::new_static("slug"),
4891                            LexObjectProperty::String(LexString {
4892                                ..Default::default()
4893                            }),
4894                        );
4895                        map.insert(
4896                            SmolStr::new_static("storyline"),
4897                            LexObjectProperty::String(LexString {
4898                                ..Default::default()
4899                            }),
4900                        );
4901                        map.insert(
4902                            SmolStr::new_static("summary"),
4903                            LexObjectProperty::String(LexString {
4904                                ..Default::default()
4905                            }),
4906                        );
4907                        map.insert(
4908                            SmolStr::new_static("themes"),
4909                            LexObjectProperty::Array(LexArray {
4910                                items: LexArrayItem::Ref(LexRef {
4911                                    r#ref: CowStr::new_static(
4912                                        "games.gamesgamesgamesgames.defs#theme",
4913                                    ),
4914                                    ..Default::default()
4915                                }),
4916                                ..Default::default()
4917                            }),
4918                        );
4919                        map.insert(
4920                            SmolStr::new_static("timeToBeat"),
4921                            LexObjectProperty::Ref(LexRef {
4922                                r#ref: CowStr::new_static(
4923                                    "games.gamesgamesgamesgames.defs#timeToBeat",
4924                                ),
4925                                ..Default::default()
4926                            }),
4927                        );
4928                        map.insert(
4929                            SmolStr::new_static("uri"),
4930                            LexObjectProperty::String(LexString {
4931                                format: Some(LexStringFormat::AtUri),
4932                                ..Default::default()
4933                            }),
4934                        );
4935                        map.insert(
4936                            SmolStr::new_static("videos"),
4937                            LexObjectProperty::Array(LexArray {
4938                                items: LexArrayItem::Ref(LexRef {
4939                                    r#ref: CowStr::new_static(
4940                                        "games.gamesgamesgamesgames.defs#externalVideo",
4941                                    ),
4942                                    ..Default::default()
4943                                }),
4944                                ..Default::default()
4945                            }),
4946                        );
4947                        map.insert(
4948                            SmolStr::new_static("websites"),
4949                            LexObjectProperty::Array(LexArray {
4950                                items: LexArrayItem::Ref(LexRef {
4951                                    r#ref: CowStr::new_static(
4952                                        "games.gamesgamesgamesgames.defs#website",
4953                                    ),
4954                                    ..Default::default()
4955                                }),
4956                                ..Default::default()
4957                            }),
4958                        );
4959                        map
4960                    },
4961                    ..Default::default()
4962                }),
4963            );
4964            map.insert(
4965                SmolStr::new_static("gameFeedViewItem"),
4966                LexUserType::Object(LexObject {
4967                    required: Some(vec![SmolStr::new_static("game")]),
4968                    properties: {
4969                        #[allow(unused_mut)]
4970                        let mut map = BTreeMap::new();
4971                        map.insert(
4972                            SmolStr::new_static("feedContext"),
4973                            LexObjectProperty::String(LexString {
4974                                max_length: Some(2000usize),
4975                                ..Default::default()
4976                            }),
4977                        );
4978                        map.insert(
4979                            SmolStr::new_static("game"),
4980                            LexObjectProperty::Ref(LexRef {
4981                                r#ref: CowStr::new_static(
4982                                    "games.gamesgamesgamesgames.defs#gameView",
4983                                ),
4984                                ..Default::default()
4985                            }),
4986                        );
4987                        map
4988                    },
4989                    ..Default::default()
4990                }),
4991            );
4992            map.insert(
4993                SmolStr::new_static("gameSummaryView"),
4994                LexUserType::Object(LexObject {
4995                    required: Some(vec![
4996                        SmolStr::new_static("uri"),
4997                        SmolStr::new_static("name"),
4998                    ]),
4999                    properties: {
5000                        #[allow(unused_mut)]
5001                        let mut map = BTreeMap::new();
5002                        map.insert(
5003                            SmolStr::new_static("applicationType"),
5004                            LexObjectProperty::Ref(LexRef {
5005                                r#ref: CowStr::new_static(
5006                                    "games.gamesgamesgamesgames.defs#applicationType",
5007                                ),
5008                                ..Default::default()
5009                            }),
5010                        );
5011                        map.insert(
5012                            SmolStr::new_static("firstReleaseDate"),
5013                            LexObjectProperty::Integer(LexInteger {
5014                                ..Default::default()
5015                            }),
5016                        );
5017                        map.insert(
5018                            SmolStr::new_static("media"),
5019                            LexObjectProperty::Array(LexArray {
5020                                items: LexArrayItem::Ref(LexRef {
5021                                    r#ref: CowStr::new_static(
5022                                        "games.gamesgamesgamesgames.defs#mediaItem",
5023                                    ),
5024                                    ..Default::default()
5025                                }),
5026                                ..Default::default()
5027                            }),
5028                        );
5029                        map.insert(
5030                            SmolStr::new_static("name"),
5031                            LexObjectProperty::String(LexString {
5032                                ..Default::default()
5033                            }),
5034                        );
5035                        map.insert(
5036                            SmolStr::new_static("slug"),
5037                            LexObjectProperty::String(LexString {
5038                                ..Default::default()
5039                            }),
5040                        );
5041                        map.insert(
5042                            SmolStr::new_static("summary"),
5043                            LexObjectProperty::String(LexString {
5044                                ..Default::default()
5045                            }),
5046                        );
5047                        map.insert(
5048                            SmolStr::new_static("uri"),
5049                            LexObjectProperty::String(LexString {
5050                                format: Some(LexStringFormat::AtUri),
5051                                ..Default::default()
5052                            }),
5053                        );
5054                        map
5055                    },
5056                    ..Default::default()
5057                }),
5058            );
5059            map.insert(
5060                SmolStr::new_static("gameView"),
5061                LexUserType::Object(LexObject {
5062                    required: Some(vec![
5063                        SmolStr::new_static("uri"),
5064                        SmolStr::new_static("name"),
5065                        SmolStr::new_static("applicationType"),
5066                    ]),
5067                    properties: {
5068                        #[allow(unused_mut)]
5069                        let mut map = BTreeMap::new();
5070                        map.insert(
5071                            SmolStr::new_static("applicationType"),
5072                            LexObjectProperty::Ref(LexRef {
5073                                r#ref: CowStr::new_static(
5074                                    "games.gamesgamesgamesgames.defs#applicationType",
5075                                ),
5076                                ..Default::default()
5077                            }),
5078                        );
5079                        map.insert(
5080                            SmolStr::new_static("genres"),
5081                            LexObjectProperty::Array(LexArray {
5082                                items: LexArrayItem::Ref(LexRef {
5083                                    r#ref: CowStr::new_static(
5084                                        "games.gamesgamesgamesgames.defs#genre",
5085                                    ),
5086                                    ..Default::default()
5087                                }),
5088                                ..Default::default()
5089                            }),
5090                        );
5091                        map.insert(
5092                            SmolStr::new_static("likeCount"),
5093                            LexObjectProperty::Integer(LexInteger {
5094                                minimum: Some(0i64),
5095                                ..Default::default()
5096                            }),
5097                        );
5098                        map.insert(
5099                            SmolStr::new_static("media"),
5100                            LexObjectProperty::Array(LexArray {
5101                                items: LexArrayItem::Ref(LexRef {
5102                                    r#ref: CowStr::new_static(
5103                                        "games.gamesgamesgamesgames.defs#mediaItem",
5104                                    ),
5105                                    ..Default::default()
5106                                }),
5107                                ..Default::default()
5108                            }),
5109                        );
5110                        map.insert(
5111                            SmolStr::new_static("name"),
5112                            LexObjectProperty::String(LexString {
5113                                ..Default::default()
5114                            }),
5115                        );
5116                        map.insert(
5117                            SmolStr::new_static("releases"),
5118                            LexObjectProperty::Array(LexArray {
5119                                items: LexArrayItem::Ref(LexRef {
5120                                    r#ref: CowStr::new_static(
5121                                        "games.gamesgamesgamesgames.defs#release",
5122                                    ),
5123                                    ..Default::default()
5124                                }),
5125                                ..Default::default()
5126                            }),
5127                        );
5128                        map.insert(
5129                            SmolStr::new_static("slug"),
5130                            LexObjectProperty::String(LexString {
5131                                ..Default::default()
5132                            }),
5133                        );
5134                        map.insert(
5135                            SmolStr::new_static("summary"),
5136                            LexObjectProperty::String(LexString {
5137                                ..Default::default()
5138                            }),
5139                        );
5140                        map.insert(
5141                            SmolStr::new_static("themes"),
5142                            LexObjectProperty::Array(LexArray {
5143                                items: LexArrayItem::Ref(LexRef {
5144                                    r#ref: CowStr::new_static(
5145                                        "games.gamesgamesgamesgames.defs#theme",
5146                                    ),
5147                                    ..Default::default()
5148                                }),
5149                                ..Default::default()
5150                            }),
5151                        );
5152                        map.insert(
5153                            SmolStr::new_static("uri"),
5154                            LexObjectProperty::String(LexString {
5155                                format: Some(LexStringFormat::AtUri),
5156                                ..Default::default()
5157                            }),
5158                        );
5159                        map.insert(
5160                            SmolStr::new_static("viewer"),
5161                            LexObjectProperty::Ref(LexRef {
5162                                r#ref: CowStr::new_static(
5163                                    "games.gamesgamesgamesgames.defs#viewerState",
5164                                ),
5165                                ..Default::default()
5166                            }),
5167                        );
5168                        map
5169                    },
5170                    ..Default::default()
5171                }),
5172            );
5173            map.insert(
5174                SmolStr::new_static("genre"),
5175                LexUserType::String(LexString {
5176                    ..Default::default()
5177                }),
5178            );
5179            map.insert(
5180                SmolStr::new_static("individualRole"),
5181                LexUserType::String(LexString {
5182                    ..Default::default()
5183                }),
5184            );
5185            map.insert(
5186                SmolStr::new_static("itchIoId"),
5187                LexUserType::Object(LexObject {
5188                    required: Some(vec![
5189                        SmolStr::new_static("developer"),
5190                        SmolStr::new_static("game"),
5191                    ]),
5192                    properties: {
5193                        #[allow(unused_mut)]
5194                        let mut map = BTreeMap::new();
5195                        map.insert(
5196                            SmolStr::new_static("developer"),
5197                            LexObjectProperty::String(LexString {
5198                                ..Default::default()
5199                            }),
5200                        );
5201                        map.insert(
5202                            SmolStr::new_static("game"),
5203                            LexObjectProperty::String(LexString {
5204                                ..Default::default()
5205                            }),
5206                        );
5207                        map
5208                    },
5209                    ..Default::default()
5210                }),
5211            );
5212            map.insert(
5213                SmolStr::new_static("languageSupport"),
5214                LexUserType::Object(LexObject {
5215                    required: Some(vec![SmolStr::new_static("language")]),
5216                    properties: {
5217                        #[allow(unused_mut)]
5218                        let mut map = BTreeMap::new();
5219                        map.insert(
5220                            SmolStr::new_static("audio"),
5221                            LexObjectProperty::Boolean(LexBoolean {
5222                                ..Default::default()
5223                            }),
5224                        );
5225                        map.insert(
5226                            SmolStr::new_static("interface"),
5227                            LexObjectProperty::Boolean(LexBoolean {
5228                                ..Default::default()
5229                            }),
5230                        );
5231                        map.insert(
5232                            SmolStr::new_static("language"),
5233                            LexObjectProperty::String(LexString {
5234                                ..Default::default()
5235                            }),
5236                        );
5237                        map.insert(
5238                            SmolStr::new_static("subtitles"),
5239                            LexObjectProperty::Boolean(LexBoolean {
5240                                ..Default::default()
5241                            }),
5242                        );
5243                        map
5244                    },
5245                    ..Default::default()
5246                }),
5247            );
5248            map.insert(
5249                SmolStr::new_static("mediaItem"),
5250                LexUserType::Object(LexObject {
5251                    properties: {
5252                        #[allow(unused_mut)]
5253                        let mut map = BTreeMap::new();
5254                        map.insert(
5255                            SmolStr::new_static("blob"),
5256                            LexObjectProperty::Blob(LexBlob {
5257                                ..Default::default()
5258                            }),
5259                        );
5260                        map.insert(
5261                            SmolStr::new_static("description"),
5262                            LexObjectProperty::String(LexString {
5263                                ..Default::default()
5264                            }),
5265                        );
5266                        map.insert(
5267                            SmolStr::new_static("height"),
5268                            LexObjectProperty::Integer(LexInteger {
5269                                ..Default::default()
5270                            }),
5271                        );
5272                        map.insert(
5273                            SmolStr::new_static("locale"),
5274                            LexObjectProperty::String(LexString {
5275                                ..Default::default()
5276                            }),
5277                        );
5278                        map.insert(
5279                            SmolStr::new_static("mediaType"),
5280                            LexObjectProperty::String(LexString {
5281                                ..Default::default()
5282                            }),
5283                        );
5284                        map.insert(
5285                            SmolStr::new_static("title"),
5286                            LexObjectProperty::String(LexString {
5287                                ..Default::default()
5288                            }),
5289                        );
5290                        map.insert(
5291                            SmolStr::new_static("width"),
5292                            LexObjectProperty::Integer(LexInteger {
5293                                ..Default::default()
5294                            }),
5295                        );
5296                        map
5297                    },
5298                    ..Default::default()
5299                }),
5300            );
5301            map.insert(
5302                SmolStr::new_static("mode"),
5303                LexUserType::String(LexString {
5304                    ..Default::default()
5305                }),
5306            );
5307            map.insert(
5308                SmolStr::new_static("multiplayerMode"),
5309                LexUserType::Object(LexObject {
5310                    properties: {
5311                        #[allow(unused_mut)]
5312                        let mut map = BTreeMap::new();
5313                        map.insert(
5314                            SmolStr::new_static("hasCampaignCoop"),
5315                            LexObjectProperty::Boolean(LexBoolean {
5316                                ..Default::default()
5317                            }),
5318                        );
5319                        map.insert(
5320                            SmolStr::new_static("hasDropIn"),
5321                            LexObjectProperty::Boolean(LexBoolean {
5322                                ..Default::default()
5323                            }),
5324                        );
5325                        map.insert(
5326                            SmolStr::new_static("hasLanCoop"),
5327                            LexObjectProperty::Boolean(LexBoolean {
5328                                ..Default::default()
5329                            }),
5330                        );
5331                        map.insert(
5332                            SmolStr::new_static("hasSplitscreen"),
5333                            LexObjectProperty::Boolean(LexBoolean {
5334                                ..Default::default()
5335                            }),
5336                        );
5337                        map.insert(
5338                            SmolStr::new_static("hasSplitscreenOnline"),
5339                            LexObjectProperty::Boolean(LexBoolean {
5340                                ..Default::default()
5341                            }),
5342                        );
5343                        map.insert(
5344                            SmolStr::new_static("offlineCoopMax"),
5345                            LexObjectProperty::Integer(LexInteger {
5346                                ..Default::default()
5347                            }),
5348                        );
5349                        map.insert(
5350                            SmolStr::new_static("offlineMax"),
5351                            LexObjectProperty::Integer(LexInteger {
5352                                ..Default::default()
5353                            }),
5354                        );
5355                        map.insert(
5356                            SmolStr::new_static("onlineCoopMax"),
5357                            LexObjectProperty::Integer(LexInteger {
5358                                ..Default::default()
5359                            }),
5360                        );
5361                        map.insert(
5362                            SmolStr::new_static("onlineMax"),
5363                            LexObjectProperty::Integer(LexInteger {
5364                                ..Default::default()
5365                            }),
5366                        );
5367                        map.insert(
5368                            SmolStr::new_static("platform"),
5369                            LexObjectProperty::String(LexString {
5370                                ..Default::default()
5371                            }),
5372                        );
5373                        map
5374                    },
5375                    ..Default::default()
5376                }),
5377            );
5378            map.insert(
5379                SmolStr::new_static("orgCreditView"),
5380                LexUserType::Object(LexObject {
5381                    required: Some(vec![
5382                        SmolStr::new_static("uri"),
5383                        SmolStr::new_static("roles"),
5384                    ]),
5385                    properties: {
5386                        #[allow(unused_mut)]
5387                        let mut map = BTreeMap::new();
5388                        map.insert(
5389                            SmolStr::new_static("displayName"),
5390                            LexObjectProperty::String(LexString {
5391                                max_length: Some(640usize),
5392                                ..Default::default()
5393                            }),
5394                        );
5395                        map.insert(
5396                            SmolStr::new_static("orgUri"),
5397                            LexObjectProperty::String(LexString {
5398                                format: Some(LexStringFormat::AtUri),
5399                                ..Default::default()
5400                            }),
5401                        );
5402                        map.insert(
5403                            SmolStr::new_static("roles"),
5404                            LexObjectProperty::Array(LexArray {
5405                                items: LexArrayItem::Ref(LexRef {
5406                                    r#ref: CowStr::new_static(
5407                                        "games.gamesgamesgamesgames.defs#companyRole",
5408                                    ),
5409                                    ..Default::default()
5410                                }),
5411                                ..Default::default()
5412                            }),
5413                        );
5414                        map.insert(
5415                            SmolStr::new_static("uri"),
5416                            LexObjectProperty::String(LexString {
5417                                format: Some(LexStringFormat::AtUri),
5418                                ..Default::default()
5419                            }),
5420                        );
5421                        map
5422                    },
5423                    ..Default::default()
5424                }),
5425            );
5426            map.insert(
5427                SmolStr::new_static("orgProfileDetailView"),
5428                LexUserType::Object(LexObject {
5429                    required: Some(vec![SmolStr::new_static("uri"), SmolStr::new_static("did")]),
5430                    properties: {
5431                        #[allow(unused_mut)]
5432                        let mut map = BTreeMap::new();
5433                        map.insert(
5434                            SmolStr::new_static("avatar"),
5435                            LexObjectProperty::Blob(LexBlob {
5436                                ..Default::default()
5437                            }),
5438                        );
5439                        map.insert(
5440                            SmolStr::new_static("country"),
5441                            LexObjectProperty::String(LexString {
5442                                ..Default::default()
5443                            }),
5444                        );
5445                        map.insert(
5446                            SmolStr::new_static("createdAt"),
5447                            LexObjectProperty::String(LexString {
5448                                format: Some(LexStringFormat::Datetime),
5449                                ..Default::default()
5450                            }),
5451                        );
5452                        map.insert(
5453                            SmolStr::new_static("description"),
5454                            LexObjectProperty::String(LexString {
5455                                max_length: Some(3000usize),
5456                                ..Default::default()
5457                            }),
5458                        );
5459                        map.insert(
5460                            SmolStr::new_static("descriptionFacets"),
5461                            LexObjectProperty::Array(LexArray {
5462                                items: LexArrayItem::Ref(LexRef {
5463                                    r#ref: CowStr::new_static("app.bsky.richtext.facet"),
5464                                    ..Default::default()
5465                                }),
5466                                ..Default::default()
5467                            }),
5468                        );
5469                        map.insert(
5470                            SmolStr::new_static("did"),
5471                            LexObjectProperty::String(LexString {
5472                                format: Some(LexStringFormat::Did),
5473                                ..Default::default()
5474                            }),
5475                        );
5476                        map.insert(
5477                            SmolStr::new_static("displayName"),
5478                            LexObjectProperty::String(LexString {
5479                                max_length: Some(640usize),
5480                                ..Default::default()
5481                            }),
5482                        );
5483                        map.insert(
5484                            SmolStr::new_static("foundedAt"),
5485                            LexObjectProperty::String(LexString {
5486                                format: Some(LexStringFormat::Datetime),
5487                                ..Default::default()
5488                            }),
5489                        );
5490                        map.insert(
5491                            SmolStr::new_static("media"),
5492                            LexObjectProperty::Array(LexArray {
5493                                items: LexArrayItem::Ref(LexRef {
5494                                    r#ref: CowStr::new_static(
5495                                        "games.gamesgamesgamesgames.defs#mediaItem",
5496                                    ),
5497                                    ..Default::default()
5498                                }),
5499                                ..Default::default()
5500                            }),
5501                        );
5502                        map.insert(
5503                            SmolStr::new_static("parent"),
5504                            LexObjectProperty::String(LexString {
5505                                format: Some(LexStringFormat::AtUri),
5506                                ..Default::default()
5507                            }),
5508                        );
5509                        map.insert(
5510                            SmolStr::new_static("status"),
5511                            LexObjectProperty::String(LexString {
5512                                ..Default::default()
5513                            }),
5514                        );
5515                        map.insert(
5516                            SmolStr::new_static("uri"),
5517                            LexObjectProperty::String(LexString {
5518                                format: Some(LexStringFormat::AtUri),
5519                                ..Default::default()
5520                            }),
5521                        );
5522                        map.insert(
5523                            SmolStr::new_static("websites"),
5524                            LexObjectProperty::Array(LexArray {
5525                                items: LexArrayItem::Ref(LexRef {
5526                                    r#ref: CowStr::new_static(
5527                                        "games.gamesgamesgamesgames.defs#website",
5528                                    ),
5529                                    ..Default::default()
5530                                }),
5531                                ..Default::default()
5532                            }),
5533                        );
5534                        map
5535                    },
5536                    ..Default::default()
5537                }),
5538            );
5539            map.insert(
5540                SmolStr::new_static("orgProfileSummaryView"),
5541                LexUserType::Object(LexObject {
5542                    required: Some(vec![SmolStr::new_static("uri"), SmolStr::new_static("did")]),
5543                    properties: {
5544                        #[allow(unused_mut)]
5545                        let mut map = BTreeMap::new();
5546                        map.insert(
5547                            SmolStr::new_static("avatar"),
5548                            LexObjectProperty::Blob(LexBlob {
5549                                ..Default::default()
5550                            }),
5551                        );
5552                        map.insert(
5553                            SmolStr::new_static("did"),
5554                            LexObjectProperty::String(LexString {
5555                                format: Some(LexStringFormat::Did),
5556                                ..Default::default()
5557                            }),
5558                        );
5559                        map.insert(
5560                            SmolStr::new_static("displayName"),
5561                            LexObjectProperty::String(LexString {
5562                                max_length: Some(640usize),
5563                                ..Default::default()
5564                            }),
5565                        );
5566                        map.insert(
5567                            SmolStr::new_static("uri"),
5568                            LexObjectProperty::String(LexString {
5569                                format: Some(LexStringFormat::AtUri),
5570                                ..Default::default()
5571                            }),
5572                        );
5573                        map
5574                    },
5575                    ..Default::default()
5576                }),
5577            );
5578            map.insert(
5579                SmolStr::new_static("platformCategory"),
5580                LexUserType::String(LexString {
5581                    ..Default::default()
5582                }),
5583            );
5584            map.insert(
5585                SmolStr::new_static("platformFeatures"),
5586                LexUserType::Object(LexObject {
5587                    description: Some(CowStr::new_static(
5588                        "Features supported by a game on a specific storefront/platform.",
5589                    )),
5590                    required: Some(vec![
5591                        SmolStr::new_static("platform"),
5592                        SmolStr::new_static("features"),
5593                    ]),
5594                    properties: {
5595                        #[allow(unused_mut)]
5596                        let mut map = BTreeMap::new();
5597                        map.insert(
5598                            SmolStr::new_static("features"),
5599                            LexObjectProperty::Array(LexArray {
5600                                items: LexArrayItem::String(LexString {
5601                                    ..Default::default()
5602                                }),
5603                                ..Default::default()
5604                            }),
5605                        );
5606                        map.insert(
5607                            SmolStr::new_static("platform"),
5608                            LexObjectProperty::String(LexString {
5609                                ..Default::default()
5610                            }),
5611                        );
5612                        map
5613                    },
5614                    ..Default::default()
5615                }),
5616            );
5617            map.insert(
5618                SmolStr::new_static("platformSummaryView"),
5619                LexUserType::Object(LexObject {
5620                    required: Some(vec![
5621                        SmolStr::new_static("uri"),
5622                        SmolStr::new_static("name"),
5623                    ]),
5624                    properties: {
5625                        #[allow(unused_mut)]
5626                        let mut map = BTreeMap::new();
5627                        map.insert(
5628                            SmolStr::new_static("abbreviation"),
5629                            LexObjectProperty::String(LexString {
5630                                ..Default::default()
5631                            }),
5632                        );
5633                        map.insert(
5634                            SmolStr::new_static("category"),
5635                            LexObjectProperty::Ref(LexRef {
5636                                r#ref: CowStr::new_static(
5637                                    "games.gamesgamesgamesgames.defs#platformCategory",
5638                                ),
5639                                ..Default::default()
5640                            }),
5641                        );
5642                        map.insert(
5643                            SmolStr::new_static("name"),
5644                            LexObjectProperty::String(LexString {
5645                                ..Default::default()
5646                            }),
5647                        );
5648                        map.insert(
5649                            SmolStr::new_static("slug"),
5650                            LexObjectProperty::String(LexString {
5651                                ..Default::default()
5652                            }),
5653                        );
5654                        map.insert(
5655                            SmolStr::new_static("uri"),
5656                            LexObjectProperty::String(LexString {
5657                                format: Some(LexStringFormat::AtUri),
5658                                ..Default::default()
5659                            }),
5660                        );
5661                        map
5662                    },
5663                    ..Default::default()
5664                }),
5665            );
5666            map.insert(
5667                SmolStr::new_static("platformVersion"),
5668                LexUserType::Object(LexObject {
5669                    required: Some(vec![SmolStr::new_static("name")]),
5670                    properties: {
5671                        #[allow(unused_mut)]
5672                        let mut map = BTreeMap::new();
5673                        map.insert(
5674                            SmolStr::new_static("connectivity"),
5675                            LexObjectProperty::String(LexString {
5676                                ..Default::default()
5677                            }),
5678                        );
5679                        map.insert(
5680                            SmolStr::new_static("cpu"),
5681                            LexObjectProperty::String(LexString {
5682                                ..Default::default()
5683                            }),
5684                        );
5685                        map.insert(
5686                            SmolStr::new_static("gpu"),
5687                            LexObjectProperty::String(LexString {
5688                                ..Default::default()
5689                            }),
5690                        );
5691                        map.insert(
5692                            SmolStr::new_static("maxResolution"),
5693                            LexObjectProperty::String(LexString {
5694                                ..Default::default()
5695                            }),
5696                        );
5697                        map.insert(
5698                            SmolStr::new_static("media"),
5699                            LexObjectProperty::Array(LexArray {
5700                                items: LexArrayItem::Ref(LexRef {
5701                                    r#ref: CowStr::new_static(
5702                                        "games.gamesgamesgamesgames.defs#mediaItem",
5703                                    ),
5704                                    ..Default::default()
5705                                }),
5706                                ..Default::default()
5707                            }),
5708                        );
5709                        map.insert(
5710                            SmolStr::new_static("memory"),
5711                            LexObjectProperty::String(LexString {
5712                                ..Default::default()
5713                            }),
5714                        );
5715                        map.insert(
5716                            SmolStr::new_static("name"),
5717                            LexObjectProperty::String(LexString {
5718                                ..Default::default()
5719                            }),
5720                        );
5721                        map.insert(
5722                            SmolStr::new_static("os"),
5723                            LexObjectProperty::String(LexString {
5724                                ..Default::default()
5725                            }),
5726                        );
5727                        map.insert(
5728                            SmolStr::new_static("output"),
5729                            LexObjectProperty::String(LexString {
5730                                ..Default::default()
5731                            }),
5732                        );
5733                        map.insert(
5734                            SmolStr::new_static("storage"),
5735                            LexObjectProperty::String(LexString {
5736                                ..Default::default()
5737                            }),
5738                        );
5739                        map.insert(
5740                            SmolStr::new_static("summary"),
5741                            LexObjectProperty::String(LexString {
5742                                ..Default::default()
5743                            }),
5744                        );
5745                        map
5746                    },
5747                    ..Default::default()
5748                }),
5749            );
5750            map.insert(
5751                SmolStr::new_static("playerPerspective"),
5752                LexUserType::String(LexString {
5753                    ..Default::default()
5754                }),
5755            );
5756            map.insert(
5757                SmolStr::new_static("profileSummaryView"),
5758                LexUserType::Object(LexObject {
5759                    required: Some(vec![
5760                        SmolStr::new_static("uri"),
5761                        SmolStr::new_static("did"),
5762                        SmolStr::new_static("profileType"),
5763                    ]),
5764                    properties: {
5765                        #[allow(unused_mut)]
5766                        let mut map = BTreeMap::new();
5767                        map.insert(
5768                            SmolStr::new_static("avatar"),
5769                            LexObjectProperty::Blob(LexBlob {
5770                                ..Default::default()
5771                            }),
5772                        );
5773                        map.insert(
5774                            SmolStr::new_static("did"),
5775                            LexObjectProperty::String(LexString {
5776                                format: Some(LexStringFormat::Did),
5777                                ..Default::default()
5778                            }),
5779                        );
5780                        map.insert(
5781                            SmolStr::new_static("displayName"),
5782                            LexObjectProperty::String(LexString {
5783                                max_length: Some(640usize),
5784                                ..Default::default()
5785                            }),
5786                        );
5787                        map.insert(
5788                            SmolStr::new_static("profileType"),
5789                            LexObjectProperty::String(LexString {
5790                                ..Default::default()
5791                            }),
5792                        );
5793                        map.insert(
5794                            SmolStr::new_static("uri"),
5795                            LexObjectProperty::String(LexString {
5796                                format: Some(LexStringFormat::AtUri),
5797                                ..Default::default()
5798                            }),
5799                        );
5800                        map
5801                    },
5802                    ..Default::default()
5803                }),
5804            );
5805            map.insert(
5806                SmolStr::new_static("release"),
5807                LexUserType::Object(LexObject {
5808                    properties: {
5809                        #[allow(unused_mut)]
5810                        let mut map = BTreeMap::new();
5811                        map.insert(
5812                            SmolStr::new_static("platform"),
5813                            LexObjectProperty::String(LexString {
5814                                description: Some(CowStr::new_static(
5815                                    "Free-text platform name, used when no platform record exists.",
5816                                )),
5817                                ..Default::default()
5818                            }),
5819                        );
5820                        map.insert(
5821                            SmolStr::new_static("platformUri"),
5822                            LexObjectProperty::String(LexString {
5823                                description: Some(CowStr::new_static(
5824                                    "AT URI of a platform record.",
5825                                )),
5826                                format: Some(LexStringFormat::AtUri),
5827                                ..Default::default()
5828                            }),
5829                        );
5830                        map.insert(
5831                            SmolStr::new_static("releaseDates"),
5832                            LexObjectProperty::Array(LexArray {
5833                                items: LexArrayItem::Ref(LexRef {
5834                                    r#ref: CowStr::new_static(
5835                                        "games.gamesgamesgamesgames.defs#releaseDate",
5836                                    ),
5837                                    ..Default::default()
5838                                }),
5839                                ..Default::default()
5840                            }),
5841                        );
5842                        map
5843                    },
5844                    ..Default::default()
5845                }),
5846            );
5847            map.insert(
5848                SmolStr::new_static("releaseDate"),
5849                LexUserType::Object(LexObject {
5850                    properties: {
5851                        #[allow(unused_mut)]
5852                        let mut map = BTreeMap::new();
5853                        map.insert(
5854                            SmolStr::new_static("region"),
5855                            LexObjectProperty::String(LexString {
5856                                ..Default::default()
5857                            }),
5858                        );
5859                        map.insert(
5860                            SmolStr::new_static("releasedAt"),
5861                            LexObjectProperty::String(LexString {
5862                                ..Default::default()
5863                            }),
5864                        );
5865                        map.insert(
5866                            SmolStr::new_static("releasedAtFormat"),
5867                            LexObjectProperty::String(LexString {
5868                                ..Default::default()
5869                            }),
5870                        );
5871                        map.insert(
5872                            SmolStr::new_static("status"),
5873                            LexObjectProperty::String(LexString {
5874                                ..Default::default()
5875                            }),
5876                        );
5877                        map
5878                    },
5879                    ..Default::default()
5880                }),
5881            );
5882            map.insert(
5883                SmolStr::new_static("signature"),
5884                LexUserType::Object(LexObject {
5885                    description: Some(CowStr::new_static("An inline attestation signature.")),
5886                    required: Some(vec![
5887                        SmolStr::new_static("key"),
5888                        SmolStr::new_static("signature"),
5889                    ]),
5890                    properties: {
5891                        #[allow(unused_mut)]
5892                        let mut map = BTreeMap::new();
5893                        map.insert(
5894                            SmolStr::new_static("key"),
5895                            LexObjectProperty::String(LexString {
5896                                description: Some(CowStr::new_static(
5897                                    "DID key reference (e.g., did:web:example.com#signing1).",
5898                                )),
5899                                ..Default::default()
5900                            }),
5901                        );
5902                        map.insert(
5903                            SmolStr::new_static("signature"),
5904                            LexObjectProperty::Bytes(LexBytes {
5905                                ..Default::default()
5906                            }),
5907                        );
5908                        map
5909                    },
5910                    ..Default::default()
5911                }),
5912            );
5913            map.insert(
5914                SmolStr::new_static("skeletonGameFeedItem"),
5915                LexUserType::Object(LexObject {
5916                    required: Some(vec![SmolStr::new_static("game")]),
5917                    properties: {
5918                        #[allow(unused_mut)]
5919                        let mut map = BTreeMap::new();
5920                        map.insert(
5921                            SmolStr::new_static("feedContext"),
5922                            LexObjectProperty::String(LexString {
5923                                max_length: Some(2000usize),
5924                                ..Default::default()
5925                            }),
5926                        );
5927                        map.insert(
5928                            SmolStr::new_static("game"),
5929                            LexObjectProperty::String(LexString {
5930                                format: Some(LexStringFormat::AtUri),
5931                                ..Default::default()
5932                            }),
5933                        );
5934                        map
5935                    },
5936                    ..Default::default()
5937                }),
5938            );
5939            map.insert(
5940                SmolStr::new_static("systemRequirements"),
5941                LexUserType::Object(LexObject {
5942                    description: Some(CowStr::new_static(
5943                        "System requirements for a game on a specific platform.",
5944                    )),
5945                    required: Some(vec![SmolStr::new_static("platform")]),
5946                    properties: {
5947                        #[allow(unused_mut)]
5948                        let mut map = BTreeMap::new();
5949                        map.insert(
5950                            SmolStr::new_static("minimum"),
5951                            LexObjectProperty::Ref(LexRef {
5952                                r#ref: CowStr::new_static("#systemSpec"),
5953                                ..Default::default()
5954                            }),
5955                        );
5956                        map.insert(
5957                            SmolStr::new_static("platform"),
5958                            LexObjectProperty::String(LexString {
5959                                ..Default::default()
5960                            }),
5961                        );
5962                        map.insert(
5963                            SmolStr::new_static("recommended"),
5964                            LexObjectProperty::Ref(LexRef {
5965                                r#ref: CowStr::new_static("#systemSpec"),
5966                                ..Default::default()
5967                            }),
5968                        );
5969                        map
5970                    },
5971                    ..Default::default()
5972                }),
5973            );
5974            map.insert(
5975                SmolStr::new_static("systemSpec"),
5976                LexUserType::Object(LexObject {
5977                    description: Some(CowStr::new_static(
5978                        "Hardware/software specification for a platform.",
5979                    )),
5980                    properties: {
5981                        #[allow(unused_mut)]
5982                        let mut map = BTreeMap::new();
5983                        map.insert(
5984                            SmolStr::new_static("additionalNotes"),
5985                            LexObjectProperty::String(LexString {
5986                                ..Default::default()
5987                            }),
5988                        );
5989                        map.insert(
5990                            SmolStr::new_static("directx"),
5991                            LexObjectProperty::String(LexString {
5992                                ..Default::default()
5993                            }),
5994                        );
5995                        map.insert(
5996                            SmolStr::new_static("graphics"),
5997                            LexObjectProperty::String(LexString {
5998                                ..Default::default()
5999                            }),
6000                        );
6001                        map.insert(
6002                            SmolStr::new_static("memory"),
6003                            LexObjectProperty::String(LexString {
6004                                ..Default::default()
6005                            }),
6006                        );
6007                        map.insert(
6008                            SmolStr::new_static("os"),
6009                            LexObjectProperty::String(LexString {
6010                                ..Default::default()
6011                            }),
6012                        );
6013                        map.insert(
6014                            SmolStr::new_static("processor"),
6015                            LexObjectProperty::String(LexString {
6016                                ..Default::default()
6017                            }),
6018                        );
6019                        map.insert(
6020                            SmolStr::new_static("soundCard"),
6021                            LexObjectProperty::String(LexString {
6022                                ..Default::default()
6023                            }),
6024                        );
6025                        map.insert(
6026                            SmolStr::new_static("storage"),
6027                            LexObjectProperty::String(LexString {
6028                                ..Default::default()
6029                            }),
6030                        );
6031                        map
6032                    },
6033                    ..Default::default()
6034                }),
6035            );
6036            map.insert(
6037                SmolStr::new_static("theme"),
6038                LexUserType::String(LexString {
6039                    ..Default::default()
6040                }),
6041            );
6042            map.insert(
6043                SmolStr::new_static("timeToBeat"),
6044                LexUserType::Object(LexObject {
6045                    properties: {
6046                        #[allow(unused_mut)]
6047                        let mut map = BTreeMap::new();
6048                        map.insert(
6049                            SmolStr::new_static("completely"),
6050                            LexObjectProperty::Integer(LexInteger {
6051                                ..Default::default()
6052                            }),
6053                        );
6054                        map.insert(
6055                            SmolStr::new_static("hastily"),
6056                            LexObjectProperty::Integer(LexInteger {
6057                                ..Default::default()
6058                            }),
6059                        );
6060                        map.insert(
6061                            SmolStr::new_static("normally"),
6062                            LexObjectProperty::Integer(LexInteger {
6063                                ..Default::default()
6064                            }),
6065                        );
6066                        map
6067                    },
6068                    ..Default::default()
6069                }),
6070            );
6071            map.insert(
6072                SmolStr::new_static("viewerState"),
6073                LexUserType::Object(LexObject {
6074                    properties: {
6075                        #[allow(unused_mut)]
6076                        let mut map = BTreeMap::new();
6077                        map.insert(
6078                            SmolStr::new_static("like"),
6079                            LexObjectProperty::String(LexString {
6080                                format: Some(LexStringFormat::AtUri),
6081                                ..Default::default()
6082                            }),
6083                        );
6084                        map
6085                    },
6086                    ..Default::default()
6087                }),
6088            );
6089            map.insert(
6090                SmolStr::new_static("website"),
6091                LexUserType::Object(LexObject {
6092                    required: Some(vec![SmolStr::new_static("url")]),
6093                    properties: {
6094                        #[allow(unused_mut)]
6095                        let mut map = BTreeMap::new();
6096                        map.insert(
6097                            SmolStr::new_static("type"),
6098                            LexObjectProperty::String(LexString {
6099                                ..Default::default()
6100                            }),
6101                        );
6102                        map.insert(
6103                            SmolStr::new_static("url"),
6104                            LexObjectProperty::String(LexString {
6105                                format: Some(LexStringFormat::Uri),
6106                                ..Default::default()
6107                            }),
6108                        );
6109                        map
6110                    },
6111                    ..Default::default()
6112                }),
6113            );
6114            map
6115        },
6116        ..Default::default()
6117    }
6118}
6119
6120pub mod activity_list_view_state {
6121
6122    pub use crate::builder_types::{IsSet, IsUnset, Set, Unset};
6123    #[allow(unused)]
6124    use ::core::marker::PhantomData;
6125    mod sealed {
6126        pub trait Sealed {}
6127    }
6128    /// State trait tracking which required fields have been set
6129    pub trait State: sealed::Sealed {
6130        type CreatedAt;
6131        type Name;
6132        type Uri;
6133    }
6134    /// Empty state - all required fields are unset
6135    pub struct Empty(());
6136    impl sealed::Sealed for Empty {}
6137    impl State for Empty {
6138        type CreatedAt = Unset;
6139        type Name = Unset;
6140        type Uri = Unset;
6141    }
6142    ///State transition - sets the `created_at` field to Set
6143    pub struct SetCreatedAt<St: State = Empty>(PhantomData<fn() -> St>);
6144    impl<St: State> sealed::Sealed for SetCreatedAt<St> {}
6145    impl<St: State> State for SetCreatedAt<St> {
6146        type CreatedAt = Set<members::created_at>;
6147        type Name = St::Name;
6148        type Uri = St::Uri;
6149    }
6150    ///State transition - sets the `name` field to Set
6151    pub struct SetName<St: State = Empty>(PhantomData<fn() -> St>);
6152    impl<St: State> sealed::Sealed for SetName<St> {}
6153    impl<St: State> State for SetName<St> {
6154        type CreatedAt = St::CreatedAt;
6155        type Name = Set<members::name>;
6156        type Uri = St::Uri;
6157    }
6158    ///State transition - sets the `uri` field to Set
6159    pub struct SetUri<St: State = Empty>(PhantomData<fn() -> St>);
6160    impl<St: State> sealed::Sealed for SetUri<St> {}
6161    impl<St: State> State for SetUri<St> {
6162        type CreatedAt = St::CreatedAt;
6163        type Name = St::Name;
6164        type Uri = Set<members::uri>;
6165    }
6166    /// Marker types for field names
6167    #[allow(non_camel_case_types)]
6168    pub mod members {
6169        ///Marker type for the `created_at` field
6170        pub struct created_at(());
6171        ///Marker type for the `name` field
6172        pub struct name(());
6173        ///Marker type for the `uri` field
6174        pub struct uri(());
6175    }
6176}
6177
6178/// Builder for constructing an instance of this type.
6179pub struct ActivityListViewBuilder<St: activity_list_view_state::State, S: BosStr = DefaultStr> {
6180    _state: PhantomData<fn() -> St>,
6181    _fields: (Option<Datetime>, Option<S>, Option<AtUri<S>>),
6182    _type: PhantomData<fn() -> S>,
6183}
6184
6185impl ActivityListView<DefaultStr> {
6186    /// Create a new builder for this type, using the default string type (DefaultStr = SmolStr) if needed
6187    pub fn new() -> ActivityListViewBuilder<activity_list_view_state::Empty, DefaultStr> {
6188        ActivityListViewBuilder::new()
6189    }
6190}
6191
6192impl<S: BosStr> ActivityListView<S> {
6193    /// Create a new builder for this type
6194    pub fn builder() -> ActivityListViewBuilder<activity_list_view_state::Empty, S> {
6195        ActivityListViewBuilder::builder()
6196    }
6197}
6198
6199impl ActivityListViewBuilder<activity_list_view_state::Empty, DefaultStr> {
6200    /// Create a new builder with all fields unset, using the default string type, if needed
6201    pub fn new() -> Self {
6202        ActivityListViewBuilder {
6203            _state: PhantomData,
6204            _fields: (None, None, None),
6205            _type: PhantomData,
6206        }
6207    }
6208}
6209
6210impl<S: BosStr> ActivityListViewBuilder<activity_list_view_state::Empty, S> {
6211    /// Create a new builder with all fields unset
6212    pub fn builder() -> Self {
6213        ActivityListViewBuilder {
6214            _state: PhantomData,
6215            _fields: (None, None, None),
6216            _type: PhantomData,
6217        }
6218    }
6219}
6220
6221impl<St, S: BosStr> ActivityListViewBuilder<St, S>
6222where
6223    St: activity_list_view_state::State,
6224    St::CreatedAt: activity_list_view_state::IsUnset,
6225{
6226    /// Set the `createdAt` field (required)
6227    pub fn created_at(
6228        mut self,
6229        value: impl Into<Datetime>,
6230    ) -> ActivityListViewBuilder<activity_list_view_state::SetCreatedAt<St>, S> {
6231        self._fields.0 = Option::Some(value.into());
6232        ActivityListViewBuilder {
6233            _state: PhantomData,
6234            _fields: self._fields,
6235            _type: PhantomData,
6236        }
6237    }
6238}
6239
6240impl<St, S: BosStr> ActivityListViewBuilder<St, S>
6241where
6242    St: activity_list_view_state::State,
6243    St::Name: activity_list_view_state::IsUnset,
6244{
6245    /// Set the `name` field (required)
6246    pub fn name(
6247        mut self,
6248        value: impl Into<S>,
6249    ) -> ActivityListViewBuilder<activity_list_view_state::SetName<St>, S> {
6250        self._fields.1 = Option::Some(value.into());
6251        ActivityListViewBuilder {
6252            _state: PhantomData,
6253            _fields: self._fields,
6254            _type: PhantomData,
6255        }
6256    }
6257}
6258
6259impl<St, S: BosStr> ActivityListViewBuilder<St, S>
6260where
6261    St: activity_list_view_state::State,
6262    St::Uri: activity_list_view_state::IsUnset,
6263{
6264    /// Set the `uri` field (required)
6265    pub fn uri(
6266        mut self,
6267        value: impl Into<AtUri<S>>,
6268    ) -> ActivityListViewBuilder<activity_list_view_state::SetUri<St>, S> {
6269        self._fields.2 = Option::Some(value.into());
6270        ActivityListViewBuilder {
6271            _state: PhantomData,
6272            _fields: self._fields,
6273            _type: PhantomData,
6274        }
6275    }
6276}
6277
6278impl<St, S: BosStr> ActivityListViewBuilder<St, S>
6279where
6280    St: activity_list_view_state::State,
6281    St::CreatedAt: activity_list_view_state::IsSet,
6282    St::Name: activity_list_view_state::IsSet,
6283    St::Uri: activity_list_view_state::IsSet,
6284{
6285    /// Build the final struct.
6286    pub fn build(self) -> ActivityListView<S> {
6287        ActivityListView {
6288            created_at: self._fields.0.unwrap(),
6289            name: self._fields.1.unwrap(),
6290            uri: self._fields.2.unwrap(),
6291            extra_data: Default::default(),
6292        }
6293    }
6294    /// Build the final struct with custom extra_data.
6295    pub fn build_with_data(self, extra_data: BTreeMap<SmolStr, Data<S>>) -> ActivityListView<S> {
6296        ActivityListView {
6297            created_at: self._fields.0.unwrap(),
6298            name: self._fields.1.unwrap(),
6299            uri: self._fields.2.unwrap(),
6300            extra_data: Some(extra_data),
6301        }
6302    }
6303}
6304
6305pub mod activity_review_view_state {
6306
6307    pub use crate::builder_types::{IsSet, IsUnset, Set, Unset};
6308    #[allow(unused)]
6309    use ::core::marker::PhantomData;
6310    mod sealed {
6311        pub trait Sealed {}
6312    }
6313    /// State trait tracking which required fields have been set
6314    pub trait State: sealed::Sealed {
6315        type CreatedAt;
6316        type Rating;
6317        type Uri;
6318    }
6319    /// Empty state - all required fields are unset
6320    pub struct Empty(());
6321    impl sealed::Sealed for Empty {}
6322    impl State for Empty {
6323        type CreatedAt = Unset;
6324        type Rating = Unset;
6325        type Uri = Unset;
6326    }
6327    ///State transition - sets the `created_at` field to Set
6328    pub struct SetCreatedAt<St: State = Empty>(PhantomData<fn() -> St>);
6329    impl<St: State> sealed::Sealed for SetCreatedAt<St> {}
6330    impl<St: State> State for SetCreatedAt<St> {
6331        type CreatedAt = Set<members::created_at>;
6332        type Rating = St::Rating;
6333        type Uri = St::Uri;
6334    }
6335    ///State transition - sets the `rating` field to Set
6336    pub struct SetRating<St: State = Empty>(PhantomData<fn() -> St>);
6337    impl<St: State> sealed::Sealed for SetRating<St> {}
6338    impl<St: State> State for SetRating<St> {
6339        type CreatedAt = St::CreatedAt;
6340        type Rating = Set<members::rating>;
6341        type Uri = St::Uri;
6342    }
6343    ///State transition - sets the `uri` field to Set
6344    pub struct SetUri<St: State = Empty>(PhantomData<fn() -> St>);
6345    impl<St: State> sealed::Sealed for SetUri<St> {}
6346    impl<St: State> State for SetUri<St> {
6347        type CreatedAt = St::CreatedAt;
6348        type Rating = St::Rating;
6349        type Uri = Set<members::uri>;
6350    }
6351    /// Marker types for field names
6352    #[allow(non_camel_case_types)]
6353    pub mod members {
6354        ///Marker type for the `created_at` field
6355        pub struct created_at(());
6356        ///Marker type for the `rating` field
6357        pub struct rating(());
6358        ///Marker type for the `uri` field
6359        pub struct uri(());
6360    }
6361}
6362
6363/// Builder for constructing an instance of this type.
6364pub struct ActivityReviewViewBuilder<St: activity_review_view_state::State, S: BosStr = DefaultStr>
6365{
6366    _state: PhantomData<fn() -> St>,
6367    _fields: (
6368        Option<bool>,
6369        Option<Datetime>,
6370        Option<i64>,
6371        Option<Vec<S>>,
6372        Option<S>,
6373        Option<S>,
6374        Option<AtUri<S>>,
6375    ),
6376    _type: PhantomData<fn() -> S>,
6377}
6378
6379impl ActivityReviewView<DefaultStr> {
6380    /// Create a new builder for this type, using the default string type (DefaultStr = SmolStr) if needed
6381    pub fn new() -> ActivityReviewViewBuilder<activity_review_view_state::Empty, DefaultStr> {
6382        ActivityReviewViewBuilder::new()
6383    }
6384}
6385
6386impl<S: BosStr> ActivityReviewView<S> {
6387    /// Create a new builder for this type
6388    pub fn builder() -> ActivityReviewViewBuilder<activity_review_view_state::Empty, S> {
6389        ActivityReviewViewBuilder::builder()
6390    }
6391}
6392
6393impl ActivityReviewViewBuilder<activity_review_view_state::Empty, DefaultStr> {
6394    /// Create a new builder with all fields unset, using the default string type, if needed
6395    pub fn new() -> Self {
6396        ActivityReviewViewBuilder {
6397            _state: PhantomData,
6398            _fields: (None, None, None, None, None, None, None),
6399            _type: PhantomData,
6400        }
6401    }
6402}
6403
6404impl<S: BosStr> ActivityReviewViewBuilder<activity_review_view_state::Empty, S> {
6405    /// Create a new builder with all fields unset
6406    pub fn builder() -> Self {
6407        ActivityReviewViewBuilder {
6408            _state: PhantomData,
6409            _fields: (None, None, None, None, None, None, None),
6410            _type: PhantomData,
6411        }
6412    }
6413}
6414
6415impl<St: activity_review_view_state::State, S: BosStr> ActivityReviewViewBuilder<St, S> {
6416    /// Set the `containsSpoilers` field (optional)
6417    pub fn contains_spoilers(mut self, value: impl Into<Option<bool>>) -> Self {
6418        self._fields.0 = value.into();
6419        self
6420    }
6421    /// Set the `containsSpoilers` field to an Option value (optional)
6422    pub fn maybe_contains_spoilers(mut self, value: Option<bool>) -> Self {
6423        self._fields.0 = value;
6424        self
6425    }
6426}
6427
6428impl<St, S: BosStr> ActivityReviewViewBuilder<St, S>
6429where
6430    St: activity_review_view_state::State,
6431    St::CreatedAt: activity_review_view_state::IsUnset,
6432{
6433    /// Set the `createdAt` field (required)
6434    pub fn created_at(
6435        mut self,
6436        value: impl Into<Datetime>,
6437    ) -> ActivityReviewViewBuilder<activity_review_view_state::SetCreatedAt<St>, S> {
6438        self._fields.1 = Option::Some(value.into());
6439        ActivityReviewViewBuilder {
6440            _state: PhantomData,
6441            _fields: self._fields,
6442            _type: PhantomData,
6443        }
6444    }
6445}
6446
6447impl<St, S: BosStr> ActivityReviewViewBuilder<St, S>
6448where
6449    St: activity_review_view_state::State,
6450    St::Rating: activity_review_view_state::IsUnset,
6451{
6452    /// Set the `rating` field (required)
6453    pub fn rating(
6454        mut self,
6455        value: impl Into<i64>,
6456    ) -> ActivityReviewViewBuilder<activity_review_view_state::SetRating<St>, S> {
6457        self._fields.2 = Option::Some(value.into());
6458        ActivityReviewViewBuilder {
6459            _state: PhantomData,
6460            _fields: self._fields,
6461            _type: PhantomData,
6462        }
6463    }
6464}
6465
6466impl<St: activity_review_view_state::State, S: BosStr> ActivityReviewViewBuilder<St, S> {
6467    /// Set the `tags` field (optional)
6468    pub fn tags(mut self, value: impl Into<Option<Vec<S>>>) -> Self {
6469        self._fields.3 = value.into();
6470        self
6471    }
6472    /// Set the `tags` field to an Option value (optional)
6473    pub fn maybe_tags(mut self, value: Option<Vec<S>>) -> Self {
6474        self._fields.3 = value;
6475        self
6476    }
6477}
6478
6479impl<St: activity_review_view_state::State, S: BosStr> ActivityReviewViewBuilder<St, S> {
6480    /// Set the `text` field (optional)
6481    pub fn text(mut self, value: impl Into<Option<S>>) -> Self {
6482        self._fields.4 = value.into();
6483        self
6484    }
6485    /// Set the `text` field to an Option value (optional)
6486    pub fn maybe_text(mut self, value: Option<S>) -> Self {
6487        self._fields.4 = value;
6488        self
6489    }
6490}
6491
6492impl<St: activity_review_view_state::State, S: BosStr> ActivityReviewViewBuilder<St, S> {
6493    /// Set the `title` field (optional)
6494    pub fn title(mut self, value: impl Into<Option<S>>) -> Self {
6495        self._fields.5 = value.into();
6496        self
6497    }
6498    /// Set the `title` field to an Option value (optional)
6499    pub fn maybe_title(mut self, value: Option<S>) -> Self {
6500        self._fields.5 = value;
6501        self
6502    }
6503}
6504
6505impl<St, S: BosStr> ActivityReviewViewBuilder<St, S>
6506where
6507    St: activity_review_view_state::State,
6508    St::Uri: activity_review_view_state::IsUnset,
6509{
6510    /// Set the `uri` field (required)
6511    pub fn uri(
6512        mut self,
6513        value: impl Into<AtUri<S>>,
6514    ) -> ActivityReviewViewBuilder<activity_review_view_state::SetUri<St>, S> {
6515        self._fields.6 = Option::Some(value.into());
6516        ActivityReviewViewBuilder {
6517            _state: PhantomData,
6518            _fields: self._fields,
6519            _type: PhantomData,
6520        }
6521    }
6522}
6523
6524impl<St, S: BosStr> ActivityReviewViewBuilder<St, S>
6525where
6526    St: activity_review_view_state::State,
6527    St::CreatedAt: activity_review_view_state::IsSet,
6528    St::Rating: activity_review_view_state::IsSet,
6529    St::Uri: activity_review_view_state::IsSet,
6530{
6531    /// Build the final struct.
6532    pub fn build(self) -> ActivityReviewView<S> {
6533        ActivityReviewView {
6534            contains_spoilers: self._fields.0,
6535            created_at: self._fields.1.unwrap(),
6536            rating: self._fields.2.unwrap(),
6537            tags: self._fields.3,
6538            text: self._fields.4,
6539            title: self._fields.5,
6540            uri: self._fields.6.unwrap(),
6541            extra_data: Default::default(),
6542        }
6543    }
6544    /// Build the final struct with custom extra_data.
6545    pub fn build_with_data(self, extra_data: BTreeMap<SmolStr, Data<S>>) -> ActivityReviewView<S> {
6546        ActivityReviewView {
6547            contains_spoilers: self._fields.0,
6548            created_at: self._fields.1.unwrap(),
6549            rating: self._fields.2.unwrap(),
6550            tags: self._fields.3,
6551            text: self._fields.4,
6552            title: self._fields.5,
6553            uri: self._fields.6.unwrap(),
6554            extra_data: Some(extra_data),
6555        }
6556    }
6557}
6558
6559pub mod actor_credit_view_state {
6560
6561    pub use crate::builder_types::{IsSet, IsUnset, Set, Unset};
6562    #[allow(unused)]
6563    use ::core::marker::PhantomData;
6564    mod sealed {
6565        pub trait Sealed {}
6566    }
6567    /// State trait tracking which required fields have been set
6568    pub trait State: sealed::Sealed {
6569        type Credits;
6570        type Uri;
6571    }
6572    /// Empty state - all required fields are unset
6573    pub struct Empty(());
6574    impl sealed::Sealed for Empty {}
6575    impl State for Empty {
6576        type Credits = Unset;
6577        type Uri = Unset;
6578    }
6579    ///State transition - sets the `credits` field to Set
6580    pub struct SetCredits<St: State = Empty>(PhantomData<fn() -> St>);
6581    impl<St: State> sealed::Sealed for SetCredits<St> {}
6582    impl<St: State> State for SetCredits<St> {
6583        type Credits = Set<members::credits>;
6584        type Uri = St::Uri;
6585    }
6586    ///State transition - sets the `uri` field to Set
6587    pub struct SetUri<St: State = Empty>(PhantomData<fn() -> St>);
6588    impl<St: State> sealed::Sealed for SetUri<St> {}
6589    impl<St: State> State for SetUri<St> {
6590        type Credits = St::Credits;
6591        type Uri = Set<members::uri>;
6592    }
6593    /// Marker types for field names
6594    #[allow(non_camel_case_types)]
6595    pub mod members {
6596        ///Marker type for the `credits` field
6597        pub struct credits(());
6598        ///Marker type for the `uri` field
6599        pub struct uri(());
6600    }
6601}
6602
6603/// Builder for constructing an instance of this type.
6604pub struct ActorCreditViewBuilder<St: actor_credit_view_state::State, S: BosStr = DefaultStr> {
6605    _state: PhantomData<fn() -> St>,
6606    _fields: (
6607        Option<AtUri<S>>,
6608        Option<Vec<games_gamesgamesgamesgames::CreditEntry<S>>>,
6609        Option<S>,
6610        Option<AtUri<S>>,
6611    ),
6612    _type: PhantomData<fn() -> S>,
6613}
6614
6615impl ActorCreditView<DefaultStr> {
6616    /// Create a new builder for this type, using the default string type (DefaultStr = SmolStr) if needed
6617    pub fn new() -> ActorCreditViewBuilder<actor_credit_view_state::Empty, DefaultStr> {
6618        ActorCreditViewBuilder::new()
6619    }
6620}
6621
6622impl<S: BosStr> ActorCreditView<S> {
6623    /// Create a new builder for this type
6624    pub fn builder() -> ActorCreditViewBuilder<actor_credit_view_state::Empty, S> {
6625        ActorCreditViewBuilder::builder()
6626    }
6627}
6628
6629impl ActorCreditViewBuilder<actor_credit_view_state::Empty, DefaultStr> {
6630    /// Create a new builder with all fields unset, using the default string type, if needed
6631    pub fn new() -> Self {
6632        ActorCreditViewBuilder {
6633            _state: PhantomData,
6634            _fields: (None, None, None, None),
6635            _type: PhantomData,
6636        }
6637    }
6638}
6639
6640impl<S: BosStr> ActorCreditViewBuilder<actor_credit_view_state::Empty, S> {
6641    /// Create a new builder with all fields unset
6642    pub fn builder() -> Self {
6643        ActorCreditViewBuilder {
6644            _state: PhantomData,
6645            _fields: (None, None, None, None),
6646            _type: PhantomData,
6647        }
6648    }
6649}
6650
6651impl<St: actor_credit_view_state::State, S: BosStr> ActorCreditViewBuilder<St, S> {
6652    /// Set the `actorUri` field (optional)
6653    pub fn actor_uri(mut self, value: impl Into<Option<AtUri<S>>>) -> Self {
6654        self._fields.0 = value.into();
6655        self
6656    }
6657    /// Set the `actorUri` field to an Option value (optional)
6658    pub fn maybe_actor_uri(mut self, value: Option<AtUri<S>>) -> Self {
6659        self._fields.0 = value;
6660        self
6661    }
6662}
6663
6664impl<St, S: BosStr> ActorCreditViewBuilder<St, S>
6665where
6666    St: actor_credit_view_state::State,
6667    St::Credits: actor_credit_view_state::IsUnset,
6668{
6669    /// Set the `credits` field (required)
6670    pub fn credits(
6671        mut self,
6672        value: impl Into<Vec<games_gamesgamesgamesgames::CreditEntry<S>>>,
6673    ) -> ActorCreditViewBuilder<actor_credit_view_state::SetCredits<St>, S> {
6674        self._fields.1 = Option::Some(value.into());
6675        ActorCreditViewBuilder {
6676            _state: PhantomData,
6677            _fields: self._fields,
6678            _type: PhantomData,
6679        }
6680    }
6681}
6682
6683impl<St: actor_credit_view_state::State, S: BosStr> ActorCreditViewBuilder<St, S> {
6684    /// Set the `displayName` field (optional)
6685    pub fn display_name(mut self, value: impl Into<Option<S>>) -> Self {
6686        self._fields.2 = value.into();
6687        self
6688    }
6689    /// Set the `displayName` field to an Option value (optional)
6690    pub fn maybe_display_name(mut self, value: Option<S>) -> Self {
6691        self._fields.2 = value;
6692        self
6693    }
6694}
6695
6696impl<St, S: BosStr> ActorCreditViewBuilder<St, S>
6697where
6698    St: actor_credit_view_state::State,
6699    St::Uri: actor_credit_view_state::IsUnset,
6700{
6701    /// Set the `uri` field (required)
6702    pub fn uri(
6703        mut self,
6704        value: impl Into<AtUri<S>>,
6705    ) -> ActorCreditViewBuilder<actor_credit_view_state::SetUri<St>, S> {
6706        self._fields.3 = Option::Some(value.into());
6707        ActorCreditViewBuilder {
6708            _state: PhantomData,
6709            _fields: self._fields,
6710            _type: PhantomData,
6711        }
6712    }
6713}
6714
6715impl<St, S: BosStr> ActorCreditViewBuilder<St, S>
6716where
6717    St: actor_credit_view_state::State,
6718    St::Credits: actor_credit_view_state::IsSet,
6719    St::Uri: actor_credit_view_state::IsSet,
6720{
6721    /// Build the final struct.
6722    pub fn build(self) -> ActorCreditView<S> {
6723        ActorCreditView {
6724            actor_uri: self._fields.0,
6725            credits: self._fields.1.unwrap(),
6726            display_name: self._fields.2,
6727            uri: self._fields.3.unwrap(),
6728            extra_data: Default::default(),
6729        }
6730    }
6731    /// Build the final struct with custom extra_data.
6732    pub fn build_with_data(self, extra_data: BTreeMap<SmolStr, Data<S>>) -> ActorCreditView<S> {
6733        ActorCreditView {
6734            actor_uri: self._fields.0,
6735            credits: self._fields.1.unwrap(),
6736            display_name: self._fields.2,
6737            uri: self._fields.3.unwrap(),
6738            extra_data: Some(extra_data),
6739        }
6740    }
6741}
6742
6743pub mod actor_profile_detail_view_state {
6744
6745    pub use crate::builder_types::{IsSet, IsUnset, Set, Unset};
6746    #[allow(unused)]
6747    use ::core::marker::PhantomData;
6748    mod sealed {
6749        pub trait Sealed {}
6750    }
6751    /// State trait tracking which required fields have been set
6752    pub trait State: sealed::Sealed {
6753        type Did;
6754        type Uri;
6755    }
6756    /// Empty state - all required fields are unset
6757    pub struct Empty(());
6758    impl sealed::Sealed for Empty {}
6759    impl State for Empty {
6760        type Did = Unset;
6761        type Uri = Unset;
6762    }
6763    ///State transition - sets the `did` field to Set
6764    pub struct SetDid<St: State = Empty>(PhantomData<fn() -> St>);
6765    impl<St: State> sealed::Sealed for SetDid<St> {}
6766    impl<St: State> State for SetDid<St> {
6767        type Did = Set<members::did>;
6768        type Uri = St::Uri;
6769    }
6770    ///State transition - sets the `uri` field to Set
6771    pub struct SetUri<St: State = Empty>(PhantomData<fn() -> St>);
6772    impl<St: State> sealed::Sealed for SetUri<St> {}
6773    impl<St: State> State for SetUri<St> {
6774        type Did = St::Did;
6775        type Uri = Set<members::uri>;
6776    }
6777    /// Marker types for field names
6778    #[allow(non_camel_case_types)]
6779    pub mod members {
6780        ///Marker type for the `did` field
6781        pub struct did(());
6782        ///Marker type for the `uri` field
6783        pub struct uri(());
6784    }
6785}
6786
6787/// Builder for constructing an instance of this type.
6788pub struct ActorProfileDetailViewBuilder<
6789    St: actor_profile_detail_view_state::State,
6790    S: BosStr = DefaultStr,
6791> {
6792    _state: PhantomData<fn() -> St>,
6793    _fields: (
6794        Option<BlobRef<S>>,
6795        Option<Datetime>,
6796        Option<S>,
6797        Option<Vec<Facet<S>>>,
6798        Option<Did<S>>,
6799        Option<S>,
6800        Option<S>,
6801        Option<AtUri<S>>,
6802        Option<Vec<games_gamesgamesgamesgames::Website<S>>>,
6803    ),
6804    _type: PhantomData<fn() -> S>,
6805}
6806
6807impl ActorProfileDetailView<DefaultStr> {
6808    /// Create a new builder for this type, using the default string type (DefaultStr = SmolStr) if needed
6809    pub fn new() -> ActorProfileDetailViewBuilder<actor_profile_detail_view_state::Empty, DefaultStr>
6810    {
6811        ActorProfileDetailViewBuilder::new()
6812    }
6813}
6814
6815impl<S: BosStr> ActorProfileDetailView<S> {
6816    /// Create a new builder for this type
6817    pub fn builder() -> ActorProfileDetailViewBuilder<actor_profile_detail_view_state::Empty, S> {
6818        ActorProfileDetailViewBuilder::builder()
6819    }
6820}
6821
6822impl ActorProfileDetailViewBuilder<actor_profile_detail_view_state::Empty, DefaultStr> {
6823    /// Create a new builder with all fields unset, using the default string type, if needed
6824    pub fn new() -> Self {
6825        ActorProfileDetailViewBuilder {
6826            _state: PhantomData,
6827            _fields: (None, None, None, None, None, None, None, None, None),
6828            _type: PhantomData,
6829        }
6830    }
6831}
6832
6833impl<S: BosStr> ActorProfileDetailViewBuilder<actor_profile_detail_view_state::Empty, S> {
6834    /// Create a new builder with all fields unset
6835    pub fn builder() -> Self {
6836        ActorProfileDetailViewBuilder {
6837            _state: PhantomData,
6838            _fields: (None, None, None, None, None, None, None, None, None),
6839            _type: PhantomData,
6840        }
6841    }
6842}
6843
6844impl<St: actor_profile_detail_view_state::State, S: BosStr> ActorProfileDetailViewBuilder<St, S> {
6845    /// Set the `avatar` field (optional)
6846    pub fn avatar(mut self, value: impl Into<Option<BlobRef<S>>>) -> Self {
6847        self._fields.0 = value.into();
6848        self
6849    }
6850    /// Set the `avatar` field to an Option value (optional)
6851    pub fn maybe_avatar(mut self, value: Option<BlobRef<S>>) -> Self {
6852        self._fields.0 = value;
6853        self
6854    }
6855}
6856
6857impl<St: actor_profile_detail_view_state::State, S: BosStr> ActorProfileDetailViewBuilder<St, S> {
6858    /// Set the `createdAt` field (optional)
6859    pub fn created_at(mut self, value: impl Into<Option<Datetime>>) -> Self {
6860        self._fields.1 = value.into();
6861        self
6862    }
6863    /// Set the `createdAt` field to an Option value (optional)
6864    pub fn maybe_created_at(mut self, value: Option<Datetime>) -> Self {
6865        self._fields.1 = value;
6866        self
6867    }
6868}
6869
6870impl<St: actor_profile_detail_view_state::State, S: BosStr> ActorProfileDetailViewBuilder<St, S> {
6871    /// Set the `description` field (optional)
6872    pub fn description(mut self, value: impl Into<Option<S>>) -> Self {
6873        self._fields.2 = value.into();
6874        self
6875    }
6876    /// Set the `description` field to an Option value (optional)
6877    pub fn maybe_description(mut self, value: Option<S>) -> Self {
6878        self._fields.2 = value;
6879        self
6880    }
6881}
6882
6883impl<St: actor_profile_detail_view_state::State, S: BosStr> ActorProfileDetailViewBuilder<St, S> {
6884    /// Set the `descriptionFacets` field (optional)
6885    pub fn description_facets(mut self, value: impl Into<Option<Vec<Facet<S>>>>) -> Self {
6886        self._fields.3 = value.into();
6887        self
6888    }
6889    /// Set the `descriptionFacets` field to an Option value (optional)
6890    pub fn maybe_description_facets(mut self, value: Option<Vec<Facet<S>>>) -> Self {
6891        self._fields.3 = value;
6892        self
6893    }
6894}
6895
6896impl<St, S: BosStr> ActorProfileDetailViewBuilder<St, S>
6897where
6898    St: actor_profile_detail_view_state::State,
6899    St::Did: actor_profile_detail_view_state::IsUnset,
6900{
6901    /// Set the `did` field (required)
6902    pub fn did(
6903        mut self,
6904        value: impl Into<Did<S>>,
6905    ) -> ActorProfileDetailViewBuilder<actor_profile_detail_view_state::SetDid<St>, S> {
6906        self._fields.4 = Option::Some(value.into());
6907        ActorProfileDetailViewBuilder {
6908            _state: PhantomData,
6909            _fields: self._fields,
6910            _type: PhantomData,
6911        }
6912    }
6913}
6914
6915impl<St: actor_profile_detail_view_state::State, S: BosStr> ActorProfileDetailViewBuilder<St, S> {
6916    /// Set the `displayName` field (optional)
6917    pub fn display_name(mut self, value: impl Into<Option<S>>) -> Self {
6918        self._fields.5 = value.into();
6919        self
6920    }
6921    /// Set the `displayName` field to an Option value (optional)
6922    pub fn maybe_display_name(mut self, value: Option<S>) -> Self {
6923        self._fields.5 = value;
6924        self
6925    }
6926}
6927
6928impl<St: actor_profile_detail_view_state::State, S: BosStr> ActorProfileDetailViewBuilder<St, S> {
6929    /// Set the `pronouns` field (optional)
6930    pub fn pronouns(mut self, value: impl Into<Option<S>>) -> Self {
6931        self._fields.6 = value.into();
6932        self
6933    }
6934    /// Set the `pronouns` field to an Option value (optional)
6935    pub fn maybe_pronouns(mut self, value: Option<S>) -> Self {
6936        self._fields.6 = value;
6937        self
6938    }
6939}
6940
6941impl<St, S: BosStr> ActorProfileDetailViewBuilder<St, S>
6942where
6943    St: actor_profile_detail_view_state::State,
6944    St::Uri: actor_profile_detail_view_state::IsUnset,
6945{
6946    /// Set the `uri` field (required)
6947    pub fn uri(
6948        mut self,
6949        value: impl Into<AtUri<S>>,
6950    ) -> ActorProfileDetailViewBuilder<actor_profile_detail_view_state::SetUri<St>, S> {
6951        self._fields.7 = Option::Some(value.into());
6952        ActorProfileDetailViewBuilder {
6953            _state: PhantomData,
6954            _fields: self._fields,
6955            _type: PhantomData,
6956        }
6957    }
6958}
6959
6960impl<St: actor_profile_detail_view_state::State, S: BosStr> ActorProfileDetailViewBuilder<St, S> {
6961    /// Set the `websites` field (optional)
6962    pub fn websites(
6963        mut self,
6964        value: impl Into<Option<Vec<games_gamesgamesgamesgames::Website<S>>>>,
6965    ) -> Self {
6966        self._fields.8 = value.into();
6967        self
6968    }
6969    /// Set the `websites` field to an Option value (optional)
6970    pub fn maybe_websites(
6971        mut self,
6972        value: Option<Vec<games_gamesgamesgamesgames::Website<S>>>,
6973    ) -> Self {
6974        self._fields.8 = value;
6975        self
6976    }
6977}
6978
6979impl<St, S: BosStr> ActorProfileDetailViewBuilder<St, S>
6980where
6981    St: actor_profile_detail_view_state::State,
6982    St::Did: actor_profile_detail_view_state::IsSet,
6983    St::Uri: actor_profile_detail_view_state::IsSet,
6984{
6985    /// Build the final struct.
6986    pub fn build(self) -> ActorProfileDetailView<S> {
6987        ActorProfileDetailView {
6988            avatar: self._fields.0,
6989            created_at: self._fields.1,
6990            description: self._fields.2,
6991            description_facets: self._fields.3,
6992            did: self._fields.4.unwrap(),
6993            display_name: self._fields.5,
6994            pronouns: self._fields.6,
6995            uri: self._fields.7.unwrap(),
6996            websites: self._fields.8,
6997            extra_data: Default::default(),
6998        }
6999    }
7000    /// Build the final struct with custom extra_data.
7001    pub fn build_with_data(
7002        self,
7003        extra_data: BTreeMap<SmolStr, Data<S>>,
7004    ) -> ActorProfileDetailView<S> {
7005        ActorProfileDetailView {
7006            avatar: self._fields.0,
7007            created_at: self._fields.1,
7008            description: self._fields.2,
7009            description_facets: self._fields.3,
7010            did: self._fields.4.unwrap(),
7011            display_name: self._fields.5,
7012            pronouns: self._fields.6,
7013            uri: self._fields.7.unwrap(),
7014            websites: self._fields.8,
7015            extra_data: Some(extra_data),
7016        }
7017    }
7018}
7019
7020pub mod actor_profile_summary_view_state {
7021
7022    pub use crate::builder_types::{IsSet, IsUnset, Set, Unset};
7023    #[allow(unused)]
7024    use ::core::marker::PhantomData;
7025    mod sealed {
7026        pub trait Sealed {}
7027    }
7028    /// State trait tracking which required fields have been set
7029    pub trait State: sealed::Sealed {
7030        type Did;
7031        type Uri;
7032    }
7033    /// Empty state - all required fields are unset
7034    pub struct Empty(());
7035    impl sealed::Sealed for Empty {}
7036    impl State for Empty {
7037        type Did = Unset;
7038        type Uri = Unset;
7039    }
7040    ///State transition - sets the `did` field to Set
7041    pub struct SetDid<St: State = Empty>(PhantomData<fn() -> St>);
7042    impl<St: State> sealed::Sealed for SetDid<St> {}
7043    impl<St: State> State for SetDid<St> {
7044        type Did = Set<members::did>;
7045        type Uri = St::Uri;
7046    }
7047    ///State transition - sets the `uri` field to Set
7048    pub struct SetUri<St: State = Empty>(PhantomData<fn() -> St>);
7049    impl<St: State> sealed::Sealed for SetUri<St> {}
7050    impl<St: State> State for SetUri<St> {
7051        type Did = St::Did;
7052        type Uri = Set<members::uri>;
7053    }
7054    /// Marker types for field names
7055    #[allow(non_camel_case_types)]
7056    pub mod members {
7057        ///Marker type for the `did` field
7058        pub struct did(());
7059        ///Marker type for the `uri` field
7060        pub struct uri(());
7061    }
7062}
7063
7064/// Builder for constructing an instance of this type.
7065pub struct ActorProfileSummaryViewBuilder<
7066    St: actor_profile_summary_view_state::State,
7067    S: BosStr = DefaultStr,
7068> {
7069    _state: PhantomData<fn() -> St>,
7070    _fields: (
7071        Option<BlobRef<S>>,
7072        Option<Did<S>>,
7073        Option<S>,
7074        Option<AtUri<S>>,
7075    ),
7076    _type: PhantomData<fn() -> S>,
7077}
7078
7079impl ActorProfileSummaryView<DefaultStr> {
7080    /// Create a new builder for this type, using the default string type (DefaultStr = SmolStr) if needed
7081    pub fn new()
7082    -> ActorProfileSummaryViewBuilder<actor_profile_summary_view_state::Empty, DefaultStr> {
7083        ActorProfileSummaryViewBuilder::new()
7084    }
7085}
7086
7087impl<S: BosStr> ActorProfileSummaryView<S> {
7088    /// Create a new builder for this type
7089    pub fn builder() -> ActorProfileSummaryViewBuilder<actor_profile_summary_view_state::Empty, S> {
7090        ActorProfileSummaryViewBuilder::builder()
7091    }
7092}
7093
7094impl ActorProfileSummaryViewBuilder<actor_profile_summary_view_state::Empty, DefaultStr> {
7095    /// Create a new builder with all fields unset, using the default string type, if needed
7096    pub fn new() -> Self {
7097        ActorProfileSummaryViewBuilder {
7098            _state: PhantomData,
7099            _fields: (None, None, None, None),
7100            _type: PhantomData,
7101        }
7102    }
7103}
7104
7105impl<S: BosStr> ActorProfileSummaryViewBuilder<actor_profile_summary_view_state::Empty, S> {
7106    /// Create a new builder with all fields unset
7107    pub fn builder() -> Self {
7108        ActorProfileSummaryViewBuilder {
7109            _state: PhantomData,
7110            _fields: (None, None, None, None),
7111            _type: PhantomData,
7112        }
7113    }
7114}
7115
7116impl<St: actor_profile_summary_view_state::State, S: BosStr> ActorProfileSummaryViewBuilder<St, S> {
7117    /// Set the `avatar` field (optional)
7118    pub fn avatar(mut self, value: impl Into<Option<BlobRef<S>>>) -> Self {
7119        self._fields.0 = value.into();
7120        self
7121    }
7122    /// Set the `avatar` field to an Option value (optional)
7123    pub fn maybe_avatar(mut self, value: Option<BlobRef<S>>) -> Self {
7124        self._fields.0 = value;
7125        self
7126    }
7127}
7128
7129impl<St, S: BosStr> ActorProfileSummaryViewBuilder<St, S>
7130where
7131    St: actor_profile_summary_view_state::State,
7132    St::Did: actor_profile_summary_view_state::IsUnset,
7133{
7134    /// Set the `did` field (required)
7135    pub fn did(
7136        mut self,
7137        value: impl Into<Did<S>>,
7138    ) -> ActorProfileSummaryViewBuilder<actor_profile_summary_view_state::SetDid<St>, S> {
7139        self._fields.1 = Option::Some(value.into());
7140        ActorProfileSummaryViewBuilder {
7141            _state: PhantomData,
7142            _fields: self._fields,
7143            _type: PhantomData,
7144        }
7145    }
7146}
7147
7148impl<St: actor_profile_summary_view_state::State, S: BosStr> ActorProfileSummaryViewBuilder<St, S> {
7149    /// Set the `displayName` field (optional)
7150    pub fn display_name(mut self, value: impl Into<Option<S>>) -> Self {
7151        self._fields.2 = value.into();
7152        self
7153    }
7154    /// Set the `displayName` field to an Option value (optional)
7155    pub fn maybe_display_name(mut self, value: Option<S>) -> Self {
7156        self._fields.2 = value;
7157        self
7158    }
7159}
7160
7161impl<St, S: BosStr> ActorProfileSummaryViewBuilder<St, S>
7162where
7163    St: actor_profile_summary_view_state::State,
7164    St::Uri: actor_profile_summary_view_state::IsUnset,
7165{
7166    /// Set the `uri` field (required)
7167    pub fn uri(
7168        mut self,
7169        value: impl Into<AtUri<S>>,
7170    ) -> ActorProfileSummaryViewBuilder<actor_profile_summary_view_state::SetUri<St>, S> {
7171        self._fields.3 = Option::Some(value.into());
7172        ActorProfileSummaryViewBuilder {
7173            _state: PhantomData,
7174            _fields: self._fields,
7175            _type: PhantomData,
7176        }
7177    }
7178}
7179
7180impl<St, S: BosStr> ActorProfileSummaryViewBuilder<St, S>
7181where
7182    St: actor_profile_summary_view_state::State,
7183    St::Did: actor_profile_summary_view_state::IsSet,
7184    St::Uri: actor_profile_summary_view_state::IsSet,
7185{
7186    /// Build the final struct.
7187    pub fn build(self) -> ActorProfileSummaryView<S> {
7188        ActorProfileSummaryView {
7189            avatar: self._fields.0,
7190            did: self._fields.1.unwrap(),
7191            display_name: self._fields.2,
7192            uri: self._fields.3.unwrap(),
7193            extra_data: Default::default(),
7194        }
7195    }
7196    /// Build the final struct with custom extra_data.
7197    pub fn build_with_data(
7198        self,
7199        extra_data: BTreeMap<SmolStr, Data<S>>,
7200    ) -> ActorProfileSummaryView<S> {
7201        ActorProfileSummaryView {
7202            avatar: self._fields.0,
7203            did: self._fields.1.unwrap(),
7204            display_name: self._fields.2,
7205            uri: self._fields.3.unwrap(),
7206            extra_data: Some(extra_data),
7207        }
7208    }
7209}
7210
7211pub mod collection_summary_view_state {
7212
7213    pub use crate::builder_types::{IsSet, IsUnset, Set, Unset};
7214    #[allow(unused)]
7215    use ::core::marker::PhantomData;
7216    mod sealed {
7217        pub trait Sealed {}
7218    }
7219    /// State trait tracking which required fields have been set
7220    pub trait State: sealed::Sealed {
7221        type Name;
7222        type Uri;
7223    }
7224    /// Empty state - all required fields are unset
7225    pub struct Empty(());
7226    impl sealed::Sealed for Empty {}
7227    impl State for Empty {
7228        type Name = Unset;
7229        type Uri = Unset;
7230    }
7231    ///State transition - sets the `name` field to Set
7232    pub struct SetName<St: State = Empty>(PhantomData<fn() -> St>);
7233    impl<St: State> sealed::Sealed for SetName<St> {}
7234    impl<St: State> State for SetName<St> {
7235        type Name = Set<members::name>;
7236        type Uri = St::Uri;
7237    }
7238    ///State transition - sets the `uri` field to Set
7239    pub struct SetUri<St: State = Empty>(PhantomData<fn() -> St>);
7240    impl<St: State> sealed::Sealed for SetUri<St> {}
7241    impl<St: State> State for SetUri<St> {
7242        type Name = St::Name;
7243        type Uri = Set<members::uri>;
7244    }
7245    /// Marker types for field names
7246    #[allow(non_camel_case_types)]
7247    pub mod members {
7248        ///Marker type for the `name` field
7249        pub struct name(());
7250        ///Marker type for the `uri` field
7251        pub struct uri(());
7252    }
7253}
7254
7255/// Builder for constructing an instance of this type.
7256pub struct CollectionSummaryViewBuilder<
7257    St: collection_summary_view_state::State,
7258    S: BosStr = DefaultStr,
7259> {
7260    _state: PhantomData<fn() -> St>,
7261    _fields: (
7262        Option<S>,
7263        Option<S>,
7264        Option<CollectionSummaryViewType<S>>,
7265        Option<AtUri<S>>,
7266    ),
7267    _type: PhantomData<fn() -> S>,
7268}
7269
7270impl CollectionSummaryView<DefaultStr> {
7271    /// Create a new builder for this type, using the default string type (DefaultStr = SmolStr) if needed
7272    pub fn new() -> CollectionSummaryViewBuilder<collection_summary_view_state::Empty, DefaultStr> {
7273        CollectionSummaryViewBuilder::new()
7274    }
7275}
7276
7277impl<S: BosStr> CollectionSummaryView<S> {
7278    /// Create a new builder for this type
7279    pub fn builder() -> CollectionSummaryViewBuilder<collection_summary_view_state::Empty, S> {
7280        CollectionSummaryViewBuilder::builder()
7281    }
7282}
7283
7284impl CollectionSummaryViewBuilder<collection_summary_view_state::Empty, DefaultStr> {
7285    /// Create a new builder with all fields unset, using the default string type, if needed
7286    pub fn new() -> Self {
7287        CollectionSummaryViewBuilder {
7288            _state: PhantomData,
7289            _fields: (None, None, None, None),
7290            _type: PhantomData,
7291        }
7292    }
7293}
7294
7295impl<S: BosStr> CollectionSummaryViewBuilder<collection_summary_view_state::Empty, S> {
7296    /// Create a new builder with all fields unset
7297    pub fn builder() -> Self {
7298        CollectionSummaryViewBuilder {
7299            _state: PhantomData,
7300            _fields: (None, None, None, None),
7301            _type: PhantomData,
7302        }
7303    }
7304}
7305
7306impl<St, S: BosStr> CollectionSummaryViewBuilder<St, S>
7307where
7308    St: collection_summary_view_state::State,
7309    St::Name: collection_summary_view_state::IsUnset,
7310{
7311    /// Set the `name` field (required)
7312    pub fn name(
7313        mut self,
7314        value: impl Into<S>,
7315    ) -> CollectionSummaryViewBuilder<collection_summary_view_state::SetName<St>, S> {
7316        self._fields.0 = Option::Some(value.into());
7317        CollectionSummaryViewBuilder {
7318            _state: PhantomData,
7319            _fields: self._fields,
7320            _type: PhantomData,
7321        }
7322    }
7323}
7324
7325impl<St: collection_summary_view_state::State, S: BosStr> CollectionSummaryViewBuilder<St, S> {
7326    /// Set the `slug` field (optional)
7327    pub fn slug(mut self, value: impl Into<Option<S>>) -> Self {
7328        self._fields.1 = value.into();
7329        self
7330    }
7331    /// Set the `slug` field to an Option value (optional)
7332    pub fn maybe_slug(mut self, value: Option<S>) -> Self {
7333        self._fields.1 = value;
7334        self
7335    }
7336}
7337
7338impl<St: collection_summary_view_state::State, S: BosStr> CollectionSummaryViewBuilder<St, S> {
7339    /// Set the `type` field (optional)
7340    pub fn r#type(mut self, value: impl Into<Option<CollectionSummaryViewType<S>>>) -> Self {
7341        self._fields.2 = value.into();
7342        self
7343    }
7344    /// Set the `type` field to an Option value (optional)
7345    pub fn maybe_type(mut self, value: Option<CollectionSummaryViewType<S>>) -> Self {
7346        self._fields.2 = value;
7347        self
7348    }
7349}
7350
7351impl<St, S: BosStr> CollectionSummaryViewBuilder<St, S>
7352where
7353    St: collection_summary_view_state::State,
7354    St::Uri: collection_summary_view_state::IsUnset,
7355{
7356    /// Set the `uri` field (required)
7357    pub fn uri(
7358        mut self,
7359        value: impl Into<AtUri<S>>,
7360    ) -> CollectionSummaryViewBuilder<collection_summary_view_state::SetUri<St>, S> {
7361        self._fields.3 = Option::Some(value.into());
7362        CollectionSummaryViewBuilder {
7363            _state: PhantomData,
7364            _fields: self._fields,
7365            _type: PhantomData,
7366        }
7367    }
7368}
7369
7370impl<St, S: BosStr> CollectionSummaryViewBuilder<St, S>
7371where
7372    St: collection_summary_view_state::State,
7373    St::Name: collection_summary_view_state::IsSet,
7374    St::Uri: collection_summary_view_state::IsSet,
7375{
7376    /// Build the final struct.
7377    pub fn build(self) -> CollectionSummaryView<S> {
7378        CollectionSummaryView {
7379            name: self._fields.0.unwrap(),
7380            slug: self._fields.1,
7381            r#type: self._fields.2,
7382            uri: self._fields.3.unwrap(),
7383            extra_data: Default::default(),
7384        }
7385    }
7386    /// Build the final struct with custom extra_data.
7387    pub fn build_with_data(
7388        self,
7389        extra_data: BTreeMap<SmolStr, Data<S>>,
7390    ) -> CollectionSummaryView<S> {
7391        CollectionSummaryView {
7392            name: self._fields.0.unwrap(),
7393            slug: self._fields.1,
7394            r#type: self._fields.2,
7395            uri: self._fields.3.unwrap(),
7396            extra_data: Some(extra_data),
7397        }
7398    }
7399}
7400
7401pub mod community_feed_actor_view_state {
7402
7403    pub use crate::builder_types::{IsSet, IsUnset, Set, Unset};
7404    #[allow(unused)]
7405    use ::core::marker::PhantomData;
7406    mod sealed {
7407        pub trait Sealed {}
7408    }
7409    /// State trait tracking which required fields have been set
7410    pub trait State: sealed::Sealed {
7411        type Did;
7412    }
7413    /// Empty state - all required fields are unset
7414    pub struct Empty(());
7415    impl sealed::Sealed for Empty {}
7416    impl State for Empty {
7417        type Did = Unset;
7418    }
7419    ///State transition - sets the `did` field to Set
7420    pub struct SetDid<St: State = Empty>(PhantomData<fn() -> St>);
7421    impl<St: State> sealed::Sealed for SetDid<St> {}
7422    impl<St: State> State for SetDid<St> {
7423        type Did = Set<members::did>;
7424    }
7425    /// Marker types for field names
7426    #[allow(non_camel_case_types)]
7427    pub mod members {
7428        ///Marker type for the `did` field
7429        pub struct did(());
7430    }
7431}
7432
7433/// Builder for constructing an instance of this type.
7434pub struct CommunityFeedActorViewBuilder<
7435    St: community_feed_actor_view_state::State,
7436    S: BosStr = DefaultStr,
7437> {
7438    _state: PhantomData<fn() -> St>,
7439    _fields: (Option<Did<S>>, Option<S>, Option<S>),
7440    _type: PhantomData<fn() -> S>,
7441}
7442
7443impl CommunityFeedActorView<DefaultStr> {
7444    /// Create a new builder for this type, using the default string type (DefaultStr = SmolStr) if needed
7445    pub fn new() -> CommunityFeedActorViewBuilder<community_feed_actor_view_state::Empty, DefaultStr>
7446    {
7447        CommunityFeedActorViewBuilder::new()
7448    }
7449}
7450
7451impl<S: BosStr> CommunityFeedActorView<S> {
7452    /// Create a new builder for this type
7453    pub fn builder() -> CommunityFeedActorViewBuilder<community_feed_actor_view_state::Empty, S> {
7454        CommunityFeedActorViewBuilder::builder()
7455    }
7456}
7457
7458impl CommunityFeedActorViewBuilder<community_feed_actor_view_state::Empty, DefaultStr> {
7459    /// Create a new builder with all fields unset, using the default string type, if needed
7460    pub fn new() -> Self {
7461        CommunityFeedActorViewBuilder {
7462            _state: PhantomData,
7463            _fields: (None, None, None),
7464            _type: PhantomData,
7465        }
7466    }
7467}
7468
7469impl<S: BosStr> CommunityFeedActorViewBuilder<community_feed_actor_view_state::Empty, S> {
7470    /// Create a new builder with all fields unset
7471    pub fn builder() -> Self {
7472        CommunityFeedActorViewBuilder {
7473            _state: PhantomData,
7474            _fields: (None, None, None),
7475            _type: PhantomData,
7476        }
7477    }
7478}
7479
7480impl<St, S: BosStr> CommunityFeedActorViewBuilder<St, S>
7481where
7482    St: community_feed_actor_view_state::State,
7483    St::Did: community_feed_actor_view_state::IsUnset,
7484{
7485    /// Set the `did` field (required)
7486    pub fn did(
7487        mut self,
7488        value: impl Into<Did<S>>,
7489    ) -> CommunityFeedActorViewBuilder<community_feed_actor_view_state::SetDid<St>, S> {
7490        self._fields.0 = Option::Some(value.into());
7491        CommunityFeedActorViewBuilder {
7492            _state: PhantomData,
7493            _fields: self._fields,
7494            _type: PhantomData,
7495        }
7496    }
7497}
7498
7499impl<St: community_feed_actor_view_state::State, S: BosStr> CommunityFeedActorViewBuilder<St, S> {
7500    /// Set the `displayName` field (optional)
7501    pub fn display_name(mut self, value: impl Into<Option<S>>) -> Self {
7502        self._fields.1 = value.into();
7503        self
7504    }
7505    /// Set the `displayName` field to an Option value (optional)
7506    pub fn maybe_display_name(mut self, value: Option<S>) -> Self {
7507        self._fields.1 = value;
7508        self
7509    }
7510}
7511
7512impl<St: community_feed_actor_view_state::State, S: BosStr> CommunityFeedActorViewBuilder<St, S> {
7513    /// Set the `handle` field (optional)
7514    pub fn handle(mut self, value: impl Into<Option<S>>) -> Self {
7515        self._fields.2 = value.into();
7516        self
7517    }
7518    /// Set the `handle` field to an Option value (optional)
7519    pub fn maybe_handle(mut self, value: Option<S>) -> Self {
7520        self._fields.2 = value;
7521        self
7522    }
7523}
7524
7525impl<St, S: BosStr> CommunityFeedActorViewBuilder<St, S>
7526where
7527    St: community_feed_actor_view_state::State,
7528    St::Did: community_feed_actor_view_state::IsSet,
7529{
7530    /// Build the final struct.
7531    pub fn build(self) -> CommunityFeedActorView<S> {
7532        CommunityFeedActorView {
7533            did: self._fields.0.unwrap(),
7534            display_name: self._fields.1,
7535            handle: self._fields.2,
7536            extra_data: Default::default(),
7537        }
7538    }
7539    /// Build the final struct with custom extra_data.
7540    pub fn build_with_data(
7541        self,
7542        extra_data: BTreeMap<SmolStr, Data<S>>,
7543    ) -> CommunityFeedActorView<S> {
7544        CommunityFeedActorView {
7545            did: self._fields.0.unwrap(),
7546            display_name: self._fields.1,
7547            handle: self._fields.2,
7548            extra_data: Some(extra_data),
7549        }
7550    }
7551}
7552
7553pub mod community_feed_item_state {
7554
7555    pub use crate::builder_types::{IsSet, IsUnset, Set, Unset};
7556    #[allow(unused)]
7557    use ::core::marker::PhantomData;
7558    mod sealed {
7559        pub trait Sealed {}
7560    }
7561    /// State trait tracking which required fields have been set
7562    pub trait State: sealed::Sealed {
7563        type Actor;
7564        type CreatedAt;
7565        type Type;
7566    }
7567    /// Empty state - all required fields are unset
7568    pub struct Empty(());
7569    impl sealed::Sealed for Empty {}
7570    impl State for Empty {
7571        type Actor = Unset;
7572        type CreatedAt = Unset;
7573        type Type = Unset;
7574    }
7575    ///State transition - sets the `actor` field to Set
7576    pub struct SetActor<St: State = Empty>(PhantomData<fn() -> St>);
7577    impl<St: State> sealed::Sealed for SetActor<St> {}
7578    impl<St: State> State for SetActor<St> {
7579        type Actor = Set<members::actor>;
7580        type CreatedAt = St::CreatedAt;
7581        type Type = St::Type;
7582    }
7583    ///State transition - sets the `created_at` field to Set
7584    pub struct SetCreatedAt<St: State = Empty>(PhantomData<fn() -> St>);
7585    impl<St: State> sealed::Sealed for SetCreatedAt<St> {}
7586    impl<St: State> State for SetCreatedAt<St> {
7587        type Actor = St::Actor;
7588        type CreatedAt = Set<members::created_at>;
7589        type Type = St::Type;
7590    }
7591    ///State transition - sets the `type` field to Set
7592    pub struct SetType<St: State = Empty>(PhantomData<fn() -> St>);
7593    impl<St: State> sealed::Sealed for SetType<St> {}
7594    impl<St: State> State for SetType<St> {
7595        type Actor = St::Actor;
7596        type CreatedAt = St::CreatedAt;
7597        type Type = Set<members::r#type>;
7598    }
7599    /// Marker types for field names
7600    #[allow(non_camel_case_types)]
7601    pub mod members {
7602        ///Marker type for the `actor` field
7603        pub struct actor(());
7604        ///Marker type for the `created_at` field
7605        pub struct created_at(());
7606        ///Marker type for the `type` field
7607        pub struct r#type(());
7608    }
7609}
7610
7611/// Builder for constructing an instance of this type.
7612pub struct CommunityFeedItemBuilder<St: community_feed_item_state::State, S: BosStr = DefaultStr> {
7613    _state: PhantomData<fn() -> St>,
7614    _fields: (
7615        Option<games_gamesgamesgamesgames::CommunityFeedActorView<S>>,
7616        Option<Datetime>,
7617        Option<games_gamesgamesgamesgames::GameView<S>>,
7618        Option<games_gamesgamesgamesgames::ActivityListView<S>>,
7619        Option<games_gamesgamesgamesgames::ActivityReviewView<S>>,
7620        Option<CommunityFeedItemType<S>>,
7621    ),
7622    _type: PhantomData<fn() -> S>,
7623}
7624
7625impl CommunityFeedItem<DefaultStr> {
7626    /// Create a new builder for this type, using the default string type (DefaultStr = SmolStr) if needed
7627    pub fn new() -> CommunityFeedItemBuilder<community_feed_item_state::Empty, DefaultStr> {
7628        CommunityFeedItemBuilder::new()
7629    }
7630}
7631
7632impl<S: BosStr> CommunityFeedItem<S> {
7633    /// Create a new builder for this type
7634    pub fn builder() -> CommunityFeedItemBuilder<community_feed_item_state::Empty, S> {
7635        CommunityFeedItemBuilder::builder()
7636    }
7637}
7638
7639impl CommunityFeedItemBuilder<community_feed_item_state::Empty, DefaultStr> {
7640    /// Create a new builder with all fields unset, using the default string type, if needed
7641    pub fn new() -> Self {
7642        CommunityFeedItemBuilder {
7643            _state: PhantomData,
7644            _fields: (None, None, None, None, None, None),
7645            _type: PhantomData,
7646        }
7647    }
7648}
7649
7650impl<S: BosStr> CommunityFeedItemBuilder<community_feed_item_state::Empty, S> {
7651    /// Create a new builder with all fields unset
7652    pub fn builder() -> Self {
7653        CommunityFeedItemBuilder {
7654            _state: PhantomData,
7655            _fields: (None, None, None, None, None, None),
7656            _type: PhantomData,
7657        }
7658    }
7659}
7660
7661impl<St, S: BosStr> CommunityFeedItemBuilder<St, S>
7662where
7663    St: community_feed_item_state::State,
7664    St::Actor: community_feed_item_state::IsUnset,
7665{
7666    /// Set the `actor` field (required)
7667    pub fn actor(
7668        mut self,
7669        value: impl Into<games_gamesgamesgamesgames::CommunityFeedActorView<S>>,
7670    ) -> CommunityFeedItemBuilder<community_feed_item_state::SetActor<St>, S> {
7671        self._fields.0 = Option::Some(value.into());
7672        CommunityFeedItemBuilder {
7673            _state: PhantomData,
7674            _fields: self._fields,
7675            _type: PhantomData,
7676        }
7677    }
7678}
7679
7680impl<St, S: BosStr> CommunityFeedItemBuilder<St, S>
7681where
7682    St: community_feed_item_state::State,
7683    St::CreatedAt: community_feed_item_state::IsUnset,
7684{
7685    /// Set the `createdAt` field (required)
7686    pub fn created_at(
7687        mut self,
7688        value: impl Into<Datetime>,
7689    ) -> CommunityFeedItemBuilder<community_feed_item_state::SetCreatedAt<St>, S> {
7690        self._fields.1 = Option::Some(value.into());
7691        CommunityFeedItemBuilder {
7692            _state: PhantomData,
7693            _fields: self._fields,
7694            _type: PhantomData,
7695        }
7696    }
7697}
7698
7699impl<St: community_feed_item_state::State, S: BosStr> CommunityFeedItemBuilder<St, S> {
7700    /// Set the `game` field (optional)
7701    pub fn game(
7702        mut self,
7703        value: impl Into<Option<games_gamesgamesgamesgames::GameView<S>>>,
7704    ) -> Self {
7705        self._fields.2 = value.into();
7706        self
7707    }
7708    /// Set the `game` field to an Option value (optional)
7709    pub fn maybe_game(mut self, value: Option<games_gamesgamesgamesgames::GameView<S>>) -> Self {
7710        self._fields.2 = value;
7711        self
7712    }
7713}
7714
7715impl<St: community_feed_item_state::State, S: BosStr> CommunityFeedItemBuilder<St, S> {
7716    /// Set the `list` field (optional)
7717    pub fn list(
7718        mut self,
7719        value: impl Into<Option<games_gamesgamesgamesgames::ActivityListView<S>>>,
7720    ) -> Self {
7721        self._fields.3 = value.into();
7722        self
7723    }
7724    /// Set the `list` field to an Option value (optional)
7725    pub fn maybe_list(
7726        mut self,
7727        value: Option<games_gamesgamesgamesgames::ActivityListView<S>>,
7728    ) -> Self {
7729        self._fields.3 = value;
7730        self
7731    }
7732}
7733
7734impl<St: community_feed_item_state::State, S: BosStr> CommunityFeedItemBuilder<St, S> {
7735    /// Set the `review` field (optional)
7736    pub fn review(
7737        mut self,
7738        value: impl Into<Option<games_gamesgamesgamesgames::ActivityReviewView<S>>>,
7739    ) -> Self {
7740        self._fields.4 = value.into();
7741        self
7742    }
7743    /// Set the `review` field to an Option value (optional)
7744    pub fn maybe_review(
7745        mut self,
7746        value: Option<games_gamesgamesgamesgames::ActivityReviewView<S>>,
7747    ) -> Self {
7748        self._fields.4 = value;
7749        self
7750    }
7751}
7752
7753impl<St, S: BosStr> CommunityFeedItemBuilder<St, S>
7754where
7755    St: community_feed_item_state::State,
7756    St::Type: community_feed_item_state::IsUnset,
7757{
7758    /// Set the `type` field (required)
7759    pub fn r#type(
7760        mut self,
7761        value: impl Into<CommunityFeedItemType<S>>,
7762    ) -> CommunityFeedItemBuilder<community_feed_item_state::SetType<St>, S> {
7763        self._fields.5 = Option::Some(value.into());
7764        CommunityFeedItemBuilder {
7765            _state: PhantomData,
7766            _fields: self._fields,
7767            _type: PhantomData,
7768        }
7769    }
7770}
7771
7772impl<St, S: BosStr> CommunityFeedItemBuilder<St, S>
7773where
7774    St: community_feed_item_state::State,
7775    St::Actor: community_feed_item_state::IsSet,
7776    St::CreatedAt: community_feed_item_state::IsSet,
7777    St::Type: community_feed_item_state::IsSet,
7778{
7779    /// Build the final struct.
7780    pub fn build(self) -> CommunityFeedItem<S> {
7781        CommunityFeedItem {
7782            actor: self._fields.0.unwrap(),
7783            created_at: self._fields.1.unwrap(),
7784            game: self._fields.2,
7785            list: self._fields.3,
7786            review: self._fields.4,
7787            r#type: self._fields.5.unwrap(),
7788            extra_data: Default::default(),
7789        }
7790    }
7791    /// Build the final struct with custom extra_data.
7792    pub fn build_with_data(self, extra_data: BTreeMap<SmolStr, Data<S>>) -> CommunityFeedItem<S> {
7793        CommunityFeedItem {
7794            actor: self._fields.0.unwrap(),
7795            created_at: self._fields.1.unwrap(),
7796            game: self._fields.2,
7797            list: self._fields.3,
7798            review: self._fields.4,
7799            r#type: self._fields.5.unwrap(),
7800            extra_data: Some(extra_data),
7801        }
7802    }
7803}
7804
7805pub mod credit_entry_state {
7806
7807    pub use crate::builder_types::{IsSet, IsUnset, Set, Unset};
7808    #[allow(unused)]
7809    use ::core::marker::PhantomData;
7810    mod sealed {
7811        pub trait Sealed {}
7812    }
7813    /// State trait tracking which required fields have been set
7814    pub trait State: sealed::Sealed {
7815        type Role;
7816    }
7817    /// Empty state - all required fields are unset
7818    pub struct Empty(());
7819    impl sealed::Sealed for Empty {}
7820    impl State for Empty {
7821        type Role = Unset;
7822    }
7823    ///State transition - sets the `role` field to Set
7824    pub struct SetRole<St: State = Empty>(PhantomData<fn() -> St>);
7825    impl<St: State> sealed::Sealed for SetRole<St> {}
7826    impl<St: State> State for SetRole<St> {
7827        type Role = Set<members::role>;
7828    }
7829    /// Marker types for field names
7830    #[allow(non_camel_case_types)]
7831    pub mod members {
7832        ///Marker type for the `role` field
7833        pub struct role(());
7834    }
7835}
7836
7837/// Builder for constructing an instance of this type.
7838pub struct CreditEntryBuilder<St: credit_entry_state::State, S: BosStr = DefaultStr> {
7839    _state: PhantomData<fn() -> St>,
7840    _fields: (
7841        Option<S>,
7842        Option<games_gamesgamesgamesgames::IndividualRole<S>>,
7843    ),
7844    _type: PhantomData<fn() -> S>,
7845}
7846
7847impl CreditEntry<DefaultStr> {
7848    /// Create a new builder for this type, using the default string type (DefaultStr = SmolStr) if needed
7849    pub fn new() -> CreditEntryBuilder<credit_entry_state::Empty, DefaultStr> {
7850        CreditEntryBuilder::new()
7851    }
7852}
7853
7854impl<S: BosStr> CreditEntry<S> {
7855    /// Create a new builder for this type
7856    pub fn builder() -> CreditEntryBuilder<credit_entry_state::Empty, S> {
7857        CreditEntryBuilder::builder()
7858    }
7859}
7860
7861impl CreditEntryBuilder<credit_entry_state::Empty, DefaultStr> {
7862    /// Create a new builder with all fields unset, using the default string type, if needed
7863    pub fn new() -> Self {
7864        CreditEntryBuilder {
7865            _state: PhantomData,
7866            _fields: (None, None),
7867            _type: PhantomData,
7868        }
7869    }
7870}
7871
7872impl<S: BosStr> CreditEntryBuilder<credit_entry_state::Empty, S> {
7873    /// Create a new builder with all fields unset
7874    pub fn builder() -> Self {
7875        CreditEntryBuilder {
7876            _state: PhantomData,
7877            _fields: (None, None),
7878            _type: PhantomData,
7879        }
7880    }
7881}
7882
7883impl<St: credit_entry_state::State, S: BosStr> CreditEntryBuilder<St, S> {
7884    /// Set the `department` field (optional)
7885    pub fn department(mut self, value: impl Into<Option<S>>) -> Self {
7886        self._fields.0 = value.into();
7887        self
7888    }
7889    /// Set the `department` field to an Option value (optional)
7890    pub fn maybe_department(mut self, value: Option<S>) -> Self {
7891        self._fields.0 = value;
7892        self
7893    }
7894}
7895
7896impl<St, S: BosStr> CreditEntryBuilder<St, S>
7897where
7898    St: credit_entry_state::State,
7899    St::Role: credit_entry_state::IsUnset,
7900{
7901    /// Set the `role` field (required)
7902    pub fn role(
7903        mut self,
7904        value: impl Into<games_gamesgamesgamesgames::IndividualRole<S>>,
7905    ) -> CreditEntryBuilder<credit_entry_state::SetRole<St>, S> {
7906        self._fields.1 = Option::Some(value.into());
7907        CreditEntryBuilder {
7908            _state: PhantomData,
7909            _fields: self._fields,
7910            _type: PhantomData,
7911        }
7912    }
7913}
7914
7915impl<St, S: BosStr> CreditEntryBuilder<St, S>
7916where
7917    St: credit_entry_state::State,
7918    St::Role: credit_entry_state::IsSet,
7919{
7920    /// Build the final struct.
7921    pub fn build(self) -> CreditEntry<S> {
7922        CreditEntry {
7923            department: self._fields.0,
7924            role: self._fields.1.unwrap(),
7925            extra_data: Default::default(),
7926        }
7927    }
7928    /// Build the final struct with custom extra_data.
7929    pub fn build_with_data(self, extra_data: BTreeMap<SmolStr, Data<S>>) -> CreditEntry<S> {
7930        CreditEntry {
7931            department: self._fields.0,
7932            role: self._fields.1.unwrap(),
7933            extra_data: Some(extra_data),
7934        }
7935    }
7936}
7937
7938pub mod engine_summary_view_state {
7939
7940    pub use crate::builder_types::{IsSet, IsUnset, Set, Unset};
7941    #[allow(unused)]
7942    use ::core::marker::PhantomData;
7943    mod sealed {
7944        pub trait Sealed {}
7945    }
7946    /// State trait tracking which required fields have been set
7947    pub trait State: sealed::Sealed {
7948        type Name;
7949        type Uri;
7950    }
7951    /// Empty state - all required fields are unset
7952    pub struct Empty(());
7953    impl sealed::Sealed for Empty {}
7954    impl State for Empty {
7955        type Name = Unset;
7956        type Uri = Unset;
7957    }
7958    ///State transition - sets the `name` field to Set
7959    pub struct SetName<St: State = Empty>(PhantomData<fn() -> St>);
7960    impl<St: State> sealed::Sealed for SetName<St> {}
7961    impl<St: State> State for SetName<St> {
7962        type Name = Set<members::name>;
7963        type Uri = St::Uri;
7964    }
7965    ///State transition - sets the `uri` field to Set
7966    pub struct SetUri<St: State = Empty>(PhantomData<fn() -> St>);
7967    impl<St: State> sealed::Sealed for SetUri<St> {}
7968    impl<St: State> State for SetUri<St> {
7969        type Name = St::Name;
7970        type Uri = Set<members::uri>;
7971    }
7972    /// Marker types for field names
7973    #[allow(non_camel_case_types)]
7974    pub mod members {
7975        ///Marker type for the `name` field
7976        pub struct name(());
7977        ///Marker type for the `uri` field
7978        pub struct uri(());
7979    }
7980}
7981
7982/// Builder for constructing an instance of this type.
7983pub struct EngineSummaryViewBuilder<St: engine_summary_view_state::State, S: BosStr = DefaultStr> {
7984    _state: PhantomData<fn() -> St>,
7985    _fields: (Option<S>, Option<S>, Option<AtUri<S>>),
7986    _type: PhantomData<fn() -> S>,
7987}
7988
7989impl EngineSummaryView<DefaultStr> {
7990    /// Create a new builder for this type, using the default string type (DefaultStr = SmolStr) if needed
7991    pub fn new() -> EngineSummaryViewBuilder<engine_summary_view_state::Empty, DefaultStr> {
7992        EngineSummaryViewBuilder::new()
7993    }
7994}
7995
7996impl<S: BosStr> EngineSummaryView<S> {
7997    /// Create a new builder for this type
7998    pub fn builder() -> EngineSummaryViewBuilder<engine_summary_view_state::Empty, S> {
7999        EngineSummaryViewBuilder::builder()
8000    }
8001}
8002
8003impl EngineSummaryViewBuilder<engine_summary_view_state::Empty, DefaultStr> {
8004    /// Create a new builder with all fields unset, using the default string type, if needed
8005    pub fn new() -> Self {
8006        EngineSummaryViewBuilder {
8007            _state: PhantomData,
8008            _fields: (None, None, None),
8009            _type: PhantomData,
8010        }
8011    }
8012}
8013
8014impl<S: BosStr> EngineSummaryViewBuilder<engine_summary_view_state::Empty, S> {
8015    /// Create a new builder with all fields unset
8016    pub fn builder() -> Self {
8017        EngineSummaryViewBuilder {
8018            _state: PhantomData,
8019            _fields: (None, None, None),
8020            _type: PhantomData,
8021        }
8022    }
8023}
8024
8025impl<St, S: BosStr> EngineSummaryViewBuilder<St, S>
8026where
8027    St: engine_summary_view_state::State,
8028    St::Name: engine_summary_view_state::IsUnset,
8029{
8030    /// Set the `name` field (required)
8031    pub fn name(
8032        mut self,
8033        value: impl Into<S>,
8034    ) -> EngineSummaryViewBuilder<engine_summary_view_state::SetName<St>, S> {
8035        self._fields.0 = Option::Some(value.into());
8036        EngineSummaryViewBuilder {
8037            _state: PhantomData,
8038            _fields: self._fields,
8039            _type: PhantomData,
8040        }
8041    }
8042}
8043
8044impl<St: engine_summary_view_state::State, S: BosStr> EngineSummaryViewBuilder<St, S> {
8045    /// Set the `slug` field (optional)
8046    pub fn slug(mut self, value: impl Into<Option<S>>) -> Self {
8047        self._fields.1 = value.into();
8048        self
8049    }
8050    /// Set the `slug` field to an Option value (optional)
8051    pub fn maybe_slug(mut self, value: Option<S>) -> Self {
8052        self._fields.1 = value;
8053        self
8054    }
8055}
8056
8057impl<St, S: BosStr> EngineSummaryViewBuilder<St, S>
8058where
8059    St: engine_summary_view_state::State,
8060    St::Uri: engine_summary_view_state::IsUnset,
8061{
8062    /// Set the `uri` field (required)
8063    pub fn uri(
8064        mut self,
8065        value: impl Into<AtUri<S>>,
8066    ) -> EngineSummaryViewBuilder<engine_summary_view_state::SetUri<St>, S> {
8067        self._fields.2 = Option::Some(value.into());
8068        EngineSummaryViewBuilder {
8069            _state: PhantomData,
8070            _fields: self._fields,
8071            _type: PhantomData,
8072        }
8073    }
8074}
8075
8076impl<St, S: BosStr> EngineSummaryViewBuilder<St, S>
8077where
8078    St: engine_summary_view_state::State,
8079    St::Name: engine_summary_view_state::IsSet,
8080    St::Uri: engine_summary_view_state::IsSet,
8081{
8082    /// Build the final struct.
8083    pub fn build(self) -> EngineSummaryView<S> {
8084        EngineSummaryView {
8085            name: self._fields.0.unwrap(),
8086            slug: self._fields.1,
8087            uri: self._fields.2.unwrap(),
8088            extra_data: Default::default(),
8089        }
8090    }
8091    /// Build the final struct with custom extra_data.
8092    pub fn build_with_data(self, extra_data: BTreeMap<SmolStr, Data<S>>) -> EngineSummaryView<S> {
8093        EngineSummaryView {
8094            name: self._fields.0.unwrap(),
8095            slug: self._fields.1,
8096            uri: self._fields.2.unwrap(),
8097            extra_data: Some(extra_data),
8098        }
8099    }
8100}
8101
8102pub mod game_detail_view_state {
8103
8104    pub use crate::builder_types::{IsSet, IsUnset, Set, Unset};
8105    #[allow(unused)]
8106    use ::core::marker::PhantomData;
8107    mod sealed {
8108        pub trait Sealed {}
8109    }
8110    /// State trait tracking which required fields have been set
8111    pub trait State: sealed::Sealed {
8112        type CreatedAt;
8113        type Name;
8114        type Uri;
8115    }
8116    /// Empty state - all required fields are unset
8117    pub struct Empty(());
8118    impl sealed::Sealed for Empty {}
8119    impl State for Empty {
8120        type CreatedAt = Unset;
8121        type Name = Unset;
8122        type Uri = Unset;
8123    }
8124    ///State transition - sets the `created_at` field to Set
8125    pub struct SetCreatedAt<St: State = Empty>(PhantomData<fn() -> St>);
8126    impl<St: State> sealed::Sealed for SetCreatedAt<St> {}
8127    impl<St: State> State for SetCreatedAt<St> {
8128        type CreatedAt = Set<members::created_at>;
8129        type Name = St::Name;
8130        type Uri = St::Uri;
8131    }
8132    ///State transition - sets the `name` field to Set
8133    pub struct SetName<St: State = Empty>(PhantomData<fn() -> St>);
8134    impl<St: State> sealed::Sealed for SetName<St> {}
8135    impl<St: State> State for SetName<St> {
8136        type CreatedAt = St::CreatedAt;
8137        type Name = Set<members::name>;
8138        type Uri = St::Uri;
8139    }
8140    ///State transition - sets the `uri` field to Set
8141    pub struct SetUri<St: State = Empty>(PhantomData<fn() -> St>);
8142    impl<St: State> sealed::Sealed for SetUri<St> {}
8143    impl<St: State> State for SetUri<St> {
8144        type CreatedAt = St::CreatedAt;
8145        type Name = St::Name;
8146        type Uri = Set<members::uri>;
8147    }
8148    /// Marker types for field names
8149    #[allow(non_camel_case_types)]
8150    pub mod members {
8151        ///Marker type for the `created_at` field
8152        pub struct created_at(());
8153        ///Marker type for the `name` field
8154        pub struct name(());
8155        ///Marker type for the `uri` field
8156        pub struct uri(());
8157    }
8158}
8159
8160/// Builder for constructing an instance of this type.
8161pub struct GameDetailViewBuilder<St: game_detail_view_state::State, S: BosStr = DefaultStr> {
8162    _state: PhantomData<fn() -> St>,
8163    _fields: (
8164        Option<Vec<games_gamesgamesgamesgames::ActorCreditView<S>>>,
8165        Option<Vec<games_gamesgamesgamesgames::AgeRating<S>>>,
8166        Option<Vec<games_gamesgamesgamesgames::AlternativeName<S>>>,
8167        Option<games_gamesgamesgamesgames::ApplicationType<S>>,
8168        Option<Vec<AtUri<S>>>,
8169        Option<Datetime>,
8170        Option<Vec<AtUri<S>>>,
8171        Option<games_gamesgamesgamesgames::ExternalIds<S>>,
8172        Option<Vec<games_gamesgamesgamesgames::Genre<S>>>,
8173        Option<Vec<S>>,
8174        Option<Vec<games_gamesgamesgamesgames::LanguageSupport<S>>>,
8175        Option<Vec<games_gamesgamesgamesgames::MediaItem<S>>>,
8176        Option<Vec<games_gamesgamesgamesgames::Mode<S>>>,
8177        Option<Vec<games_gamesgamesgamesgames::MultiplayerMode<S>>>,
8178        Option<S>,
8179        Option<Vec<games_gamesgamesgamesgames::OrgCreditView<S>>>,
8180        Option<AtUri<S>>,
8181        Option<Vec<games_gamesgamesgamesgames::PlayerPerspective<S>>>,
8182        Option<Datetime>,
8183        Option<Vec<games_gamesgamesgamesgames::Release<S>>>,
8184        Option<S>,
8185        Option<S>,
8186        Option<S>,
8187        Option<Vec<games_gamesgamesgamesgames::Theme<S>>>,
8188        Option<games_gamesgamesgamesgames::TimeToBeat<S>>,
8189        Option<AtUri<S>>,
8190        Option<Vec<games_gamesgamesgamesgames::ExternalVideo<S>>>,
8191        Option<Vec<games_gamesgamesgamesgames::Website<S>>>,
8192    ),
8193    _type: PhantomData<fn() -> S>,
8194}
8195
8196impl GameDetailView<DefaultStr> {
8197    /// Create a new builder for this type, using the default string type (DefaultStr = SmolStr) if needed
8198    pub fn new() -> GameDetailViewBuilder<game_detail_view_state::Empty, DefaultStr> {
8199        GameDetailViewBuilder::new()
8200    }
8201}
8202
8203impl<S: BosStr> GameDetailView<S> {
8204    /// Create a new builder for this type
8205    pub fn builder() -> GameDetailViewBuilder<game_detail_view_state::Empty, S> {
8206        GameDetailViewBuilder::builder()
8207    }
8208}
8209
8210impl GameDetailViewBuilder<game_detail_view_state::Empty, DefaultStr> {
8211    /// Create a new builder with all fields unset, using the default string type, if needed
8212    pub fn new() -> Self {
8213        GameDetailViewBuilder {
8214            _state: PhantomData,
8215            _fields: (
8216                None, None, None, None, None, None, None, None, None, None, None, None, None, None,
8217                None, None, None, None, None, None, None, None, None, None, None, None, None, None,
8218            ),
8219            _type: PhantomData,
8220        }
8221    }
8222}
8223
8224impl<S: BosStr> GameDetailViewBuilder<game_detail_view_state::Empty, S> {
8225    /// Create a new builder with all fields unset
8226    pub fn builder() -> Self {
8227        GameDetailViewBuilder {
8228            _state: PhantomData,
8229            _fields: (
8230                None, None, None, None, None, None, None, None, None, None, None, None, None, None,
8231                None, None, None, None, None, None, None, None, None, None, None, None, None, None,
8232            ),
8233            _type: PhantomData,
8234        }
8235    }
8236}
8237
8238impl<St: game_detail_view_state::State, S: BosStr> GameDetailViewBuilder<St, S> {
8239    /// Set the `actorCredits` field (optional)
8240    pub fn actor_credits(
8241        mut self,
8242        value: impl Into<Option<Vec<games_gamesgamesgamesgames::ActorCreditView<S>>>>,
8243    ) -> Self {
8244        self._fields.0 = value.into();
8245        self
8246    }
8247    /// Set the `actorCredits` field to an Option value (optional)
8248    pub fn maybe_actor_credits(
8249        mut self,
8250        value: Option<Vec<games_gamesgamesgamesgames::ActorCreditView<S>>>,
8251    ) -> Self {
8252        self._fields.0 = value;
8253        self
8254    }
8255}
8256
8257impl<St: game_detail_view_state::State, S: BosStr> GameDetailViewBuilder<St, S> {
8258    /// Set the `ageRatings` field (optional)
8259    pub fn age_ratings(
8260        mut self,
8261        value: impl Into<Option<Vec<games_gamesgamesgamesgames::AgeRating<S>>>>,
8262    ) -> Self {
8263        self._fields.1 = value.into();
8264        self
8265    }
8266    /// Set the `ageRatings` field to an Option value (optional)
8267    pub fn maybe_age_ratings(
8268        mut self,
8269        value: Option<Vec<games_gamesgamesgamesgames::AgeRating<S>>>,
8270    ) -> Self {
8271        self._fields.1 = value;
8272        self
8273    }
8274}
8275
8276impl<St: game_detail_view_state::State, S: BosStr> GameDetailViewBuilder<St, S> {
8277    /// Set the `alternativeNames` field (optional)
8278    pub fn alternative_names(
8279        mut self,
8280        value: impl Into<Option<Vec<games_gamesgamesgamesgames::AlternativeName<S>>>>,
8281    ) -> Self {
8282        self._fields.2 = value.into();
8283        self
8284    }
8285    /// Set the `alternativeNames` field to an Option value (optional)
8286    pub fn maybe_alternative_names(
8287        mut self,
8288        value: Option<Vec<games_gamesgamesgamesgames::AlternativeName<S>>>,
8289    ) -> Self {
8290        self._fields.2 = value;
8291        self
8292    }
8293}
8294
8295impl<St: game_detail_view_state::State, S: BosStr> GameDetailViewBuilder<St, S> {
8296    /// Set the `applicationType` field (optional)
8297    pub fn application_type(
8298        mut self,
8299        value: impl Into<Option<games_gamesgamesgamesgames::ApplicationType<S>>>,
8300    ) -> Self {
8301        self._fields.3 = value.into();
8302        self
8303    }
8304    /// Set the `applicationType` field to an Option value (optional)
8305    pub fn maybe_application_type(
8306        mut self,
8307        value: Option<games_gamesgamesgamesgames::ApplicationType<S>>,
8308    ) -> Self {
8309        self._fields.3 = value;
8310        self
8311    }
8312}
8313
8314impl<St: game_detail_view_state::State, S: BosStr> GameDetailViewBuilder<St, S> {
8315    /// Set the `collections` field (optional)
8316    pub fn collections(mut self, value: impl Into<Option<Vec<AtUri<S>>>>) -> Self {
8317        self._fields.4 = value.into();
8318        self
8319    }
8320    /// Set the `collections` field to an Option value (optional)
8321    pub fn maybe_collections(mut self, value: Option<Vec<AtUri<S>>>) -> Self {
8322        self._fields.4 = value;
8323        self
8324    }
8325}
8326
8327impl<St, S: BosStr> GameDetailViewBuilder<St, S>
8328where
8329    St: game_detail_view_state::State,
8330    St::CreatedAt: game_detail_view_state::IsUnset,
8331{
8332    /// Set the `createdAt` field (required)
8333    pub fn created_at(
8334        mut self,
8335        value: impl Into<Datetime>,
8336    ) -> GameDetailViewBuilder<game_detail_view_state::SetCreatedAt<St>, S> {
8337        self._fields.5 = Option::Some(value.into());
8338        GameDetailViewBuilder {
8339            _state: PhantomData,
8340            _fields: self._fields,
8341            _type: PhantomData,
8342        }
8343    }
8344}
8345
8346impl<St: game_detail_view_state::State, S: BosStr> GameDetailViewBuilder<St, S> {
8347    /// Set the `engines` field (optional)
8348    pub fn engines(mut self, value: impl Into<Option<Vec<AtUri<S>>>>) -> Self {
8349        self._fields.6 = value.into();
8350        self
8351    }
8352    /// Set the `engines` field to an Option value (optional)
8353    pub fn maybe_engines(mut self, value: Option<Vec<AtUri<S>>>) -> Self {
8354        self._fields.6 = value;
8355        self
8356    }
8357}
8358
8359impl<St: game_detail_view_state::State, S: BosStr> GameDetailViewBuilder<St, S> {
8360    /// Set the `externalIds` field (optional)
8361    pub fn external_ids(
8362        mut self,
8363        value: impl Into<Option<games_gamesgamesgamesgames::ExternalIds<S>>>,
8364    ) -> Self {
8365        self._fields.7 = value.into();
8366        self
8367    }
8368    /// Set the `externalIds` field to an Option value (optional)
8369    pub fn maybe_external_ids(
8370        mut self,
8371        value: Option<games_gamesgamesgamesgames::ExternalIds<S>>,
8372    ) -> Self {
8373        self._fields.7 = value;
8374        self
8375    }
8376}
8377
8378impl<St: game_detail_view_state::State, S: BosStr> GameDetailViewBuilder<St, S> {
8379    /// Set the `genres` field (optional)
8380    pub fn genres(
8381        mut self,
8382        value: impl Into<Option<Vec<games_gamesgamesgamesgames::Genre<S>>>>,
8383    ) -> Self {
8384        self._fields.8 = value.into();
8385        self
8386    }
8387    /// Set the `genres` field to an Option value (optional)
8388    pub fn maybe_genres(
8389        mut self,
8390        value: Option<Vec<games_gamesgamesgamesgames::Genre<S>>>,
8391    ) -> Self {
8392        self._fields.8 = value;
8393        self
8394    }
8395}
8396
8397impl<St: game_detail_view_state::State, S: BosStr> GameDetailViewBuilder<St, S> {
8398    /// Set the `keywords` field (optional)
8399    pub fn keywords(mut self, value: impl Into<Option<Vec<S>>>) -> Self {
8400        self._fields.9 = value.into();
8401        self
8402    }
8403    /// Set the `keywords` field to an Option value (optional)
8404    pub fn maybe_keywords(mut self, value: Option<Vec<S>>) -> Self {
8405        self._fields.9 = value;
8406        self
8407    }
8408}
8409
8410impl<St: game_detail_view_state::State, S: BosStr> GameDetailViewBuilder<St, S> {
8411    /// Set the `languageSupports` field (optional)
8412    pub fn language_supports(
8413        mut self,
8414        value: impl Into<Option<Vec<games_gamesgamesgamesgames::LanguageSupport<S>>>>,
8415    ) -> Self {
8416        self._fields.10 = value.into();
8417        self
8418    }
8419    /// Set the `languageSupports` field to an Option value (optional)
8420    pub fn maybe_language_supports(
8421        mut self,
8422        value: Option<Vec<games_gamesgamesgamesgames::LanguageSupport<S>>>,
8423    ) -> Self {
8424        self._fields.10 = value;
8425        self
8426    }
8427}
8428
8429impl<St: game_detail_view_state::State, S: BosStr> GameDetailViewBuilder<St, S> {
8430    /// Set the `media` field (optional)
8431    pub fn media(
8432        mut self,
8433        value: impl Into<Option<Vec<games_gamesgamesgamesgames::MediaItem<S>>>>,
8434    ) -> Self {
8435        self._fields.11 = value.into();
8436        self
8437    }
8438    /// Set the `media` field to an Option value (optional)
8439    pub fn maybe_media(
8440        mut self,
8441        value: Option<Vec<games_gamesgamesgamesgames::MediaItem<S>>>,
8442    ) -> Self {
8443        self._fields.11 = value;
8444        self
8445    }
8446}
8447
8448impl<St: game_detail_view_state::State, S: BosStr> GameDetailViewBuilder<St, S> {
8449    /// Set the `modes` field (optional)
8450    pub fn modes(
8451        mut self,
8452        value: impl Into<Option<Vec<games_gamesgamesgamesgames::Mode<S>>>>,
8453    ) -> Self {
8454        self._fields.12 = value.into();
8455        self
8456    }
8457    /// Set the `modes` field to an Option value (optional)
8458    pub fn maybe_modes(mut self, value: Option<Vec<games_gamesgamesgamesgames::Mode<S>>>) -> Self {
8459        self._fields.12 = value;
8460        self
8461    }
8462}
8463
8464impl<St: game_detail_view_state::State, S: BosStr> GameDetailViewBuilder<St, S> {
8465    /// Set the `multiplayerModes` field (optional)
8466    pub fn multiplayer_modes(
8467        mut self,
8468        value: impl Into<Option<Vec<games_gamesgamesgamesgames::MultiplayerMode<S>>>>,
8469    ) -> Self {
8470        self._fields.13 = value.into();
8471        self
8472    }
8473    /// Set the `multiplayerModes` field to an Option value (optional)
8474    pub fn maybe_multiplayer_modes(
8475        mut self,
8476        value: Option<Vec<games_gamesgamesgamesgames::MultiplayerMode<S>>>,
8477    ) -> Self {
8478        self._fields.13 = value;
8479        self
8480    }
8481}
8482
8483impl<St, S: BosStr> GameDetailViewBuilder<St, S>
8484where
8485    St: game_detail_view_state::State,
8486    St::Name: game_detail_view_state::IsUnset,
8487{
8488    /// Set the `name` field (required)
8489    pub fn name(
8490        mut self,
8491        value: impl Into<S>,
8492    ) -> GameDetailViewBuilder<game_detail_view_state::SetName<St>, S> {
8493        self._fields.14 = Option::Some(value.into());
8494        GameDetailViewBuilder {
8495            _state: PhantomData,
8496            _fields: self._fields,
8497            _type: PhantomData,
8498        }
8499    }
8500}
8501
8502impl<St: game_detail_view_state::State, S: BosStr> GameDetailViewBuilder<St, S> {
8503    /// Set the `orgCredits` field (optional)
8504    pub fn org_credits(
8505        mut self,
8506        value: impl Into<Option<Vec<games_gamesgamesgamesgames::OrgCreditView<S>>>>,
8507    ) -> Self {
8508        self._fields.15 = value.into();
8509        self
8510    }
8511    /// Set the `orgCredits` field to an Option value (optional)
8512    pub fn maybe_org_credits(
8513        mut self,
8514        value: Option<Vec<games_gamesgamesgamesgames::OrgCreditView<S>>>,
8515    ) -> Self {
8516        self._fields.15 = value;
8517        self
8518    }
8519}
8520
8521impl<St: game_detail_view_state::State, S: BosStr> GameDetailViewBuilder<St, S> {
8522    /// Set the `parent` field (optional)
8523    pub fn parent(mut self, value: impl Into<Option<AtUri<S>>>) -> Self {
8524        self._fields.16 = value.into();
8525        self
8526    }
8527    /// Set the `parent` field to an Option value (optional)
8528    pub fn maybe_parent(mut self, value: Option<AtUri<S>>) -> Self {
8529        self._fields.16 = value;
8530        self
8531    }
8532}
8533
8534impl<St: game_detail_view_state::State, S: BosStr> GameDetailViewBuilder<St, S> {
8535    /// Set the `playerPerspectives` field (optional)
8536    pub fn player_perspectives(
8537        mut self,
8538        value: impl Into<Option<Vec<games_gamesgamesgamesgames::PlayerPerspective<S>>>>,
8539    ) -> Self {
8540        self._fields.17 = value.into();
8541        self
8542    }
8543    /// Set the `playerPerspectives` field to an Option value (optional)
8544    pub fn maybe_player_perspectives(
8545        mut self,
8546        value: Option<Vec<games_gamesgamesgamesgames::PlayerPerspective<S>>>,
8547    ) -> Self {
8548        self._fields.17 = value;
8549        self
8550    }
8551}
8552
8553impl<St: game_detail_view_state::State, S: BosStr> GameDetailViewBuilder<St, S> {
8554    /// Set the `publishedAt` field (optional)
8555    pub fn published_at(mut self, value: impl Into<Option<Datetime>>) -> Self {
8556        self._fields.18 = value.into();
8557        self
8558    }
8559    /// Set the `publishedAt` field to an Option value (optional)
8560    pub fn maybe_published_at(mut self, value: Option<Datetime>) -> Self {
8561        self._fields.18 = value;
8562        self
8563    }
8564}
8565
8566impl<St: game_detail_view_state::State, S: BosStr> GameDetailViewBuilder<St, S> {
8567    /// Set the `releases` field (optional)
8568    pub fn releases(
8569        mut self,
8570        value: impl Into<Option<Vec<games_gamesgamesgamesgames::Release<S>>>>,
8571    ) -> Self {
8572        self._fields.19 = value.into();
8573        self
8574    }
8575    /// Set the `releases` field to an Option value (optional)
8576    pub fn maybe_releases(
8577        mut self,
8578        value: Option<Vec<games_gamesgamesgamesgames::Release<S>>>,
8579    ) -> Self {
8580        self._fields.19 = value;
8581        self
8582    }
8583}
8584
8585impl<St: game_detail_view_state::State, S: BosStr> GameDetailViewBuilder<St, S> {
8586    /// Set the `slug` field (optional)
8587    pub fn slug(mut self, value: impl Into<Option<S>>) -> Self {
8588        self._fields.20 = value.into();
8589        self
8590    }
8591    /// Set the `slug` field to an Option value (optional)
8592    pub fn maybe_slug(mut self, value: Option<S>) -> Self {
8593        self._fields.20 = value;
8594        self
8595    }
8596}
8597
8598impl<St: game_detail_view_state::State, S: BosStr> GameDetailViewBuilder<St, S> {
8599    /// Set the `storyline` field (optional)
8600    pub fn storyline(mut self, value: impl Into<Option<S>>) -> Self {
8601        self._fields.21 = value.into();
8602        self
8603    }
8604    /// Set the `storyline` field to an Option value (optional)
8605    pub fn maybe_storyline(mut self, value: Option<S>) -> Self {
8606        self._fields.21 = value;
8607        self
8608    }
8609}
8610
8611impl<St: game_detail_view_state::State, S: BosStr> GameDetailViewBuilder<St, S> {
8612    /// Set the `summary` field (optional)
8613    pub fn summary(mut self, value: impl Into<Option<S>>) -> Self {
8614        self._fields.22 = value.into();
8615        self
8616    }
8617    /// Set the `summary` field to an Option value (optional)
8618    pub fn maybe_summary(mut self, value: Option<S>) -> Self {
8619        self._fields.22 = value;
8620        self
8621    }
8622}
8623
8624impl<St: game_detail_view_state::State, S: BosStr> GameDetailViewBuilder<St, S> {
8625    /// Set the `themes` field (optional)
8626    pub fn themes(
8627        mut self,
8628        value: impl Into<Option<Vec<games_gamesgamesgamesgames::Theme<S>>>>,
8629    ) -> Self {
8630        self._fields.23 = value.into();
8631        self
8632    }
8633    /// Set the `themes` field to an Option value (optional)
8634    pub fn maybe_themes(
8635        mut self,
8636        value: Option<Vec<games_gamesgamesgamesgames::Theme<S>>>,
8637    ) -> Self {
8638        self._fields.23 = value;
8639        self
8640    }
8641}
8642
8643impl<St: game_detail_view_state::State, S: BosStr> GameDetailViewBuilder<St, S> {
8644    /// Set the `timeToBeat` field (optional)
8645    pub fn time_to_beat(
8646        mut self,
8647        value: impl Into<Option<games_gamesgamesgamesgames::TimeToBeat<S>>>,
8648    ) -> Self {
8649        self._fields.24 = value.into();
8650        self
8651    }
8652    /// Set the `timeToBeat` field to an Option value (optional)
8653    pub fn maybe_time_to_beat(
8654        mut self,
8655        value: Option<games_gamesgamesgamesgames::TimeToBeat<S>>,
8656    ) -> Self {
8657        self._fields.24 = value;
8658        self
8659    }
8660}
8661
8662impl<St, S: BosStr> GameDetailViewBuilder<St, S>
8663where
8664    St: game_detail_view_state::State,
8665    St::Uri: game_detail_view_state::IsUnset,
8666{
8667    /// Set the `uri` field (required)
8668    pub fn uri(
8669        mut self,
8670        value: impl Into<AtUri<S>>,
8671    ) -> GameDetailViewBuilder<game_detail_view_state::SetUri<St>, S> {
8672        self._fields.25 = Option::Some(value.into());
8673        GameDetailViewBuilder {
8674            _state: PhantomData,
8675            _fields: self._fields,
8676            _type: PhantomData,
8677        }
8678    }
8679}
8680
8681impl<St: game_detail_view_state::State, S: BosStr> GameDetailViewBuilder<St, S> {
8682    /// Set the `videos` field (optional)
8683    pub fn videos(
8684        mut self,
8685        value: impl Into<Option<Vec<games_gamesgamesgamesgames::ExternalVideo<S>>>>,
8686    ) -> Self {
8687        self._fields.26 = value.into();
8688        self
8689    }
8690    /// Set the `videos` field to an Option value (optional)
8691    pub fn maybe_videos(
8692        mut self,
8693        value: Option<Vec<games_gamesgamesgamesgames::ExternalVideo<S>>>,
8694    ) -> Self {
8695        self._fields.26 = value;
8696        self
8697    }
8698}
8699
8700impl<St: game_detail_view_state::State, S: BosStr> GameDetailViewBuilder<St, S> {
8701    /// Set the `websites` field (optional)
8702    pub fn websites(
8703        mut self,
8704        value: impl Into<Option<Vec<games_gamesgamesgamesgames::Website<S>>>>,
8705    ) -> Self {
8706        self._fields.27 = value.into();
8707        self
8708    }
8709    /// Set the `websites` field to an Option value (optional)
8710    pub fn maybe_websites(
8711        mut self,
8712        value: Option<Vec<games_gamesgamesgamesgames::Website<S>>>,
8713    ) -> Self {
8714        self._fields.27 = value;
8715        self
8716    }
8717}
8718
8719impl<St, S: BosStr> GameDetailViewBuilder<St, S>
8720where
8721    St: game_detail_view_state::State,
8722    St::CreatedAt: game_detail_view_state::IsSet,
8723    St::Name: game_detail_view_state::IsSet,
8724    St::Uri: game_detail_view_state::IsSet,
8725{
8726    /// Build the final struct.
8727    pub fn build(self) -> GameDetailView<S> {
8728        GameDetailView {
8729            actor_credits: self._fields.0,
8730            age_ratings: self._fields.1,
8731            alternative_names: self._fields.2,
8732            application_type: self._fields.3,
8733            collections: self._fields.4,
8734            created_at: self._fields.5.unwrap(),
8735            engines: self._fields.6,
8736            external_ids: self._fields.7,
8737            genres: self._fields.8,
8738            keywords: self._fields.9,
8739            language_supports: self._fields.10,
8740            media: self._fields.11,
8741            modes: self._fields.12,
8742            multiplayer_modes: self._fields.13,
8743            name: self._fields.14.unwrap(),
8744            org_credits: self._fields.15,
8745            parent: self._fields.16,
8746            player_perspectives: self._fields.17,
8747            published_at: self._fields.18,
8748            releases: self._fields.19,
8749            slug: self._fields.20,
8750            storyline: self._fields.21,
8751            summary: self._fields.22,
8752            themes: self._fields.23,
8753            time_to_beat: self._fields.24,
8754            uri: self._fields.25.unwrap(),
8755            videos: self._fields.26,
8756            websites: self._fields.27,
8757            extra_data: Default::default(),
8758        }
8759    }
8760    /// Build the final struct with custom extra_data.
8761    pub fn build_with_data(self, extra_data: BTreeMap<SmolStr, Data<S>>) -> GameDetailView<S> {
8762        GameDetailView {
8763            actor_credits: self._fields.0,
8764            age_ratings: self._fields.1,
8765            alternative_names: self._fields.2,
8766            application_type: self._fields.3,
8767            collections: self._fields.4,
8768            created_at: self._fields.5.unwrap(),
8769            engines: self._fields.6,
8770            external_ids: self._fields.7,
8771            genres: self._fields.8,
8772            keywords: self._fields.9,
8773            language_supports: self._fields.10,
8774            media: self._fields.11,
8775            modes: self._fields.12,
8776            multiplayer_modes: self._fields.13,
8777            name: self._fields.14.unwrap(),
8778            org_credits: self._fields.15,
8779            parent: self._fields.16,
8780            player_perspectives: self._fields.17,
8781            published_at: self._fields.18,
8782            releases: self._fields.19,
8783            slug: self._fields.20,
8784            storyline: self._fields.21,
8785            summary: self._fields.22,
8786            themes: self._fields.23,
8787            time_to_beat: self._fields.24,
8788            uri: self._fields.25.unwrap(),
8789            videos: self._fields.26,
8790            websites: self._fields.27,
8791            extra_data: Some(extra_data),
8792        }
8793    }
8794}
8795
8796pub mod game_feed_view_item_state {
8797
8798    pub use crate::builder_types::{IsSet, IsUnset, Set, Unset};
8799    #[allow(unused)]
8800    use ::core::marker::PhantomData;
8801    mod sealed {
8802        pub trait Sealed {}
8803    }
8804    /// State trait tracking which required fields have been set
8805    pub trait State: sealed::Sealed {
8806        type Game;
8807    }
8808    /// Empty state - all required fields are unset
8809    pub struct Empty(());
8810    impl sealed::Sealed for Empty {}
8811    impl State for Empty {
8812        type Game = Unset;
8813    }
8814    ///State transition - sets the `game` field to Set
8815    pub struct SetGame<St: State = Empty>(PhantomData<fn() -> St>);
8816    impl<St: State> sealed::Sealed for SetGame<St> {}
8817    impl<St: State> State for SetGame<St> {
8818        type Game = Set<members::game>;
8819    }
8820    /// Marker types for field names
8821    #[allow(non_camel_case_types)]
8822    pub mod members {
8823        ///Marker type for the `game` field
8824        pub struct game(());
8825    }
8826}
8827
8828/// Builder for constructing an instance of this type.
8829pub struct GameFeedViewItemBuilder<St: game_feed_view_item_state::State, S: BosStr = DefaultStr> {
8830    _state: PhantomData<fn() -> St>,
8831    _fields: (Option<S>, Option<games_gamesgamesgamesgames::GameView<S>>),
8832    _type: PhantomData<fn() -> S>,
8833}
8834
8835impl GameFeedViewItem<DefaultStr> {
8836    /// Create a new builder for this type, using the default string type (DefaultStr = SmolStr) if needed
8837    pub fn new() -> GameFeedViewItemBuilder<game_feed_view_item_state::Empty, DefaultStr> {
8838        GameFeedViewItemBuilder::new()
8839    }
8840}
8841
8842impl<S: BosStr> GameFeedViewItem<S> {
8843    /// Create a new builder for this type
8844    pub fn builder() -> GameFeedViewItemBuilder<game_feed_view_item_state::Empty, S> {
8845        GameFeedViewItemBuilder::builder()
8846    }
8847}
8848
8849impl GameFeedViewItemBuilder<game_feed_view_item_state::Empty, DefaultStr> {
8850    /// Create a new builder with all fields unset, using the default string type, if needed
8851    pub fn new() -> Self {
8852        GameFeedViewItemBuilder {
8853            _state: PhantomData,
8854            _fields: (None, None),
8855            _type: PhantomData,
8856        }
8857    }
8858}
8859
8860impl<S: BosStr> GameFeedViewItemBuilder<game_feed_view_item_state::Empty, S> {
8861    /// Create a new builder with all fields unset
8862    pub fn builder() -> Self {
8863        GameFeedViewItemBuilder {
8864            _state: PhantomData,
8865            _fields: (None, None),
8866            _type: PhantomData,
8867        }
8868    }
8869}
8870
8871impl<St: game_feed_view_item_state::State, S: BosStr> GameFeedViewItemBuilder<St, S> {
8872    /// Set the `feedContext` field (optional)
8873    pub fn feed_context(mut self, value: impl Into<Option<S>>) -> Self {
8874        self._fields.0 = value.into();
8875        self
8876    }
8877    /// Set the `feedContext` field to an Option value (optional)
8878    pub fn maybe_feed_context(mut self, value: Option<S>) -> Self {
8879        self._fields.0 = value;
8880        self
8881    }
8882}
8883
8884impl<St, S: BosStr> GameFeedViewItemBuilder<St, S>
8885where
8886    St: game_feed_view_item_state::State,
8887    St::Game: game_feed_view_item_state::IsUnset,
8888{
8889    /// Set the `game` field (required)
8890    pub fn game(
8891        mut self,
8892        value: impl Into<games_gamesgamesgamesgames::GameView<S>>,
8893    ) -> GameFeedViewItemBuilder<game_feed_view_item_state::SetGame<St>, S> {
8894        self._fields.1 = Option::Some(value.into());
8895        GameFeedViewItemBuilder {
8896            _state: PhantomData,
8897            _fields: self._fields,
8898            _type: PhantomData,
8899        }
8900    }
8901}
8902
8903impl<St, S: BosStr> GameFeedViewItemBuilder<St, S>
8904where
8905    St: game_feed_view_item_state::State,
8906    St::Game: game_feed_view_item_state::IsSet,
8907{
8908    /// Build the final struct.
8909    pub fn build(self) -> GameFeedViewItem<S> {
8910        GameFeedViewItem {
8911            feed_context: self._fields.0,
8912            game: self._fields.1.unwrap(),
8913            extra_data: Default::default(),
8914        }
8915    }
8916    /// Build the final struct with custom extra_data.
8917    pub fn build_with_data(self, extra_data: BTreeMap<SmolStr, Data<S>>) -> GameFeedViewItem<S> {
8918        GameFeedViewItem {
8919            feed_context: self._fields.0,
8920            game: self._fields.1.unwrap(),
8921            extra_data: Some(extra_data),
8922        }
8923    }
8924}
8925
8926pub mod game_summary_view_state {
8927
8928    pub use crate::builder_types::{IsSet, IsUnset, Set, Unset};
8929    #[allow(unused)]
8930    use ::core::marker::PhantomData;
8931    mod sealed {
8932        pub trait Sealed {}
8933    }
8934    /// State trait tracking which required fields have been set
8935    pub trait State: sealed::Sealed {
8936        type Name;
8937        type Uri;
8938    }
8939    /// Empty state - all required fields are unset
8940    pub struct Empty(());
8941    impl sealed::Sealed for Empty {}
8942    impl State for Empty {
8943        type Name = Unset;
8944        type Uri = Unset;
8945    }
8946    ///State transition - sets the `name` field to Set
8947    pub struct SetName<St: State = Empty>(PhantomData<fn() -> St>);
8948    impl<St: State> sealed::Sealed for SetName<St> {}
8949    impl<St: State> State for SetName<St> {
8950        type Name = Set<members::name>;
8951        type Uri = St::Uri;
8952    }
8953    ///State transition - sets the `uri` field to Set
8954    pub struct SetUri<St: State = Empty>(PhantomData<fn() -> St>);
8955    impl<St: State> sealed::Sealed for SetUri<St> {}
8956    impl<St: State> State for SetUri<St> {
8957        type Name = St::Name;
8958        type Uri = Set<members::uri>;
8959    }
8960    /// Marker types for field names
8961    #[allow(non_camel_case_types)]
8962    pub mod members {
8963        ///Marker type for the `name` field
8964        pub struct name(());
8965        ///Marker type for the `uri` field
8966        pub struct uri(());
8967    }
8968}
8969
8970/// Builder for constructing an instance of this type.
8971pub struct GameSummaryViewBuilder<St: game_summary_view_state::State, S: BosStr = DefaultStr> {
8972    _state: PhantomData<fn() -> St>,
8973    _fields: (
8974        Option<games_gamesgamesgamesgames::ApplicationType<S>>,
8975        Option<i64>,
8976        Option<Vec<games_gamesgamesgamesgames::MediaItem<S>>>,
8977        Option<S>,
8978        Option<S>,
8979        Option<S>,
8980        Option<AtUri<S>>,
8981    ),
8982    _type: PhantomData<fn() -> S>,
8983}
8984
8985impl GameSummaryView<DefaultStr> {
8986    /// Create a new builder for this type, using the default string type (DefaultStr = SmolStr) if needed
8987    pub fn new() -> GameSummaryViewBuilder<game_summary_view_state::Empty, DefaultStr> {
8988        GameSummaryViewBuilder::new()
8989    }
8990}
8991
8992impl<S: BosStr> GameSummaryView<S> {
8993    /// Create a new builder for this type
8994    pub fn builder() -> GameSummaryViewBuilder<game_summary_view_state::Empty, S> {
8995        GameSummaryViewBuilder::builder()
8996    }
8997}
8998
8999impl GameSummaryViewBuilder<game_summary_view_state::Empty, DefaultStr> {
9000    /// Create a new builder with all fields unset, using the default string type, if needed
9001    pub fn new() -> Self {
9002        GameSummaryViewBuilder {
9003            _state: PhantomData,
9004            _fields: (None, None, None, None, None, None, None),
9005            _type: PhantomData,
9006        }
9007    }
9008}
9009
9010impl<S: BosStr> GameSummaryViewBuilder<game_summary_view_state::Empty, S> {
9011    /// Create a new builder with all fields unset
9012    pub fn builder() -> Self {
9013        GameSummaryViewBuilder {
9014            _state: PhantomData,
9015            _fields: (None, None, None, None, None, None, None),
9016            _type: PhantomData,
9017        }
9018    }
9019}
9020
9021impl<St: game_summary_view_state::State, S: BosStr> GameSummaryViewBuilder<St, S> {
9022    /// Set the `applicationType` field (optional)
9023    pub fn application_type(
9024        mut self,
9025        value: impl Into<Option<games_gamesgamesgamesgames::ApplicationType<S>>>,
9026    ) -> Self {
9027        self._fields.0 = value.into();
9028        self
9029    }
9030    /// Set the `applicationType` field to an Option value (optional)
9031    pub fn maybe_application_type(
9032        mut self,
9033        value: Option<games_gamesgamesgamesgames::ApplicationType<S>>,
9034    ) -> Self {
9035        self._fields.0 = value;
9036        self
9037    }
9038}
9039
9040impl<St: game_summary_view_state::State, S: BosStr> GameSummaryViewBuilder<St, S> {
9041    /// Set the `firstReleaseDate` field (optional)
9042    pub fn first_release_date(mut self, value: impl Into<Option<i64>>) -> Self {
9043        self._fields.1 = value.into();
9044        self
9045    }
9046    /// Set the `firstReleaseDate` field to an Option value (optional)
9047    pub fn maybe_first_release_date(mut self, value: Option<i64>) -> Self {
9048        self._fields.1 = value;
9049        self
9050    }
9051}
9052
9053impl<St: game_summary_view_state::State, S: BosStr> GameSummaryViewBuilder<St, S> {
9054    /// Set the `media` field (optional)
9055    pub fn media(
9056        mut self,
9057        value: impl Into<Option<Vec<games_gamesgamesgamesgames::MediaItem<S>>>>,
9058    ) -> Self {
9059        self._fields.2 = value.into();
9060        self
9061    }
9062    /// Set the `media` field to an Option value (optional)
9063    pub fn maybe_media(
9064        mut self,
9065        value: Option<Vec<games_gamesgamesgamesgames::MediaItem<S>>>,
9066    ) -> Self {
9067        self._fields.2 = value;
9068        self
9069    }
9070}
9071
9072impl<St, S: BosStr> GameSummaryViewBuilder<St, S>
9073where
9074    St: game_summary_view_state::State,
9075    St::Name: game_summary_view_state::IsUnset,
9076{
9077    /// Set the `name` field (required)
9078    pub fn name(
9079        mut self,
9080        value: impl Into<S>,
9081    ) -> GameSummaryViewBuilder<game_summary_view_state::SetName<St>, S> {
9082        self._fields.3 = Option::Some(value.into());
9083        GameSummaryViewBuilder {
9084            _state: PhantomData,
9085            _fields: self._fields,
9086            _type: PhantomData,
9087        }
9088    }
9089}
9090
9091impl<St: game_summary_view_state::State, S: BosStr> GameSummaryViewBuilder<St, S> {
9092    /// Set the `slug` field (optional)
9093    pub fn slug(mut self, value: impl Into<Option<S>>) -> Self {
9094        self._fields.4 = value.into();
9095        self
9096    }
9097    /// Set the `slug` field to an Option value (optional)
9098    pub fn maybe_slug(mut self, value: Option<S>) -> Self {
9099        self._fields.4 = value;
9100        self
9101    }
9102}
9103
9104impl<St: game_summary_view_state::State, S: BosStr> GameSummaryViewBuilder<St, S> {
9105    /// Set the `summary` field (optional)
9106    pub fn summary(mut self, value: impl Into<Option<S>>) -> Self {
9107        self._fields.5 = value.into();
9108        self
9109    }
9110    /// Set the `summary` field to an Option value (optional)
9111    pub fn maybe_summary(mut self, value: Option<S>) -> Self {
9112        self._fields.5 = value;
9113        self
9114    }
9115}
9116
9117impl<St, S: BosStr> GameSummaryViewBuilder<St, S>
9118where
9119    St: game_summary_view_state::State,
9120    St::Uri: game_summary_view_state::IsUnset,
9121{
9122    /// Set the `uri` field (required)
9123    pub fn uri(
9124        mut self,
9125        value: impl Into<AtUri<S>>,
9126    ) -> GameSummaryViewBuilder<game_summary_view_state::SetUri<St>, S> {
9127        self._fields.6 = Option::Some(value.into());
9128        GameSummaryViewBuilder {
9129            _state: PhantomData,
9130            _fields: self._fields,
9131            _type: PhantomData,
9132        }
9133    }
9134}
9135
9136impl<St, S: BosStr> GameSummaryViewBuilder<St, S>
9137where
9138    St: game_summary_view_state::State,
9139    St::Name: game_summary_view_state::IsSet,
9140    St::Uri: game_summary_view_state::IsSet,
9141{
9142    /// Build the final struct.
9143    pub fn build(self) -> GameSummaryView<S> {
9144        GameSummaryView {
9145            application_type: self._fields.0,
9146            first_release_date: self._fields.1,
9147            media: self._fields.2,
9148            name: self._fields.3.unwrap(),
9149            slug: self._fields.4,
9150            summary: self._fields.5,
9151            uri: self._fields.6.unwrap(),
9152            extra_data: Default::default(),
9153        }
9154    }
9155    /// Build the final struct with custom extra_data.
9156    pub fn build_with_data(self, extra_data: BTreeMap<SmolStr, Data<S>>) -> GameSummaryView<S> {
9157        GameSummaryView {
9158            application_type: self._fields.0,
9159            first_release_date: self._fields.1,
9160            media: self._fields.2,
9161            name: self._fields.3.unwrap(),
9162            slug: self._fields.4,
9163            summary: self._fields.5,
9164            uri: self._fields.6.unwrap(),
9165            extra_data: Some(extra_data),
9166        }
9167    }
9168}
9169
9170pub mod game_view_state {
9171
9172    pub use crate::builder_types::{IsSet, IsUnset, Set, Unset};
9173    #[allow(unused)]
9174    use ::core::marker::PhantomData;
9175    mod sealed {
9176        pub trait Sealed {}
9177    }
9178    /// State trait tracking which required fields have been set
9179    pub trait State: sealed::Sealed {
9180        type ApplicationType;
9181        type Name;
9182        type Uri;
9183    }
9184    /// Empty state - all required fields are unset
9185    pub struct Empty(());
9186    impl sealed::Sealed for Empty {}
9187    impl State for Empty {
9188        type ApplicationType = Unset;
9189        type Name = Unset;
9190        type Uri = Unset;
9191    }
9192    ///State transition - sets the `application_type` field to Set
9193    pub struct SetApplicationType<St: State = Empty>(PhantomData<fn() -> St>);
9194    impl<St: State> sealed::Sealed for SetApplicationType<St> {}
9195    impl<St: State> State for SetApplicationType<St> {
9196        type ApplicationType = Set<members::application_type>;
9197        type Name = St::Name;
9198        type Uri = St::Uri;
9199    }
9200    ///State transition - sets the `name` field to Set
9201    pub struct SetName<St: State = Empty>(PhantomData<fn() -> St>);
9202    impl<St: State> sealed::Sealed for SetName<St> {}
9203    impl<St: State> State for SetName<St> {
9204        type ApplicationType = St::ApplicationType;
9205        type Name = Set<members::name>;
9206        type Uri = St::Uri;
9207    }
9208    ///State transition - sets the `uri` field to Set
9209    pub struct SetUri<St: State = Empty>(PhantomData<fn() -> St>);
9210    impl<St: State> sealed::Sealed for SetUri<St> {}
9211    impl<St: State> State for SetUri<St> {
9212        type ApplicationType = St::ApplicationType;
9213        type Name = St::Name;
9214        type Uri = Set<members::uri>;
9215    }
9216    /// Marker types for field names
9217    #[allow(non_camel_case_types)]
9218    pub mod members {
9219        ///Marker type for the `application_type` field
9220        pub struct application_type(());
9221        ///Marker type for the `name` field
9222        pub struct name(());
9223        ///Marker type for the `uri` field
9224        pub struct uri(());
9225    }
9226}
9227
9228/// Builder for constructing an instance of this type.
9229pub struct GameViewBuilder<St: game_view_state::State, S: BosStr = DefaultStr> {
9230    _state: PhantomData<fn() -> St>,
9231    _fields: (
9232        Option<games_gamesgamesgamesgames::ApplicationType<S>>,
9233        Option<Vec<games_gamesgamesgamesgames::Genre<S>>>,
9234        Option<i64>,
9235        Option<Vec<games_gamesgamesgamesgames::MediaItem<S>>>,
9236        Option<S>,
9237        Option<Vec<games_gamesgamesgamesgames::Release<S>>>,
9238        Option<S>,
9239        Option<S>,
9240        Option<Vec<games_gamesgamesgamesgames::Theme<S>>>,
9241        Option<AtUri<S>>,
9242        Option<games_gamesgamesgamesgames::ViewerState<S>>,
9243    ),
9244    _type: PhantomData<fn() -> S>,
9245}
9246
9247impl GameView<DefaultStr> {
9248    /// Create a new builder for this type, using the default string type (DefaultStr = SmolStr) if needed
9249    pub fn new() -> GameViewBuilder<game_view_state::Empty, DefaultStr> {
9250        GameViewBuilder::new()
9251    }
9252}
9253
9254impl<S: BosStr> GameView<S> {
9255    /// Create a new builder for this type
9256    pub fn builder() -> GameViewBuilder<game_view_state::Empty, S> {
9257        GameViewBuilder::builder()
9258    }
9259}
9260
9261impl GameViewBuilder<game_view_state::Empty, DefaultStr> {
9262    /// Create a new builder with all fields unset, using the default string type, if needed
9263    pub fn new() -> Self {
9264        GameViewBuilder {
9265            _state: PhantomData,
9266            _fields: (
9267                None, None, None, None, None, None, None, None, None, None, None,
9268            ),
9269            _type: PhantomData,
9270        }
9271    }
9272}
9273
9274impl<S: BosStr> GameViewBuilder<game_view_state::Empty, S> {
9275    /// Create a new builder with all fields unset
9276    pub fn builder() -> Self {
9277        GameViewBuilder {
9278            _state: PhantomData,
9279            _fields: (
9280                None, None, None, None, None, None, None, None, None, None, None,
9281            ),
9282            _type: PhantomData,
9283        }
9284    }
9285}
9286
9287impl<St, S: BosStr> GameViewBuilder<St, S>
9288where
9289    St: game_view_state::State,
9290    St::ApplicationType: game_view_state::IsUnset,
9291{
9292    /// Set the `applicationType` field (required)
9293    pub fn application_type(
9294        mut self,
9295        value: impl Into<games_gamesgamesgamesgames::ApplicationType<S>>,
9296    ) -> GameViewBuilder<game_view_state::SetApplicationType<St>, S> {
9297        self._fields.0 = Option::Some(value.into());
9298        GameViewBuilder {
9299            _state: PhantomData,
9300            _fields: self._fields,
9301            _type: PhantomData,
9302        }
9303    }
9304}
9305
9306impl<St: game_view_state::State, S: BosStr> GameViewBuilder<St, S> {
9307    /// Set the `genres` field (optional)
9308    pub fn genres(
9309        mut self,
9310        value: impl Into<Option<Vec<games_gamesgamesgamesgames::Genre<S>>>>,
9311    ) -> Self {
9312        self._fields.1 = value.into();
9313        self
9314    }
9315    /// Set the `genres` field to an Option value (optional)
9316    pub fn maybe_genres(
9317        mut self,
9318        value: Option<Vec<games_gamesgamesgamesgames::Genre<S>>>,
9319    ) -> Self {
9320        self._fields.1 = value;
9321        self
9322    }
9323}
9324
9325impl<St: game_view_state::State, S: BosStr> GameViewBuilder<St, S> {
9326    /// Set the `likeCount` field (optional)
9327    pub fn like_count(mut self, value: impl Into<Option<i64>>) -> Self {
9328        self._fields.2 = value.into();
9329        self
9330    }
9331    /// Set the `likeCount` field to an Option value (optional)
9332    pub fn maybe_like_count(mut self, value: Option<i64>) -> Self {
9333        self._fields.2 = value;
9334        self
9335    }
9336}
9337
9338impl<St: game_view_state::State, S: BosStr> GameViewBuilder<St, S> {
9339    /// Set the `media` field (optional)
9340    pub fn media(
9341        mut self,
9342        value: impl Into<Option<Vec<games_gamesgamesgamesgames::MediaItem<S>>>>,
9343    ) -> Self {
9344        self._fields.3 = value.into();
9345        self
9346    }
9347    /// Set the `media` field to an Option value (optional)
9348    pub fn maybe_media(
9349        mut self,
9350        value: Option<Vec<games_gamesgamesgamesgames::MediaItem<S>>>,
9351    ) -> Self {
9352        self._fields.3 = value;
9353        self
9354    }
9355}
9356
9357impl<St, S: BosStr> GameViewBuilder<St, S>
9358where
9359    St: game_view_state::State,
9360    St::Name: game_view_state::IsUnset,
9361{
9362    /// Set the `name` field (required)
9363    pub fn name(mut self, value: impl Into<S>) -> GameViewBuilder<game_view_state::SetName<St>, S> {
9364        self._fields.4 = Option::Some(value.into());
9365        GameViewBuilder {
9366            _state: PhantomData,
9367            _fields: self._fields,
9368            _type: PhantomData,
9369        }
9370    }
9371}
9372
9373impl<St: game_view_state::State, S: BosStr> GameViewBuilder<St, S> {
9374    /// Set the `releases` field (optional)
9375    pub fn releases(
9376        mut self,
9377        value: impl Into<Option<Vec<games_gamesgamesgamesgames::Release<S>>>>,
9378    ) -> Self {
9379        self._fields.5 = value.into();
9380        self
9381    }
9382    /// Set the `releases` field to an Option value (optional)
9383    pub fn maybe_releases(
9384        mut self,
9385        value: Option<Vec<games_gamesgamesgamesgames::Release<S>>>,
9386    ) -> Self {
9387        self._fields.5 = value;
9388        self
9389    }
9390}
9391
9392impl<St: game_view_state::State, S: BosStr> GameViewBuilder<St, S> {
9393    /// Set the `slug` field (optional)
9394    pub fn slug(mut self, value: impl Into<Option<S>>) -> Self {
9395        self._fields.6 = value.into();
9396        self
9397    }
9398    /// Set the `slug` field to an Option value (optional)
9399    pub fn maybe_slug(mut self, value: Option<S>) -> Self {
9400        self._fields.6 = value;
9401        self
9402    }
9403}
9404
9405impl<St: game_view_state::State, S: BosStr> GameViewBuilder<St, S> {
9406    /// Set the `summary` field (optional)
9407    pub fn summary(mut self, value: impl Into<Option<S>>) -> Self {
9408        self._fields.7 = value.into();
9409        self
9410    }
9411    /// Set the `summary` field to an Option value (optional)
9412    pub fn maybe_summary(mut self, value: Option<S>) -> Self {
9413        self._fields.7 = value;
9414        self
9415    }
9416}
9417
9418impl<St: game_view_state::State, S: BosStr> GameViewBuilder<St, S> {
9419    /// Set the `themes` field (optional)
9420    pub fn themes(
9421        mut self,
9422        value: impl Into<Option<Vec<games_gamesgamesgamesgames::Theme<S>>>>,
9423    ) -> Self {
9424        self._fields.8 = value.into();
9425        self
9426    }
9427    /// Set the `themes` field to an Option value (optional)
9428    pub fn maybe_themes(
9429        mut self,
9430        value: Option<Vec<games_gamesgamesgamesgames::Theme<S>>>,
9431    ) -> Self {
9432        self._fields.8 = value;
9433        self
9434    }
9435}
9436
9437impl<St, S: BosStr> GameViewBuilder<St, S>
9438where
9439    St: game_view_state::State,
9440    St::Uri: game_view_state::IsUnset,
9441{
9442    /// Set the `uri` field (required)
9443    pub fn uri(
9444        mut self,
9445        value: impl Into<AtUri<S>>,
9446    ) -> GameViewBuilder<game_view_state::SetUri<St>, S> {
9447        self._fields.9 = Option::Some(value.into());
9448        GameViewBuilder {
9449            _state: PhantomData,
9450            _fields: self._fields,
9451            _type: PhantomData,
9452        }
9453    }
9454}
9455
9456impl<St: game_view_state::State, S: BosStr> GameViewBuilder<St, S> {
9457    /// Set the `viewer` field (optional)
9458    pub fn viewer(
9459        mut self,
9460        value: impl Into<Option<games_gamesgamesgamesgames::ViewerState<S>>>,
9461    ) -> Self {
9462        self._fields.10 = value.into();
9463        self
9464    }
9465    /// Set the `viewer` field to an Option value (optional)
9466    pub fn maybe_viewer(
9467        mut self,
9468        value: Option<games_gamesgamesgamesgames::ViewerState<S>>,
9469    ) -> Self {
9470        self._fields.10 = value;
9471        self
9472    }
9473}
9474
9475impl<St, S: BosStr> GameViewBuilder<St, S>
9476where
9477    St: game_view_state::State,
9478    St::ApplicationType: game_view_state::IsSet,
9479    St::Name: game_view_state::IsSet,
9480    St::Uri: game_view_state::IsSet,
9481{
9482    /// Build the final struct.
9483    pub fn build(self) -> GameView<S> {
9484        GameView {
9485            application_type: self._fields.0.unwrap(),
9486            genres: self._fields.1,
9487            like_count: self._fields.2,
9488            media: self._fields.3,
9489            name: self._fields.4.unwrap(),
9490            releases: self._fields.5,
9491            slug: self._fields.6,
9492            summary: self._fields.7,
9493            themes: self._fields.8,
9494            uri: self._fields.9.unwrap(),
9495            viewer: self._fields.10,
9496            extra_data: Default::default(),
9497        }
9498    }
9499    /// Build the final struct with custom extra_data.
9500    pub fn build_with_data(self, extra_data: BTreeMap<SmolStr, Data<S>>) -> GameView<S> {
9501        GameView {
9502            application_type: self._fields.0.unwrap(),
9503            genres: self._fields.1,
9504            like_count: self._fields.2,
9505            media: self._fields.3,
9506            name: self._fields.4.unwrap(),
9507            releases: self._fields.5,
9508            slug: self._fields.6,
9509            summary: self._fields.7,
9510            themes: self._fields.8,
9511            uri: self._fields.9.unwrap(),
9512            viewer: self._fields.10,
9513            extra_data: Some(extra_data),
9514        }
9515    }
9516}
9517
9518pub mod org_credit_view_state {
9519
9520    pub use crate::builder_types::{IsSet, IsUnset, Set, Unset};
9521    #[allow(unused)]
9522    use ::core::marker::PhantomData;
9523    mod sealed {
9524        pub trait Sealed {}
9525    }
9526    /// State trait tracking which required fields have been set
9527    pub trait State: sealed::Sealed {
9528        type Roles;
9529        type Uri;
9530    }
9531    /// Empty state - all required fields are unset
9532    pub struct Empty(());
9533    impl sealed::Sealed for Empty {}
9534    impl State for Empty {
9535        type Roles = Unset;
9536        type Uri = Unset;
9537    }
9538    ///State transition - sets the `roles` field to Set
9539    pub struct SetRoles<St: State = Empty>(PhantomData<fn() -> St>);
9540    impl<St: State> sealed::Sealed for SetRoles<St> {}
9541    impl<St: State> State for SetRoles<St> {
9542        type Roles = Set<members::roles>;
9543        type Uri = St::Uri;
9544    }
9545    ///State transition - sets the `uri` field to Set
9546    pub struct SetUri<St: State = Empty>(PhantomData<fn() -> St>);
9547    impl<St: State> sealed::Sealed for SetUri<St> {}
9548    impl<St: State> State for SetUri<St> {
9549        type Roles = St::Roles;
9550        type Uri = Set<members::uri>;
9551    }
9552    /// Marker types for field names
9553    #[allow(non_camel_case_types)]
9554    pub mod members {
9555        ///Marker type for the `roles` field
9556        pub struct roles(());
9557        ///Marker type for the `uri` field
9558        pub struct uri(());
9559    }
9560}
9561
9562/// Builder for constructing an instance of this type.
9563pub struct OrgCreditViewBuilder<St: org_credit_view_state::State, S: BosStr = DefaultStr> {
9564    _state: PhantomData<fn() -> St>,
9565    _fields: (
9566        Option<S>,
9567        Option<AtUri<S>>,
9568        Option<Vec<games_gamesgamesgamesgames::CompanyRole<S>>>,
9569        Option<AtUri<S>>,
9570    ),
9571    _type: PhantomData<fn() -> S>,
9572}
9573
9574impl OrgCreditView<DefaultStr> {
9575    /// Create a new builder for this type, using the default string type (DefaultStr = SmolStr) if needed
9576    pub fn new() -> OrgCreditViewBuilder<org_credit_view_state::Empty, DefaultStr> {
9577        OrgCreditViewBuilder::new()
9578    }
9579}
9580
9581impl<S: BosStr> OrgCreditView<S> {
9582    /// Create a new builder for this type
9583    pub fn builder() -> OrgCreditViewBuilder<org_credit_view_state::Empty, S> {
9584        OrgCreditViewBuilder::builder()
9585    }
9586}
9587
9588impl OrgCreditViewBuilder<org_credit_view_state::Empty, DefaultStr> {
9589    /// Create a new builder with all fields unset, using the default string type, if needed
9590    pub fn new() -> Self {
9591        OrgCreditViewBuilder {
9592            _state: PhantomData,
9593            _fields: (None, None, None, None),
9594            _type: PhantomData,
9595        }
9596    }
9597}
9598
9599impl<S: BosStr> OrgCreditViewBuilder<org_credit_view_state::Empty, S> {
9600    /// Create a new builder with all fields unset
9601    pub fn builder() -> Self {
9602        OrgCreditViewBuilder {
9603            _state: PhantomData,
9604            _fields: (None, None, None, None),
9605            _type: PhantomData,
9606        }
9607    }
9608}
9609
9610impl<St: org_credit_view_state::State, S: BosStr> OrgCreditViewBuilder<St, S> {
9611    /// Set the `displayName` field (optional)
9612    pub fn display_name(mut self, value: impl Into<Option<S>>) -> Self {
9613        self._fields.0 = value.into();
9614        self
9615    }
9616    /// Set the `displayName` field to an Option value (optional)
9617    pub fn maybe_display_name(mut self, value: Option<S>) -> Self {
9618        self._fields.0 = value;
9619        self
9620    }
9621}
9622
9623impl<St: org_credit_view_state::State, S: BosStr> OrgCreditViewBuilder<St, S> {
9624    /// Set the `orgUri` field (optional)
9625    pub fn org_uri(mut self, value: impl Into<Option<AtUri<S>>>) -> Self {
9626        self._fields.1 = value.into();
9627        self
9628    }
9629    /// Set the `orgUri` field to an Option value (optional)
9630    pub fn maybe_org_uri(mut self, value: Option<AtUri<S>>) -> Self {
9631        self._fields.1 = value;
9632        self
9633    }
9634}
9635
9636impl<St, S: BosStr> OrgCreditViewBuilder<St, S>
9637where
9638    St: org_credit_view_state::State,
9639    St::Roles: org_credit_view_state::IsUnset,
9640{
9641    /// Set the `roles` field (required)
9642    pub fn roles(
9643        mut self,
9644        value: impl Into<Vec<games_gamesgamesgamesgames::CompanyRole<S>>>,
9645    ) -> OrgCreditViewBuilder<org_credit_view_state::SetRoles<St>, S> {
9646        self._fields.2 = Option::Some(value.into());
9647        OrgCreditViewBuilder {
9648            _state: PhantomData,
9649            _fields: self._fields,
9650            _type: PhantomData,
9651        }
9652    }
9653}
9654
9655impl<St, S: BosStr> OrgCreditViewBuilder<St, S>
9656where
9657    St: org_credit_view_state::State,
9658    St::Uri: org_credit_view_state::IsUnset,
9659{
9660    /// Set the `uri` field (required)
9661    pub fn uri(
9662        mut self,
9663        value: impl Into<AtUri<S>>,
9664    ) -> OrgCreditViewBuilder<org_credit_view_state::SetUri<St>, S> {
9665        self._fields.3 = Option::Some(value.into());
9666        OrgCreditViewBuilder {
9667            _state: PhantomData,
9668            _fields: self._fields,
9669            _type: PhantomData,
9670        }
9671    }
9672}
9673
9674impl<St, S: BosStr> OrgCreditViewBuilder<St, S>
9675where
9676    St: org_credit_view_state::State,
9677    St::Roles: org_credit_view_state::IsSet,
9678    St::Uri: org_credit_view_state::IsSet,
9679{
9680    /// Build the final struct.
9681    pub fn build(self) -> OrgCreditView<S> {
9682        OrgCreditView {
9683            display_name: self._fields.0,
9684            org_uri: self._fields.1,
9685            roles: self._fields.2.unwrap(),
9686            uri: self._fields.3.unwrap(),
9687            extra_data: Default::default(),
9688        }
9689    }
9690    /// Build the final struct with custom extra_data.
9691    pub fn build_with_data(self, extra_data: BTreeMap<SmolStr, Data<S>>) -> OrgCreditView<S> {
9692        OrgCreditView {
9693            display_name: self._fields.0,
9694            org_uri: self._fields.1,
9695            roles: self._fields.2.unwrap(),
9696            uri: self._fields.3.unwrap(),
9697            extra_data: Some(extra_data),
9698        }
9699    }
9700}
9701
9702pub mod org_profile_detail_view_state {
9703
9704    pub use crate::builder_types::{IsSet, IsUnset, Set, Unset};
9705    #[allow(unused)]
9706    use ::core::marker::PhantomData;
9707    mod sealed {
9708        pub trait Sealed {}
9709    }
9710    /// State trait tracking which required fields have been set
9711    pub trait State: sealed::Sealed {
9712        type Did;
9713        type Uri;
9714    }
9715    /// Empty state - all required fields are unset
9716    pub struct Empty(());
9717    impl sealed::Sealed for Empty {}
9718    impl State for Empty {
9719        type Did = Unset;
9720        type Uri = Unset;
9721    }
9722    ///State transition - sets the `did` field to Set
9723    pub struct SetDid<St: State = Empty>(PhantomData<fn() -> St>);
9724    impl<St: State> sealed::Sealed for SetDid<St> {}
9725    impl<St: State> State for SetDid<St> {
9726        type Did = Set<members::did>;
9727        type Uri = St::Uri;
9728    }
9729    ///State transition - sets the `uri` field to Set
9730    pub struct SetUri<St: State = Empty>(PhantomData<fn() -> St>);
9731    impl<St: State> sealed::Sealed for SetUri<St> {}
9732    impl<St: State> State for SetUri<St> {
9733        type Did = St::Did;
9734        type Uri = Set<members::uri>;
9735    }
9736    /// Marker types for field names
9737    #[allow(non_camel_case_types)]
9738    pub mod members {
9739        ///Marker type for the `did` field
9740        pub struct did(());
9741        ///Marker type for the `uri` field
9742        pub struct uri(());
9743    }
9744}
9745
9746/// Builder for constructing an instance of this type.
9747pub struct OrgProfileDetailViewBuilder<
9748    St: org_profile_detail_view_state::State,
9749    S: BosStr = DefaultStr,
9750> {
9751    _state: PhantomData<fn() -> St>,
9752    _fields: (
9753        Option<BlobRef<S>>,
9754        Option<S>,
9755        Option<Datetime>,
9756        Option<S>,
9757        Option<Vec<Facet<S>>>,
9758        Option<Did<S>>,
9759        Option<S>,
9760        Option<Datetime>,
9761        Option<Vec<games_gamesgamesgamesgames::MediaItem<S>>>,
9762        Option<AtUri<S>>,
9763        Option<OrgProfileDetailViewStatus<S>>,
9764        Option<AtUri<S>>,
9765        Option<Vec<games_gamesgamesgamesgames::Website<S>>>,
9766    ),
9767    _type: PhantomData<fn() -> S>,
9768}
9769
9770impl OrgProfileDetailView<DefaultStr> {
9771    /// Create a new builder for this type, using the default string type (DefaultStr = SmolStr) if needed
9772    pub fn new() -> OrgProfileDetailViewBuilder<org_profile_detail_view_state::Empty, DefaultStr> {
9773        OrgProfileDetailViewBuilder::new()
9774    }
9775}
9776
9777impl<S: BosStr> OrgProfileDetailView<S> {
9778    /// Create a new builder for this type
9779    pub fn builder() -> OrgProfileDetailViewBuilder<org_profile_detail_view_state::Empty, S> {
9780        OrgProfileDetailViewBuilder::builder()
9781    }
9782}
9783
9784impl OrgProfileDetailViewBuilder<org_profile_detail_view_state::Empty, DefaultStr> {
9785    /// Create a new builder with all fields unset, using the default string type, if needed
9786    pub fn new() -> Self {
9787        OrgProfileDetailViewBuilder {
9788            _state: PhantomData,
9789            _fields: (
9790                None, None, None, None, None, None, None, None, None, None, None, None, None,
9791            ),
9792            _type: PhantomData,
9793        }
9794    }
9795}
9796
9797impl<S: BosStr> OrgProfileDetailViewBuilder<org_profile_detail_view_state::Empty, S> {
9798    /// Create a new builder with all fields unset
9799    pub fn builder() -> Self {
9800        OrgProfileDetailViewBuilder {
9801            _state: PhantomData,
9802            _fields: (
9803                None, None, None, None, None, None, None, None, None, None, None, None, None,
9804            ),
9805            _type: PhantomData,
9806        }
9807    }
9808}
9809
9810impl<St: org_profile_detail_view_state::State, S: BosStr> OrgProfileDetailViewBuilder<St, S> {
9811    /// Set the `avatar` field (optional)
9812    pub fn avatar(mut self, value: impl Into<Option<BlobRef<S>>>) -> Self {
9813        self._fields.0 = value.into();
9814        self
9815    }
9816    /// Set the `avatar` field to an Option value (optional)
9817    pub fn maybe_avatar(mut self, value: Option<BlobRef<S>>) -> Self {
9818        self._fields.0 = value;
9819        self
9820    }
9821}
9822
9823impl<St: org_profile_detail_view_state::State, S: BosStr> OrgProfileDetailViewBuilder<St, S> {
9824    /// Set the `country` field (optional)
9825    pub fn country(mut self, value: impl Into<Option<S>>) -> Self {
9826        self._fields.1 = value.into();
9827        self
9828    }
9829    /// Set the `country` field to an Option value (optional)
9830    pub fn maybe_country(mut self, value: Option<S>) -> Self {
9831        self._fields.1 = value;
9832        self
9833    }
9834}
9835
9836impl<St: org_profile_detail_view_state::State, S: BosStr> OrgProfileDetailViewBuilder<St, S> {
9837    /// Set the `createdAt` field (optional)
9838    pub fn created_at(mut self, value: impl Into<Option<Datetime>>) -> Self {
9839        self._fields.2 = value.into();
9840        self
9841    }
9842    /// Set the `createdAt` field to an Option value (optional)
9843    pub fn maybe_created_at(mut self, value: Option<Datetime>) -> Self {
9844        self._fields.2 = value;
9845        self
9846    }
9847}
9848
9849impl<St: org_profile_detail_view_state::State, S: BosStr> OrgProfileDetailViewBuilder<St, S> {
9850    /// Set the `description` field (optional)
9851    pub fn description(mut self, value: impl Into<Option<S>>) -> Self {
9852        self._fields.3 = value.into();
9853        self
9854    }
9855    /// Set the `description` field to an Option value (optional)
9856    pub fn maybe_description(mut self, value: Option<S>) -> Self {
9857        self._fields.3 = value;
9858        self
9859    }
9860}
9861
9862impl<St: org_profile_detail_view_state::State, S: BosStr> OrgProfileDetailViewBuilder<St, S> {
9863    /// Set the `descriptionFacets` field (optional)
9864    pub fn description_facets(mut self, value: impl Into<Option<Vec<Facet<S>>>>) -> Self {
9865        self._fields.4 = value.into();
9866        self
9867    }
9868    /// Set the `descriptionFacets` field to an Option value (optional)
9869    pub fn maybe_description_facets(mut self, value: Option<Vec<Facet<S>>>) -> Self {
9870        self._fields.4 = value;
9871        self
9872    }
9873}
9874
9875impl<St, S: BosStr> OrgProfileDetailViewBuilder<St, S>
9876where
9877    St: org_profile_detail_view_state::State,
9878    St::Did: org_profile_detail_view_state::IsUnset,
9879{
9880    /// Set the `did` field (required)
9881    pub fn did(
9882        mut self,
9883        value: impl Into<Did<S>>,
9884    ) -> OrgProfileDetailViewBuilder<org_profile_detail_view_state::SetDid<St>, S> {
9885        self._fields.5 = Option::Some(value.into());
9886        OrgProfileDetailViewBuilder {
9887            _state: PhantomData,
9888            _fields: self._fields,
9889            _type: PhantomData,
9890        }
9891    }
9892}
9893
9894impl<St: org_profile_detail_view_state::State, S: BosStr> OrgProfileDetailViewBuilder<St, S> {
9895    /// Set the `displayName` field (optional)
9896    pub fn display_name(mut self, value: impl Into<Option<S>>) -> Self {
9897        self._fields.6 = value.into();
9898        self
9899    }
9900    /// Set the `displayName` field to an Option value (optional)
9901    pub fn maybe_display_name(mut self, value: Option<S>) -> Self {
9902        self._fields.6 = value;
9903        self
9904    }
9905}
9906
9907impl<St: org_profile_detail_view_state::State, S: BosStr> OrgProfileDetailViewBuilder<St, S> {
9908    /// Set the `foundedAt` field (optional)
9909    pub fn founded_at(mut self, value: impl Into<Option<Datetime>>) -> Self {
9910        self._fields.7 = value.into();
9911        self
9912    }
9913    /// Set the `foundedAt` field to an Option value (optional)
9914    pub fn maybe_founded_at(mut self, value: Option<Datetime>) -> Self {
9915        self._fields.7 = value;
9916        self
9917    }
9918}
9919
9920impl<St: org_profile_detail_view_state::State, S: BosStr> OrgProfileDetailViewBuilder<St, S> {
9921    /// Set the `media` field (optional)
9922    pub fn media(
9923        mut self,
9924        value: impl Into<Option<Vec<games_gamesgamesgamesgames::MediaItem<S>>>>,
9925    ) -> Self {
9926        self._fields.8 = value.into();
9927        self
9928    }
9929    /// Set the `media` field to an Option value (optional)
9930    pub fn maybe_media(
9931        mut self,
9932        value: Option<Vec<games_gamesgamesgamesgames::MediaItem<S>>>,
9933    ) -> Self {
9934        self._fields.8 = value;
9935        self
9936    }
9937}
9938
9939impl<St: org_profile_detail_view_state::State, S: BosStr> OrgProfileDetailViewBuilder<St, S> {
9940    /// Set the `parent` field (optional)
9941    pub fn parent(mut self, value: impl Into<Option<AtUri<S>>>) -> Self {
9942        self._fields.9 = value.into();
9943        self
9944    }
9945    /// Set the `parent` field to an Option value (optional)
9946    pub fn maybe_parent(mut self, value: Option<AtUri<S>>) -> Self {
9947        self._fields.9 = value;
9948        self
9949    }
9950}
9951
9952impl<St: org_profile_detail_view_state::State, S: BosStr> OrgProfileDetailViewBuilder<St, S> {
9953    /// Set the `status` field (optional)
9954    pub fn status(mut self, value: impl Into<Option<OrgProfileDetailViewStatus<S>>>) -> Self {
9955        self._fields.10 = value.into();
9956        self
9957    }
9958    /// Set the `status` field to an Option value (optional)
9959    pub fn maybe_status(mut self, value: Option<OrgProfileDetailViewStatus<S>>) -> Self {
9960        self._fields.10 = value;
9961        self
9962    }
9963}
9964
9965impl<St, S: BosStr> OrgProfileDetailViewBuilder<St, S>
9966where
9967    St: org_profile_detail_view_state::State,
9968    St::Uri: org_profile_detail_view_state::IsUnset,
9969{
9970    /// Set the `uri` field (required)
9971    pub fn uri(
9972        mut self,
9973        value: impl Into<AtUri<S>>,
9974    ) -> OrgProfileDetailViewBuilder<org_profile_detail_view_state::SetUri<St>, S> {
9975        self._fields.11 = Option::Some(value.into());
9976        OrgProfileDetailViewBuilder {
9977            _state: PhantomData,
9978            _fields: self._fields,
9979            _type: PhantomData,
9980        }
9981    }
9982}
9983
9984impl<St: org_profile_detail_view_state::State, S: BosStr> OrgProfileDetailViewBuilder<St, S> {
9985    /// Set the `websites` field (optional)
9986    pub fn websites(
9987        mut self,
9988        value: impl Into<Option<Vec<games_gamesgamesgamesgames::Website<S>>>>,
9989    ) -> Self {
9990        self._fields.12 = value.into();
9991        self
9992    }
9993    /// Set the `websites` field to an Option value (optional)
9994    pub fn maybe_websites(
9995        mut self,
9996        value: Option<Vec<games_gamesgamesgamesgames::Website<S>>>,
9997    ) -> Self {
9998        self._fields.12 = value;
9999        self
10000    }
10001}
10002
10003impl<St, S: BosStr> OrgProfileDetailViewBuilder<St, S>
10004where
10005    St: org_profile_detail_view_state::State,
10006    St::Did: org_profile_detail_view_state::IsSet,
10007    St::Uri: org_profile_detail_view_state::IsSet,
10008{
10009    /// Build the final struct.
10010    pub fn build(self) -> OrgProfileDetailView<S> {
10011        OrgProfileDetailView {
10012            avatar: self._fields.0,
10013            country: self._fields.1,
10014            created_at: self._fields.2,
10015            description: self._fields.3,
10016            description_facets: self._fields.4,
10017            did: self._fields.5.unwrap(),
10018            display_name: self._fields.6,
10019            founded_at: self._fields.7,
10020            media: self._fields.8,
10021            parent: self._fields.9,
10022            status: self._fields.10,
10023            uri: self._fields.11.unwrap(),
10024            websites: self._fields.12,
10025            extra_data: Default::default(),
10026        }
10027    }
10028    /// Build the final struct with custom extra_data.
10029    pub fn build_with_data(
10030        self,
10031        extra_data: BTreeMap<SmolStr, Data<S>>,
10032    ) -> OrgProfileDetailView<S> {
10033        OrgProfileDetailView {
10034            avatar: self._fields.0,
10035            country: self._fields.1,
10036            created_at: self._fields.2,
10037            description: self._fields.3,
10038            description_facets: self._fields.4,
10039            did: self._fields.5.unwrap(),
10040            display_name: self._fields.6,
10041            founded_at: self._fields.7,
10042            media: self._fields.8,
10043            parent: self._fields.9,
10044            status: self._fields.10,
10045            uri: self._fields.11.unwrap(),
10046            websites: self._fields.12,
10047            extra_data: Some(extra_data),
10048        }
10049    }
10050}
10051
10052pub mod org_profile_summary_view_state {
10053
10054    pub use crate::builder_types::{IsSet, IsUnset, Set, Unset};
10055    #[allow(unused)]
10056    use ::core::marker::PhantomData;
10057    mod sealed {
10058        pub trait Sealed {}
10059    }
10060    /// State trait tracking which required fields have been set
10061    pub trait State: sealed::Sealed {
10062        type Did;
10063        type Uri;
10064    }
10065    /// Empty state - all required fields are unset
10066    pub struct Empty(());
10067    impl sealed::Sealed for Empty {}
10068    impl State for Empty {
10069        type Did = Unset;
10070        type Uri = Unset;
10071    }
10072    ///State transition - sets the `did` field to Set
10073    pub struct SetDid<St: State = Empty>(PhantomData<fn() -> St>);
10074    impl<St: State> sealed::Sealed for SetDid<St> {}
10075    impl<St: State> State for SetDid<St> {
10076        type Did = Set<members::did>;
10077        type Uri = St::Uri;
10078    }
10079    ///State transition - sets the `uri` field to Set
10080    pub struct SetUri<St: State = Empty>(PhantomData<fn() -> St>);
10081    impl<St: State> sealed::Sealed for SetUri<St> {}
10082    impl<St: State> State for SetUri<St> {
10083        type Did = St::Did;
10084        type Uri = Set<members::uri>;
10085    }
10086    /// Marker types for field names
10087    #[allow(non_camel_case_types)]
10088    pub mod members {
10089        ///Marker type for the `did` field
10090        pub struct did(());
10091        ///Marker type for the `uri` field
10092        pub struct uri(());
10093    }
10094}
10095
10096/// Builder for constructing an instance of this type.
10097pub struct OrgProfileSummaryViewBuilder<
10098    St: org_profile_summary_view_state::State,
10099    S: BosStr = DefaultStr,
10100> {
10101    _state: PhantomData<fn() -> St>,
10102    _fields: (
10103        Option<BlobRef<S>>,
10104        Option<Did<S>>,
10105        Option<S>,
10106        Option<AtUri<S>>,
10107    ),
10108    _type: PhantomData<fn() -> S>,
10109}
10110
10111impl OrgProfileSummaryView<DefaultStr> {
10112    /// Create a new builder for this type, using the default string type (DefaultStr = SmolStr) if needed
10113    pub fn new() -> OrgProfileSummaryViewBuilder<org_profile_summary_view_state::Empty, DefaultStr>
10114    {
10115        OrgProfileSummaryViewBuilder::new()
10116    }
10117}
10118
10119impl<S: BosStr> OrgProfileSummaryView<S> {
10120    /// Create a new builder for this type
10121    pub fn builder() -> OrgProfileSummaryViewBuilder<org_profile_summary_view_state::Empty, S> {
10122        OrgProfileSummaryViewBuilder::builder()
10123    }
10124}
10125
10126impl OrgProfileSummaryViewBuilder<org_profile_summary_view_state::Empty, DefaultStr> {
10127    /// Create a new builder with all fields unset, using the default string type, if needed
10128    pub fn new() -> Self {
10129        OrgProfileSummaryViewBuilder {
10130            _state: PhantomData,
10131            _fields: (None, None, None, None),
10132            _type: PhantomData,
10133        }
10134    }
10135}
10136
10137impl<S: BosStr> OrgProfileSummaryViewBuilder<org_profile_summary_view_state::Empty, S> {
10138    /// Create a new builder with all fields unset
10139    pub fn builder() -> Self {
10140        OrgProfileSummaryViewBuilder {
10141            _state: PhantomData,
10142            _fields: (None, None, None, None),
10143            _type: PhantomData,
10144        }
10145    }
10146}
10147
10148impl<St: org_profile_summary_view_state::State, S: BosStr> OrgProfileSummaryViewBuilder<St, S> {
10149    /// Set the `avatar` field (optional)
10150    pub fn avatar(mut self, value: impl Into<Option<BlobRef<S>>>) -> Self {
10151        self._fields.0 = value.into();
10152        self
10153    }
10154    /// Set the `avatar` field to an Option value (optional)
10155    pub fn maybe_avatar(mut self, value: Option<BlobRef<S>>) -> Self {
10156        self._fields.0 = value;
10157        self
10158    }
10159}
10160
10161impl<St, S: BosStr> OrgProfileSummaryViewBuilder<St, S>
10162where
10163    St: org_profile_summary_view_state::State,
10164    St::Did: org_profile_summary_view_state::IsUnset,
10165{
10166    /// Set the `did` field (required)
10167    pub fn did(
10168        mut self,
10169        value: impl Into<Did<S>>,
10170    ) -> OrgProfileSummaryViewBuilder<org_profile_summary_view_state::SetDid<St>, S> {
10171        self._fields.1 = Option::Some(value.into());
10172        OrgProfileSummaryViewBuilder {
10173            _state: PhantomData,
10174            _fields: self._fields,
10175            _type: PhantomData,
10176        }
10177    }
10178}
10179
10180impl<St: org_profile_summary_view_state::State, S: BosStr> OrgProfileSummaryViewBuilder<St, S> {
10181    /// Set the `displayName` field (optional)
10182    pub fn display_name(mut self, value: impl Into<Option<S>>) -> Self {
10183        self._fields.2 = value.into();
10184        self
10185    }
10186    /// Set the `displayName` field to an Option value (optional)
10187    pub fn maybe_display_name(mut self, value: Option<S>) -> Self {
10188        self._fields.2 = value;
10189        self
10190    }
10191}
10192
10193impl<St, S: BosStr> OrgProfileSummaryViewBuilder<St, S>
10194where
10195    St: org_profile_summary_view_state::State,
10196    St::Uri: org_profile_summary_view_state::IsUnset,
10197{
10198    /// Set the `uri` field (required)
10199    pub fn uri(
10200        mut self,
10201        value: impl Into<AtUri<S>>,
10202    ) -> OrgProfileSummaryViewBuilder<org_profile_summary_view_state::SetUri<St>, S> {
10203        self._fields.3 = Option::Some(value.into());
10204        OrgProfileSummaryViewBuilder {
10205            _state: PhantomData,
10206            _fields: self._fields,
10207            _type: PhantomData,
10208        }
10209    }
10210}
10211
10212impl<St, S: BosStr> OrgProfileSummaryViewBuilder<St, S>
10213where
10214    St: org_profile_summary_view_state::State,
10215    St::Did: org_profile_summary_view_state::IsSet,
10216    St::Uri: org_profile_summary_view_state::IsSet,
10217{
10218    /// Build the final struct.
10219    pub fn build(self) -> OrgProfileSummaryView<S> {
10220        OrgProfileSummaryView {
10221            avatar: self._fields.0,
10222            did: self._fields.1.unwrap(),
10223            display_name: self._fields.2,
10224            uri: self._fields.3.unwrap(),
10225            extra_data: Default::default(),
10226        }
10227    }
10228    /// Build the final struct with custom extra_data.
10229    pub fn build_with_data(
10230        self,
10231        extra_data: BTreeMap<SmolStr, Data<S>>,
10232    ) -> OrgProfileSummaryView<S> {
10233        OrgProfileSummaryView {
10234            avatar: self._fields.0,
10235            did: self._fields.1.unwrap(),
10236            display_name: self._fields.2,
10237            uri: self._fields.3.unwrap(),
10238            extra_data: Some(extra_data),
10239        }
10240    }
10241}
10242
10243pub mod platform_features_state {
10244
10245    pub use crate::builder_types::{IsSet, IsUnset, Set, Unset};
10246    #[allow(unused)]
10247    use ::core::marker::PhantomData;
10248    mod sealed {
10249        pub trait Sealed {}
10250    }
10251    /// State trait tracking which required fields have been set
10252    pub trait State: sealed::Sealed {
10253        type Features;
10254        type Platform;
10255    }
10256    /// Empty state - all required fields are unset
10257    pub struct Empty(());
10258    impl sealed::Sealed for Empty {}
10259    impl State for Empty {
10260        type Features = Unset;
10261        type Platform = Unset;
10262    }
10263    ///State transition - sets the `features` field to Set
10264    pub struct SetFeatures<St: State = Empty>(PhantomData<fn() -> St>);
10265    impl<St: State> sealed::Sealed for SetFeatures<St> {}
10266    impl<St: State> State for SetFeatures<St> {
10267        type Features = Set<members::features>;
10268        type Platform = St::Platform;
10269    }
10270    ///State transition - sets the `platform` field to Set
10271    pub struct SetPlatform<St: State = Empty>(PhantomData<fn() -> St>);
10272    impl<St: State> sealed::Sealed for SetPlatform<St> {}
10273    impl<St: State> State for SetPlatform<St> {
10274        type Features = St::Features;
10275        type Platform = Set<members::platform>;
10276    }
10277    /// Marker types for field names
10278    #[allow(non_camel_case_types)]
10279    pub mod members {
10280        ///Marker type for the `features` field
10281        pub struct features(());
10282        ///Marker type for the `platform` field
10283        pub struct platform(());
10284    }
10285}
10286
10287/// Builder for constructing an instance of this type.
10288pub struct PlatformFeaturesBuilder<St: platform_features_state::State, S: BosStr = DefaultStr> {
10289    _state: PhantomData<fn() -> St>,
10290    _fields: (Option<Vec<S>>, Option<PlatformFeaturesPlatform<S>>),
10291    _type: PhantomData<fn() -> S>,
10292}
10293
10294impl PlatformFeatures<DefaultStr> {
10295    /// Create a new builder for this type, using the default string type (DefaultStr = SmolStr) if needed
10296    pub fn new() -> PlatformFeaturesBuilder<platform_features_state::Empty, DefaultStr> {
10297        PlatformFeaturesBuilder::new()
10298    }
10299}
10300
10301impl<S: BosStr> PlatformFeatures<S> {
10302    /// Create a new builder for this type
10303    pub fn builder() -> PlatformFeaturesBuilder<platform_features_state::Empty, S> {
10304        PlatformFeaturesBuilder::builder()
10305    }
10306}
10307
10308impl PlatformFeaturesBuilder<platform_features_state::Empty, DefaultStr> {
10309    /// Create a new builder with all fields unset, using the default string type, if needed
10310    pub fn new() -> Self {
10311        PlatformFeaturesBuilder {
10312            _state: PhantomData,
10313            _fields: (None, None),
10314            _type: PhantomData,
10315        }
10316    }
10317}
10318
10319impl<S: BosStr> PlatformFeaturesBuilder<platform_features_state::Empty, S> {
10320    /// Create a new builder with all fields unset
10321    pub fn builder() -> Self {
10322        PlatformFeaturesBuilder {
10323            _state: PhantomData,
10324            _fields: (None, None),
10325            _type: PhantomData,
10326        }
10327    }
10328}
10329
10330impl<St, S: BosStr> PlatformFeaturesBuilder<St, S>
10331where
10332    St: platform_features_state::State,
10333    St::Features: platform_features_state::IsUnset,
10334{
10335    /// Set the `features` field (required)
10336    pub fn features(
10337        mut self,
10338        value: impl Into<Vec<S>>,
10339    ) -> PlatformFeaturesBuilder<platform_features_state::SetFeatures<St>, S> {
10340        self._fields.0 = Option::Some(value.into());
10341        PlatformFeaturesBuilder {
10342            _state: PhantomData,
10343            _fields: self._fields,
10344            _type: PhantomData,
10345        }
10346    }
10347}
10348
10349impl<St, S: BosStr> PlatformFeaturesBuilder<St, S>
10350where
10351    St: platform_features_state::State,
10352    St::Platform: platform_features_state::IsUnset,
10353{
10354    /// Set the `platform` field (required)
10355    pub fn platform(
10356        mut self,
10357        value: impl Into<PlatformFeaturesPlatform<S>>,
10358    ) -> PlatformFeaturesBuilder<platform_features_state::SetPlatform<St>, S> {
10359        self._fields.1 = Option::Some(value.into());
10360        PlatformFeaturesBuilder {
10361            _state: PhantomData,
10362            _fields: self._fields,
10363            _type: PhantomData,
10364        }
10365    }
10366}
10367
10368impl<St, S: BosStr> PlatformFeaturesBuilder<St, S>
10369where
10370    St: platform_features_state::State,
10371    St::Features: platform_features_state::IsSet,
10372    St::Platform: platform_features_state::IsSet,
10373{
10374    /// Build the final struct.
10375    pub fn build(self) -> PlatformFeatures<S> {
10376        PlatformFeatures {
10377            features: self._fields.0.unwrap(),
10378            platform: self._fields.1.unwrap(),
10379            extra_data: Default::default(),
10380        }
10381    }
10382    /// Build the final struct with custom extra_data.
10383    pub fn build_with_data(self, extra_data: BTreeMap<SmolStr, Data<S>>) -> PlatformFeatures<S> {
10384        PlatformFeatures {
10385            features: self._fields.0.unwrap(),
10386            platform: self._fields.1.unwrap(),
10387            extra_data: Some(extra_data),
10388        }
10389    }
10390}
10391
10392pub mod platform_summary_view_state {
10393
10394    pub use crate::builder_types::{IsSet, IsUnset, Set, Unset};
10395    #[allow(unused)]
10396    use ::core::marker::PhantomData;
10397    mod sealed {
10398        pub trait Sealed {}
10399    }
10400    /// State trait tracking which required fields have been set
10401    pub trait State: sealed::Sealed {
10402        type Name;
10403        type Uri;
10404    }
10405    /// Empty state - all required fields are unset
10406    pub struct Empty(());
10407    impl sealed::Sealed for Empty {}
10408    impl State for Empty {
10409        type Name = Unset;
10410        type Uri = Unset;
10411    }
10412    ///State transition - sets the `name` field to Set
10413    pub struct SetName<St: State = Empty>(PhantomData<fn() -> St>);
10414    impl<St: State> sealed::Sealed for SetName<St> {}
10415    impl<St: State> State for SetName<St> {
10416        type Name = Set<members::name>;
10417        type Uri = St::Uri;
10418    }
10419    ///State transition - sets the `uri` field to Set
10420    pub struct SetUri<St: State = Empty>(PhantomData<fn() -> St>);
10421    impl<St: State> sealed::Sealed for SetUri<St> {}
10422    impl<St: State> State for SetUri<St> {
10423        type Name = St::Name;
10424        type Uri = Set<members::uri>;
10425    }
10426    /// Marker types for field names
10427    #[allow(non_camel_case_types)]
10428    pub mod members {
10429        ///Marker type for the `name` field
10430        pub struct name(());
10431        ///Marker type for the `uri` field
10432        pub struct uri(());
10433    }
10434}
10435
10436/// Builder for constructing an instance of this type.
10437pub struct PlatformSummaryViewBuilder<
10438    St: platform_summary_view_state::State,
10439    S: BosStr = DefaultStr,
10440> {
10441    _state: PhantomData<fn() -> St>,
10442    _fields: (
10443        Option<S>,
10444        Option<games_gamesgamesgamesgames::PlatformCategory<S>>,
10445        Option<S>,
10446        Option<S>,
10447        Option<AtUri<S>>,
10448    ),
10449    _type: PhantomData<fn() -> S>,
10450}
10451
10452impl PlatformSummaryView<DefaultStr> {
10453    /// Create a new builder for this type, using the default string type (DefaultStr = SmolStr) if needed
10454    pub fn new() -> PlatformSummaryViewBuilder<platform_summary_view_state::Empty, DefaultStr> {
10455        PlatformSummaryViewBuilder::new()
10456    }
10457}
10458
10459impl<S: BosStr> PlatformSummaryView<S> {
10460    /// Create a new builder for this type
10461    pub fn builder() -> PlatformSummaryViewBuilder<platform_summary_view_state::Empty, S> {
10462        PlatformSummaryViewBuilder::builder()
10463    }
10464}
10465
10466impl PlatformSummaryViewBuilder<platform_summary_view_state::Empty, DefaultStr> {
10467    /// Create a new builder with all fields unset, using the default string type, if needed
10468    pub fn new() -> Self {
10469        PlatformSummaryViewBuilder {
10470            _state: PhantomData,
10471            _fields: (None, None, None, None, None),
10472            _type: PhantomData,
10473        }
10474    }
10475}
10476
10477impl<S: BosStr> PlatformSummaryViewBuilder<platform_summary_view_state::Empty, S> {
10478    /// Create a new builder with all fields unset
10479    pub fn builder() -> Self {
10480        PlatformSummaryViewBuilder {
10481            _state: PhantomData,
10482            _fields: (None, None, None, None, None),
10483            _type: PhantomData,
10484        }
10485    }
10486}
10487
10488impl<St: platform_summary_view_state::State, S: BosStr> PlatformSummaryViewBuilder<St, S> {
10489    /// Set the `abbreviation` field (optional)
10490    pub fn abbreviation(mut self, value: impl Into<Option<S>>) -> Self {
10491        self._fields.0 = value.into();
10492        self
10493    }
10494    /// Set the `abbreviation` field to an Option value (optional)
10495    pub fn maybe_abbreviation(mut self, value: Option<S>) -> Self {
10496        self._fields.0 = value;
10497        self
10498    }
10499}
10500
10501impl<St: platform_summary_view_state::State, S: BosStr> PlatformSummaryViewBuilder<St, S> {
10502    /// Set the `category` field (optional)
10503    pub fn category(
10504        mut self,
10505        value: impl Into<Option<games_gamesgamesgamesgames::PlatformCategory<S>>>,
10506    ) -> Self {
10507        self._fields.1 = value.into();
10508        self
10509    }
10510    /// Set the `category` field to an Option value (optional)
10511    pub fn maybe_category(
10512        mut self,
10513        value: Option<games_gamesgamesgamesgames::PlatformCategory<S>>,
10514    ) -> Self {
10515        self._fields.1 = value;
10516        self
10517    }
10518}
10519
10520impl<St, S: BosStr> PlatformSummaryViewBuilder<St, S>
10521where
10522    St: platform_summary_view_state::State,
10523    St::Name: platform_summary_view_state::IsUnset,
10524{
10525    /// Set the `name` field (required)
10526    pub fn name(
10527        mut self,
10528        value: impl Into<S>,
10529    ) -> PlatformSummaryViewBuilder<platform_summary_view_state::SetName<St>, S> {
10530        self._fields.2 = Option::Some(value.into());
10531        PlatformSummaryViewBuilder {
10532            _state: PhantomData,
10533            _fields: self._fields,
10534            _type: PhantomData,
10535        }
10536    }
10537}
10538
10539impl<St: platform_summary_view_state::State, S: BosStr> PlatformSummaryViewBuilder<St, S> {
10540    /// Set the `slug` field (optional)
10541    pub fn slug(mut self, value: impl Into<Option<S>>) -> Self {
10542        self._fields.3 = value.into();
10543        self
10544    }
10545    /// Set the `slug` field to an Option value (optional)
10546    pub fn maybe_slug(mut self, value: Option<S>) -> Self {
10547        self._fields.3 = value;
10548        self
10549    }
10550}
10551
10552impl<St, S: BosStr> PlatformSummaryViewBuilder<St, S>
10553where
10554    St: platform_summary_view_state::State,
10555    St::Uri: platform_summary_view_state::IsUnset,
10556{
10557    /// Set the `uri` field (required)
10558    pub fn uri(
10559        mut self,
10560        value: impl Into<AtUri<S>>,
10561    ) -> PlatformSummaryViewBuilder<platform_summary_view_state::SetUri<St>, S> {
10562        self._fields.4 = Option::Some(value.into());
10563        PlatformSummaryViewBuilder {
10564            _state: PhantomData,
10565            _fields: self._fields,
10566            _type: PhantomData,
10567        }
10568    }
10569}
10570
10571impl<St, S: BosStr> PlatformSummaryViewBuilder<St, S>
10572where
10573    St: platform_summary_view_state::State,
10574    St::Name: platform_summary_view_state::IsSet,
10575    St::Uri: platform_summary_view_state::IsSet,
10576{
10577    /// Build the final struct.
10578    pub fn build(self) -> PlatformSummaryView<S> {
10579        PlatformSummaryView {
10580            abbreviation: self._fields.0,
10581            category: self._fields.1,
10582            name: self._fields.2.unwrap(),
10583            slug: self._fields.3,
10584            uri: self._fields.4.unwrap(),
10585            extra_data: Default::default(),
10586        }
10587    }
10588    /// Build the final struct with custom extra_data.
10589    pub fn build_with_data(self, extra_data: BTreeMap<SmolStr, Data<S>>) -> PlatformSummaryView<S> {
10590        PlatformSummaryView {
10591            abbreviation: self._fields.0,
10592            category: self._fields.1,
10593            name: self._fields.2.unwrap(),
10594            slug: self._fields.3,
10595            uri: self._fields.4.unwrap(),
10596            extra_data: Some(extra_data),
10597        }
10598    }
10599}
10600
10601pub mod profile_summary_view_state {
10602
10603    pub use crate::builder_types::{IsSet, IsUnset, Set, Unset};
10604    #[allow(unused)]
10605    use ::core::marker::PhantomData;
10606    mod sealed {
10607        pub trait Sealed {}
10608    }
10609    /// State trait tracking which required fields have been set
10610    pub trait State: sealed::Sealed {
10611        type Did;
10612        type ProfileType;
10613        type Uri;
10614    }
10615    /// Empty state - all required fields are unset
10616    pub struct Empty(());
10617    impl sealed::Sealed for Empty {}
10618    impl State for Empty {
10619        type Did = Unset;
10620        type ProfileType = Unset;
10621        type Uri = Unset;
10622    }
10623    ///State transition - sets the `did` field to Set
10624    pub struct SetDid<St: State = Empty>(PhantomData<fn() -> St>);
10625    impl<St: State> sealed::Sealed for SetDid<St> {}
10626    impl<St: State> State for SetDid<St> {
10627        type Did = Set<members::did>;
10628        type ProfileType = St::ProfileType;
10629        type Uri = St::Uri;
10630    }
10631    ///State transition - sets the `profile_type` field to Set
10632    pub struct SetProfileType<St: State = Empty>(PhantomData<fn() -> St>);
10633    impl<St: State> sealed::Sealed for SetProfileType<St> {}
10634    impl<St: State> State for SetProfileType<St> {
10635        type Did = St::Did;
10636        type ProfileType = Set<members::profile_type>;
10637        type Uri = St::Uri;
10638    }
10639    ///State transition - sets the `uri` field to Set
10640    pub struct SetUri<St: State = Empty>(PhantomData<fn() -> St>);
10641    impl<St: State> sealed::Sealed for SetUri<St> {}
10642    impl<St: State> State for SetUri<St> {
10643        type Did = St::Did;
10644        type ProfileType = St::ProfileType;
10645        type Uri = Set<members::uri>;
10646    }
10647    /// Marker types for field names
10648    #[allow(non_camel_case_types)]
10649    pub mod members {
10650        ///Marker type for the `did` field
10651        pub struct did(());
10652        ///Marker type for the `profile_type` field
10653        pub struct profile_type(());
10654        ///Marker type for the `uri` field
10655        pub struct uri(());
10656    }
10657}
10658
10659/// Builder for constructing an instance of this type.
10660pub struct ProfileSummaryViewBuilder<St: profile_summary_view_state::State, S: BosStr = DefaultStr>
10661{
10662    _state: PhantomData<fn() -> St>,
10663    _fields: (
10664        Option<BlobRef<S>>,
10665        Option<Did<S>>,
10666        Option<S>,
10667        Option<ProfileSummaryViewProfileType<S>>,
10668        Option<AtUri<S>>,
10669    ),
10670    _type: PhantomData<fn() -> S>,
10671}
10672
10673impl ProfileSummaryView<DefaultStr> {
10674    /// Create a new builder for this type, using the default string type (DefaultStr = SmolStr) if needed
10675    pub fn new() -> ProfileSummaryViewBuilder<profile_summary_view_state::Empty, DefaultStr> {
10676        ProfileSummaryViewBuilder::new()
10677    }
10678}
10679
10680impl<S: BosStr> ProfileSummaryView<S> {
10681    /// Create a new builder for this type
10682    pub fn builder() -> ProfileSummaryViewBuilder<profile_summary_view_state::Empty, S> {
10683        ProfileSummaryViewBuilder::builder()
10684    }
10685}
10686
10687impl ProfileSummaryViewBuilder<profile_summary_view_state::Empty, DefaultStr> {
10688    /// Create a new builder with all fields unset, using the default string type, if needed
10689    pub fn new() -> Self {
10690        ProfileSummaryViewBuilder {
10691            _state: PhantomData,
10692            _fields: (None, None, None, None, None),
10693            _type: PhantomData,
10694        }
10695    }
10696}
10697
10698impl<S: BosStr> ProfileSummaryViewBuilder<profile_summary_view_state::Empty, S> {
10699    /// Create a new builder with all fields unset
10700    pub fn builder() -> Self {
10701        ProfileSummaryViewBuilder {
10702            _state: PhantomData,
10703            _fields: (None, None, None, None, None),
10704            _type: PhantomData,
10705        }
10706    }
10707}
10708
10709impl<St: profile_summary_view_state::State, S: BosStr> ProfileSummaryViewBuilder<St, S> {
10710    /// Set the `avatar` field (optional)
10711    pub fn avatar(mut self, value: impl Into<Option<BlobRef<S>>>) -> Self {
10712        self._fields.0 = value.into();
10713        self
10714    }
10715    /// Set the `avatar` field to an Option value (optional)
10716    pub fn maybe_avatar(mut self, value: Option<BlobRef<S>>) -> Self {
10717        self._fields.0 = value;
10718        self
10719    }
10720}
10721
10722impl<St, S: BosStr> ProfileSummaryViewBuilder<St, S>
10723where
10724    St: profile_summary_view_state::State,
10725    St::Did: profile_summary_view_state::IsUnset,
10726{
10727    /// Set the `did` field (required)
10728    pub fn did(
10729        mut self,
10730        value: impl Into<Did<S>>,
10731    ) -> ProfileSummaryViewBuilder<profile_summary_view_state::SetDid<St>, S> {
10732        self._fields.1 = Option::Some(value.into());
10733        ProfileSummaryViewBuilder {
10734            _state: PhantomData,
10735            _fields: self._fields,
10736            _type: PhantomData,
10737        }
10738    }
10739}
10740
10741impl<St: profile_summary_view_state::State, S: BosStr> ProfileSummaryViewBuilder<St, S> {
10742    /// Set the `displayName` field (optional)
10743    pub fn display_name(mut self, value: impl Into<Option<S>>) -> Self {
10744        self._fields.2 = value.into();
10745        self
10746    }
10747    /// Set the `displayName` field to an Option value (optional)
10748    pub fn maybe_display_name(mut self, value: Option<S>) -> Self {
10749        self._fields.2 = value;
10750        self
10751    }
10752}
10753
10754impl<St, S: BosStr> ProfileSummaryViewBuilder<St, S>
10755where
10756    St: profile_summary_view_state::State,
10757    St::ProfileType: profile_summary_view_state::IsUnset,
10758{
10759    /// Set the `profileType` field (required)
10760    pub fn profile_type(
10761        mut self,
10762        value: impl Into<ProfileSummaryViewProfileType<S>>,
10763    ) -> ProfileSummaryViewBuilder<profile_summary_view_state::SetProfileType<St>, S> {
10764        self._fields.3 = Option::Some(value.into());
10765        ProfileSummaryViewBuilder {
10766            _state: PhantomData,
10767            _fields: self._fields,
10768            _type: PhantomData,
10769        }
10770    }
10771}
10772
10773impl<St, S: BosStr> ProfileSummaryViewBuilder<St, S>
10774where
10775    St: profile_summary_view_state::State,
10776    St::Uri: profile_summary_view_state::IsUnset,
10777{
10778    /// Set the `uri` field (required)
10779    pub fn uri(
10780        mut self,
10781        value: impl Into<AtUri<S>>,
10782    ) -> ProfileSummaryViewBuilder<profile_summary_view_state::SetUri<St>, S> {
10783        self._fields.4 = Option::Some(value.into());
10784        ProfileSummaryViewBuilder {
10785            _state: PhantomData,
10786            _fields: self._fields,
10787            _type: PhantomData,
10788        }
10789    }
10790}
10791
10792impl<St, S: BosStr> ProfileSummaryViewBuilder<St, S>
10793where
10794    St: profile_summary_view_state::State,
10795    St::Did: profile_summary_view_state::IsSet,
10796    St::ProfileType: profile_summary_view_state::IsSet,
10797    St::Uri: profile_summary_view_state::IsSet,
10798{
10799    /// Build the final struct.
10800    pub fn build(self) -> ProfileSummaryView<S> {
10801        ProfileSummaryView {
10802            avatar: self._fields.0,
10803            did: self._fields.1.unwrap(),
10804            display_name: self._fields.2,
10805            profile_type: self._fields.3.unwrap(),
10806            uri: self._fields.4.unwrap(),
10807            extra_data: Default::default(),
10808        }
10809    }
10810    /// Build the final struct with custom extra_data.
10811    pub fn build_with_data(self, extra_data: BTreeMap<SmolStr, Data<S>>) -> ProfileSummaryView<S> {
10812        ProfileSummaryView {
10813            avatar: self._fields.0,
10814            did: self._fields.1.unwrap(),
10815            display_name: self._fields.2,
10816            profile_type: self._fields.3.unwrap(),
10817            uri: self._fields.4.unwrap(),
10818            extra_data: Some(extra_data),
10819        }
10820    }
10821}
10822
10823pub mod signature_state {
10824
10825    pub use crate::builder_types::{IsSet, IsUnset, Set, Unset};
10826    #[allow(unused)]
10827    use ::core::marker::PhantomData;
10828    mod sealed {
10829        pub trait Sealed {}
10830    }
10831    /// State trait tracking which required fields have been set
10832    pub trait State: sealed::Sealed {
10833        type Key;
10834        type Signature;
10835    }
10836    /// Empty state - all required fields are unset
10837    pub struct Empty(());
10838    impl sealed::Sealed for Empty {}
10839    impl State for Empty {
10840        type Key = Unset;
10841        type Signature = Unset;
10842    }
10843    ///State transition - sets the `key` field to Set
10844    pub struct SetKey<St: State = Empty>(PhantomData<fn() -> St>);
10845    impl<St: State> sealed::Sealed for SetKey<St> {}
10846    impl<St: State> State for SetKey<St> {
10847        type Key = Set<members::key>;
10848        type Signature = St::Signature;
10849    }
10850    ///State transition - sets the `signature` field to Set
10851    pub struct SetSignature<St: State = Empty>(PhantomData<fn() -> St>);
10852    impl<St: State> sealed::Sealed for SetSignature<St> {}
10853    impl<St: State> State for SetSignature<St> {
10854        type Key = St::Key;
10855        type Signature = Set<members::signature>;
10856    }
10857    /// Marker types for field names
10858    #[allow(non_camel_case_types)]
10859    pub mod members {
10860        ///Marker type for the `key` field
10861        pub struct key(());
10862        ///Marker type for the `signature` field
10863        pub struct signature(());
10864    }
10865}
10866
10867/// Builder for constructing an instance of this type.
10868pub struct SignatureBuilder<St: signature_state::State, S: BosStr = DefaultStr> {
10869    _state: PhantomData<fn() -> St>,
10870    _fields: (Option<S>, Option<Bytes>),
10871    _type: PhantomData<fn() -> S>,
10872}
10873
10874impl Signature<DefaultStr> {
10875    /// Create a new builder for this type, using the default string type (DefaultStr = SmolStr) if needed
10876    pub fn new() -> SignatureBuilder<signature_state::Empty, DefaultStr> {
10877        SignatureBuilder::new()
10878    }
10879}
10880
10881impl<S: BosStr> Signature<S> {
10882    /// Create a new builder for this type
10883    pub fn builder() -> SignatureBuilder<signature_state::Empty, S> {
10884        SignatureBuilder::builder()
10885    }
10886}
10887
10888impl SignatureBuilder<signature_state::Empty, DefaultStr> {
10889    /// Create a new builder with all fields unset, using the default string type, if needed
10890    pub fn new() -> Self {
10891        SignatureBuilder {
10892            _state: PhantomData,
10893            _fields: (None, None),
10894            _type: PhantomData,
10895        }
10896    }
10897}
10898
10899impl<S: BosStr> SignatureBuilder<signature_state::Empty, S> {
10900    /// Create a new builder with all fields unset
10901    pub fn builder() -> Self {
10902        SignatureBuilder {
10903            _state: PhantomData,
10904            _fields: (None, None),
10905            _type: PhantomData,
10906        }
10907    }
10908}
10909
10910impl<St, S: BosStr> SignatureBuilder<St, S>
10911where
10912    St: signature_state::State,
10913    St::Key: signature_state::IsUnset,
10914{
10915    /// Set the `key` field (required)
10916    pub fn key(mut self, value: impl Into<S>) -> SignatureBuilder<signature_state::SetKey<St>, S> {
10917        self._fields.0 = Option::Some(value.into());
10918        SignatureBuilder {
10919            _state: PhantomData,
10920            _fields: self._fields,
10921            _type: PhantomData,
10922        }
10923    }
10924}
10925
10926impl<St, S: BosStr> SignatureBuilder<St, S>
10927where
10928    St: signature_state::State,
10929    St::Signature: signature_state::IsUnset,
10930{
10931    /// Set the `signature` field (required)
10932    pub fn signature(
10933        mut self,
10934        value: impl Into<Bytes>,
10935    ) -> SignatureBuilder<signature_state::SetSignature<St>, S> {
10936        self._fields.1 = Option::Some(value.into());
10937        SignatureBuilder {
10938            _state: PhantomData,
10939            _fields: self._fields,
10940            _type: PhantomData,
10941        }
10942    }
10943}
10944
10945impl<St, S: BosStr> SignatureBuilder<St, S>
10946where
10947    St: signature_state::State,
10948    St::Key: signature_state::IsSet,
10949    St::Signature: signature_state::IsSet,
10950{
10951    /// Build the final struct.
10952    pub fn build(self) -> Signature<S> {
10953        Signature {
10954            key: self._fields.0.unwrap(),
10955            signature: self._fields.1.unwrap(),
10956            extra_data: Default::default(),
10957        }
10958    }
10959    /// Build the final struct with custom extra_data.
10960    pub fn build_with_data(self, extra_data: BTreeMap<SmolStr, Data<S>>) -> Signature<S> {
10961        Signature {
10962            key: self._fields.0.unwrap(),
10963            signature: self._fields.1.unwrap(),
10964            extra_data: Some(extra_data),
10965        }
10966    }
10967}
10968
10969pub mod skeleton_game_feed_item_state {
10970
10971    pub use crate::builder_types::{IsSet, IsUnset, Set, Unset};
10972    #[allow(unused)]
10973    use ::core::marker::PhantomData;
10974    mod sealed {
10975        pub trait Sealed {}
10976    }
10977    /// State trait tracking which required fields have been set
10978    pub trait State: sealed::Sealed {
10979        type Game;
10980    }
10981    /// Empty state - all required fields are unset
10982    pub struct Empty(());
10983    impl sealed::Sealed for Empty {}
10984    impl State for Empty {
10985        type Game = Unset;
10986    }
10987    ///State transition - sets the `game` field to Set
10988    pub struct SetGame<St: State = Empty>(PhantomData<fn() -> St>);
10989    impl<St: State> sealed::Sealed for SetGame<St> {}
10990    impl<St: State> State for SetGame<St> {
10991        type Game = Set<members::game>;
10992    }
10993    /// Marker types for field names
10994    #[allow(non_camel_case_types)]
10995    pub mod members {
10996        ///Marker type for the `game` field
10997        pub struct game(());
10998    }
10999}
11000
11001/// Builder for constructing an instance of this type.
11002pub struct SkeletonGameFeedItemBuilder<
11003    St: skeleton_game_feed_item_state::State,
11004    S: BosStr = DefaultStr,
11005> {
11006    _state: PhantomData<fn() -> St>,
11007    _fields: (Option<S>, Option<AtUri<S>>),
11008    _type: PhantomData<fn() -> S>,
11009}
11010
11011impl SkeletonGameFeedItem<DefaultStr> {
11012    /// Create a new builder for this type, using the default string type (DefaultStr = SmolStr) if needed
11013    pub fn new() -> SkeletonGameFeedItemBuilder<skeleton_game_feed_item_state::Empty, DefaultStr> {
11014        SkeletonGameFeedItemBuilder::new()
11015    }
11016}
11017
11018impl<S: BosStr> SkeletonGameFeedItem<S> {
11019    /// Create a new builder for this type
11020    pub fn builder() -> SkeletonGameFeedItemBuilder<skeleton_game_feed_item_state::Empty, S> {
11021        SkeletonGameFeedItemBuilder::builder()
11022    }
11023}
11024
11025impl SkeletonGameFeedItemBuilder<skeleton_game_feed_item_state::Empty, DefaultStr> {
11026    /// Create a new builder with all fields unset, using the default string type, if needed
11027    pub fn new() -> Self {
11028        SkeletonGameFeedItemBuilder {
11029            _state: PhantomData,
11030            _fields: (None, None),
11031            _type: PhantomData,
11032        }
11033    }
11034}
11035
11036impl<S: BosStr> SkeletonGameFeedItemBuilder<skeleton_game_feed_item_state::Empty, S> {
11037    /// Create a new builder with all fields unset
11038    pub fn builder() -> Self {
11039        SkeletonGameFeedItemBuilder {
11040            _state: PhantomData,
11041            _fields: (None, None),
11042            _type: PhantomData,
11043        }
11044    }
11045}
11046
11047impl<St: skeleton_game_feed_item_state::State, S: BosStr> SkeletonGameFeedItemBuilder<St, S> {
11048    /// Set the `feedContext` field (optional)
11049    pub fn feed_context(mut self, value: impl Into<Option<S>>) -> Self {
11050        self._fields.0 = value.into();
11051        self
11052    }
11053    /// Set the `feedContext` field to an Option value (optional)
11054    pub fn maybe_feed_context(mut self, value: Option<S>) -> Self {
11055        self._fields.0 = value;
11056        self
11057    }
11058}
11059
11060impl<St, S: BosStr> SkeletonGameFeedItemBuilder<St, S>
11061where
11062    St: skeleton_game_feed_item_state::State,
11063    St::Game: skeleton_game_feed_item_state::IsUnset,
11064{
11065    /// Set the `game` field (required)
11066    pub fn game(
11067        mut self,
11068        value: impl Into<AtUri<S>>,
11069    ) -> SkeletonGameFeedItemBuilder<skeleton_game_feed_item_state::SetGame<St>, S> {
11070        self._fields.1 = Option::Some(value.into());
11071        SkeletonGameFeedItemBuilder {
11072            _state: PhantomData,
11073            _fields: self._fields,
11074            _type: PhantomData,
11075        }
11076    }
11077}
11078
11079impl<St, S: BosStr> SkeletonGameFeedItemBuilder<St, S>
11080where
11081    St: skeleton_game_feed_item_state::State,
11082    St::Game: skeleton_game_feed_item_state::IsSet,
11083{
11084    /// Build the final struct.
11085    pub fn build(self) -> SkeletonGameFeedItem<S> {
11086        SkeletonGameFeedItem {
11087            feed_context: self._fields.0,
11088            game: self._fields.1.unwrap(),
11089            extra_data: Default::default(),
11090        }
11091    }
11092    /// Build the final struct with custom extra_data.
11093    pub fn build_with_data(
11094        self,
11095        extra_data: BTreeMap<SmolStr, Data<S>>,
11096    ) -> SkeletonGameFeedItem<S> {
11097        SkeletonGameFeedItem {
11098            feed_context: self._fields.0,
11099            game: self._fields.1.unwrap(),
11100            extra_data: Some(extra_data),
11101        }
11102    }
11103}
11104
11105pub mod website_state {
11106
11107    pub use crate::builder_types::{IsSet, IsUnset, Set, Unset};
11108    #[allow(unused)]
11109    use ::core::marker::PhantomData;
11110    mod sealed {
11111        pub trait Sealed {}
11112    }
11113    /// State trait tracking which required fields have been set
11114    pub trait State: sealed::Sealed {
11115        type Url;
11116    }
11117    /// Empty state - all required fields are unset
11118    pub struct Empty(());
11119    impl sealed::Sealed for Empty {}
11120    impl State for Empty {
11121        type Url = Unset;
11122    }
11123    ///State transition - sets the `url` field to Set
11124    pub struct SetUrl<St: State = Empty>(PhantomData<fn() -> St>);
11125    impl<St: State> sealed::Sealed for SetUrl<St> {}
11126    impl<St: State> State for SetUrl<St> {
11127        type Url = Set<members::url>;
11128    }
11129    /// Marker types for field names
11130    #[allow(non_camel_case_types)]
11131    pub mod members {
11132        ///Marker type for the `url` field
11133        pub struct url(());
11134    }
11135}
11136
11137/// Builder for constructing an instance of this type.
11138pub struct WebsiteBuilder<St: website_state::State, S: BosStr = DefaultStr> {
11139    _state: PhantomData<fn() -> St>,
11140    _fields: (Option<WebsiteType<S>>, Option<UriValue<S>>),
11141    _type: PhantomData<fn() -> S>,
11142}
11143
11144impl Website<DefaultStr> {
11145    /// Create a new builder for this type, using the default string type (DefaultStr = SmolStr) if needed
11146    pub fn new() -> WebsiteBuilder<website_state::Empty, DefaultStr> {
11147        WebsiteBuilder::new()
11148    }
11149}
11150
11151impl<S: BosStr> Website<S> {
11152    /// Create a new builder for this type
11153    pub fn builder() -> WebsiteBuilder<website_state::Empty, S> {
11154        WebsiteBuilder::builder()
11155    }
11156}
11157
11158impl WebsiteBuilder<website_state::Empty, DefaultStr> {
11159    /// Create a new builder with all fields unset, using the default string type, if needed
11160    pub fn new() -> Self {
11161        WebsiteBuilder {
11162            _state: PhantomData,
11163            _fields: (None, None),
11164            _type: PhantomData,
11165        }
11166    }
11167}
11168
11169impl<S: BosStr> WebsiteBuilder<website_state::Empty, S> {
11170    /// Create a new builder with all fields unset
11171    pub fn builder() -> Self {
11172        WebsiteBuilder {
11173            _state: PhantomData,
11174            _fields: (None, None),
11175            _type: PhantomData,
11176        }
11177    }
11178}
11179
11180impl<St: website_state::State, S: BosStr> WebsiteBuilder<St, S> {
11181    /// Set the `type` field (optional)
11182    pub fn r#type(mut self, value: impl Into<Option<WebsiteType<S>>>) -> Self {
11183        self._fields.0 = value.into();
11184        self
11185    }
11186    /// Set the `type` field to an Option value (optional)
11187    pub fn maybe_type(mut self, value: Option<WebsiteType<S>>) -> Self {
11188        self._fields.0 = value;
11189        self
11190    }
11191}
11192
11193impl<St, S: BosStr> WebsiteBuilder<St, S>
11194where
11195    St: website_state::State,
11196    St::Url: website_state::IsUnset,
11197{
11198    /// Set the `url` field (required)
11199    pub fn url(
11200        mut self,
11201        value: impl Into<UriValue<S>>,
11202    ) -> WebsiteBuilder<website_state::SetUrl<St>, S> {
11203        self._fields.1 = Option::Some(value.into());
11204        WebsiteBuilder {
11205            _state: PhantomData,
11206            _fields: self._fields,
11207            _type: PhantomData,
11208        }
11209    }
11210}
11211
11212impl<St, S: BosStr> WebsiteBuilder<St, S>
11213where
11214    St: website_state::State,
11215    St::Url: website_state::IsSet,
11216{
11217    /// Build the final struct.
11218    pub fn build(self) -> Website<S> {
11219        Website {
11220            r#type: self._fields.0,
11221            url: self._fields.1.unwrap(),
11222            extra_data: Default::default(),
11223        }
11224    }
11225    /// Build the final struct with custom extra_data.
11226    pub fn build_with_data(self, extra_data: BTreeMap<SmolStr, Data<S>>) -> Website<S> {
11227        Website {
11228            r#type: self._fields.0,
11229            url: self._fields.1.unwrap(),
11230            extra_data: Some(extra_data),
11231        }
11232    }
11233}