jacquard_api/pub_leaflet/
publication.rs

1// @generated by jacquard-lexicon. DO NOT EDIT.
2//
3// Lexicon: pub.leaflet.publication
4//
5// This file was automatically generated from Lexicon schemas.
6// Any manual changes will be overwritten on the next regeneration.
7
8/// Record declaring a publication
9#[jacquard_derive::lexicon]
10#[derive(
11    serde::Serialize,
12    serde::Deserialize,
13    Debug,
14    Clone,
15    PartialEq,
16    Eq,
17    jacquard_derive::IntoStatic,
18    bon::Builder
19)]
20#[serde(rename_all = "camelCase")]
21pub struct Publication<'a> {
22    #[serde(skip_serializing_if = "std::option::Option::is_none")]
23    #[builder(into)]
24    #[serde(borrow)]
25    pub base_path: Option<jacquard_common::types::string::Uri<'a>>,
26    #[serde(skip_serializing_if = "std::option::Option::is_none")]
27    #[builder(into)]
28    #[serde(borrow)]
29    pub description: Option<jacquard_common::CowStr<'a>>,
30    #[serde(skip_serializing_if = "std::option::Option::is_none")]
31    #[builder(into)]
32    #[serde(borrow)]
33    pub icon: Option<jacquard_common::types::blob::BlobRef<'a>>,
34    #[serde(borrow)]
35    #[builder(into)]
36    pub name: jacquard_common::CowStr<'a>,
37    #[serde(skip_serializing_if = "std::option::Option::is_none")]
38    #[builder(into)]
39    #[serde(borrow)]
40    pub preferences: Option<crate::pub_leaflet::publication::Preferences<'a>>,
41    #[serde(skip_serializing_if = "std::option::Option::is_none")]
42    #[builder(into)]
43    #[serde(borrow)]
44    pub theme: Option<crate::pub_leaflet::publication::Theme<'a>>,
45}
46
47impl<'a> Publication<'a> {
48    pub fn uri(
49        uri: impl Into<jacquard_common::CowStr<'a>>,
50    ) -> Result<
51        jacquard_common::types::uri::RecordUri<'a, PublicationRecord>,
52        jacquard_common::types::uri::UriError,
53    > {
54        jacquard_common::types::uri::RecordUri::try_from_uri(
55            jacquard_common::types::string::AtUri::new_cow(uri.into())?,
56        )
57    }
58}
59
60/// Typed wrapper for GetRecord response with this collection's record type.
61#[derive(
62    serde::Serialize,
63    serde::Deserialize,
64    Debug,
65    Clone,
66    PartialEq,
67    Eq,
68    jacquard_derive::IntoStatic
69)]
70#[serde(rename_all = "camelCase")]
71pub struct PublicationGetRecordOutput<'a> {
72    #[serde(skip_serializing_if = "std::option::Option::is_none")]
73    #[serde(borrow)]
74    pub cid: std::option::Option<jacquard_common::types::string::Cid<'a>>,
75    #[serde(borrow)]
76    pub uri: jacquard_common::types::string::AtUri<'a>,
77    #[serde(borrow)]
78    pub value: Publication<'a>,
79}
80
81impl From<PublicationGetRecordOutput<'_>> for Publication<'_> {
82    fn from(output: PublicationGetRecordOutput<'_>) -> Self {
83        use jacquard_common::IntoStatic;
84        output.value.into_static()
85    }
86}
87
88impl jacquard_common::types::collection::Collection for Publication<'_> {
89    const NSID: &'static str = "pub.leaflet.publication";
90    type Record = PublicationRecord;
91}
92
93/// Marker type for deserializing records from this collection.
94#[derive(Debug, serde::Serialize, serde::Deserialize)]
95pub struct PublicationRecord;
96impl jacquard_common::xrpc::XrpcResp for PublicationRecord {
97    const NSID: &'static str = "pub.leaflet.publication";
98    const ENCODING: &'static str = "application/json";
99    type Output<'de> = PublicationGetRecordOutput<'de>;
100    type Err<'de> = jacquard_common::types::collection::RecordError<'de>;
101}
102
103impl jacquard_common::types::collection::Collection for PublicationRecord {
104    const NSID: &'static str = "pub.leaflet.publication";
105    type Record = PublicationRecord;
106}
107
108#[jacquard_derive::lexicon]
109#[derive(
110    serde::Serialize,
111    serde::Deserialize,
112    Debug,
113    Clone,
114    PartialEq,
115    Eq,
116    jacquard_derive::IntoStatic,
117    Default
118)]
119#[serde(rename_all = "camelCase")]
120pub struct Preferences<'a> {
121    #[serde(skip_serializing_if = "std::option::Option::is_none")]
122    pub show_comments: std::option::Option<bool>,
123    #[serde(skip_serializing_if = "std::option::Option::is_none")]
124    pub show_in_discover: std::option::Option<bool>,
125}
126
127#[jacquard_derive::lexicon]
128#[derive(
129    serde::Serialize,
130    serde::Deserialize,
131    Debug,
132    Clone,
133    PartialEq,
134    Eq,
135    jacquard_derive::IntoStatic,
136    Default
137)]
138#[serde(rename_all = "camelCase")]
139pub struct Theme<'a> {
140    #[serde(skip_serializing_if = "std::option::Option::is_none")]
141    #[serde(borrow)]
142    pub accent_background: std::option::Option<ThemeAccentBackground<'a>>,
143    #[serde(skip_serializing_if = "std::option::Option::is_none")]
144    #[serde(borrow)]
145    pub accent_text: std::option::Option<ThemeAccentText<'a>>,
146    #[serde(skip_serializing_if = "std::option::Option::is_none")]
147    #[serde(borrow)]
148    pub background_color: std::option::Option<ThemeBackgroundColor<'a>>,
149    #[serde(skip_serializing_if = "std::option::Option::is_none")]
150    #[serde(borrow)]
151    pub background_image: std::option::Option<
152        crate::pub_leaflet::theme::background_image::BackgroundImage<'a>,
153    >,
154    #[serde(skip_serializing_if = "std::option::Option::is_none")]
155    #[serde(borrow)]
156    pub page_background: std::option::Option<ThemePageBackground<'a>>,
157    #[serde(skip_serializing_if = "std::option::Option::is_none")]
158    #[serde(borrow)]
159    pub primary: std::option::Option<ThemePrimary<'a>>,
160    #[serde(skip_serializing_if = "std::option::Option::is_none")]
161    pub show_page_background: std::option::Option<bool>,
162}
163
164#[jacquard_derive::open_union]
165#[derive(
166    serde::Serialize,
167    serde::Deserialize,
168    Debug,
169    Clone,
170    PartialEq,
171    Eq,
172    jacquard_derive::IntoStatic
173)]
174#[serde(tag = "$type")]
175#[serde(bound(deserialize = "'de: 'a"))]
176pub enum ThemeAccentBackground<'a> {
177    #[serde(rename = "pub.leaflet.theme.color#rgba")]
178    ColorRgba(Box<crate::pub_leaflet::theme::color::Rgba<'a>>),
179    #[serde(rename = "pub.leaflet.theme.color#rgb")]
180    ColorRgb(Box<crate::pub_leaflet::theme::color::Rgb<'a>>),
181}
182
183#[jacquard_derive::open_union]
184#[derive(
185    serde::Serialize,
186    serde::Deserialize,
187    Debug,
188    Clone,
189    PartialEq,
190    Eq,
191    jacquard_derive::IntoStatic
192)]
193#[serde(tag = "$type")]
194#[serde(bound(deserialize = "'de: 'a"))]
195pub enum ThemeAccentText<'a> {
196    #[serde(rename = "pub.leaflet.theme.color#rgba")]
197    ColorRgba(Box<crate::pub_leaflet::theme::color::Rgba<'a>>),
198    #[serde(rename = "pub.leaflet.theme.color#rgb")]
199    ColorRgb(Box<crate::pub_leaflet::theme::color::Rgb<'a>>),
200}
201
202#[jacquard_derive::open_union]
203#[derive(
204    serde::Serialize,
205    serde::Deserialize,
206    Debug,
207    Clone,
208    PartialEq,
209    Eq,
210    jacquard_derive::IntoStatic
211)]
212#[serde(tag = "$type")]
213#[serde(bound(deserialize = "'de: 'a"))]
214pub enum ThemeBackgroundColor<'a> {
215    #[serde(rename = "pub.leaflet.theme.color#rgba")]
216    ColorRgba(Box<crate::pub_leaflet::theme::color::Rgba<'a>>),
217    #[serde(rename = "pub.leaflet.theme.color#rgb")]
218    ColorRgb(Box<crate::pub_leaflet::theme::color::Rgb<'a>>),
219}
220
221#[jacquard_derive::open_union]
222#[derive(
223    serde::Serialize,
224    serde::Deserialize,
225    Debug,
226    Clone,
227    PartialEq,
228    Eq,
229    jacquard_derive::IntoStatic
230)]
231#[serde(tag = "$type")]
232#[serde(bound(deserialize = "'de: 'a"))]
233pub enum ThemePageBackground<'a> {
234    #[serde(rename = "pub.leaflet.theme.color#rgba")]
235    ColorRgba(Box<crate::pub_leaflet::theme::color::Rgba<'a>>),
236    #[serde(rename = "pub.leaflet.theme.color#rgb")]
237    ColorRgb(Box<crate::pub_leaflet::theme::color::Rgb<'a>>),
238}
239
240#[jacquard_derive::open_union]
241#[derive(
242    serde::Serialize,
243    serde::Deserialize,
244    Debug,
245    Clone,
246    PartialEq,
247    Eq,
248    jacquard_derive::IntoStatic
249)]
250#[serde(tag = "$type")]
251#[serde(bound(deserialize = "'de: 'a"))]
252pub enum ThemePrimary<'a> {
253    #[serde(rename = "pub.leaflet.theme.color#rgba")]
254    ColorRgba(Box<crate::pub_leaflet::theme::color::Rgba<'a>>),
255    #[serde(rename = "pub.leaflet.theme.color#rgb")]
256    ColorRgb(Box<crate::pub_leaflet::theme::color::Rgb<'a>>),
257}