jacquard_api/pub_leaflet/
publication.rs1#[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#[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#[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}