jacquard_api/app_bsky/draft/
create_draft.rs1#[allow(unused_imports)]
9use alloc::collections::BTreeMap;
10
11#[allow(unused_imports)]
12use core::marker::PhantomData;
13use jacquard_common::CowStr;
14use jacquard_derive::{IntoStatic, lexicon, open_union};
15use serde::{Serialize, Deserialize};
16use crate::app_bsky::draft::Draft;
17
18#[lexicon]
19#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic)]
20#[serde(rename_all = "camelCase")]
21pub struct CreateDraft<'a> {
22 #[serde(borrow)]
23 pub draft: Draft<'a>,
24}
25
26
27#[lexicon]
28#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic, Default)]
29#[serde(rename_all = "camelCase")]
30pub struct CreateDraftOutput<'a> {
31 #[serde(borrow)]
33 pub id: CowStr<'a>,
34}
35
36
37#[open_union]
38#[derive(
39 Serialize,
40 Deserialize,
41 Debug,
42 Clone,
43 PartialEq,
44 Eq,
45 thiserror::Error,
46 miette::Diagnostic,
47 IntoStatic
48)]
49
50#[serde(tag = "error", content = "message")]
51#[serde(bound(deserialize = "'de: 'a"))]
52pub enum CreateDraftError<'a> {
53 #[serde(rename = "DraftLimitReached")]
55 DraftLimitReached(Option<CowStr<'a>>),
56}
57
58impl core::fmt::Display for CreateDraftError<'_> {
59 fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
60 match self {
61 Self::DraftLimitReached(msg) => {
62 write!(f, "DraftLimitReached")?;
63 if let Some(msg) = msg {
64 write!(f, ": {}", msg)?;
65 }
66 Ok(())
67 }
68 Self::Unknown(err) => write!(f, "Unknown error: {:?}", err),
69 }
70 }
71}
72
73pub struct CreateDraftResponse;
75impl jacquard_common::xrpc::XrpcResp for CreateDraftResponse {
76 const NSID: &'static str = "app.bsky.draft.createDraft";
77 const ENCODING: &'static str = "application/json";
78 type Output<'de> = CreateDraftOutput<'de>;
79 type Err<'de> = CreateDraftError<'de>;
80}
81
82impl<'a> jacquard_common::xrpc::XrpcRequest for CreateDraft<'a> {
83 const NSID: &'static str = "app.bsky.draft.createDraft";
84 const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Procedure(
85 "application/json",
86 );
87 type Response = CreateDraftResponse;
88}
89
90pub struct CreateDraftRequest;
92impl jacquard_common::xrpc::XrpcEndpoint for CreateDraftRequest {
93 const PATH: &'static str = "/xrpc/app.bsky.draft.createDraft";
94 const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Procedure(
95 "application/json",
96 );
97 type Request<'de> = CreateDraft<'de>;
98 type Response = CreateDraftResponse;
99}
100
101pub mod create_draft_state {
102
103 pub use crate::builder_types::{Set, Unset, IsSet, IsUnset};
104 #[allow(unused)]
105 use ::core::marker::PhantomData;
106 mod sealed {
107 pub trait Sealed {}
108 }
109 pub trait State: sealed::Sealed {
111 type Draft;
112 }
113 pub struct Empty(());
115 impl sealed::Sealed for Empty {}
116 impl State for Empty {
117 type Draft = Unset;
118 }
119 pub struct SetDraft<S: State = Empty>(PhantomData<fn() -> S>);
121 impl<S: State> sealed::Sealed for SetDraft<S> {}
122 impl<S: State> State for SetDraft<S> {
123 type Draft = Set<members::draft>;
124 }
125 #[allow(non_camel_case_types)]
127 pub mod members {
128 pub struct draft(());
130 }
131}
132
133pub struct CreateDraftBuilder<'a, S: create_draft_state::State> {
135 _state: PhantomData<fn() -> S>,
136 _fields: (Option<Draft<'a>>,),
137 _lifetime: PhantomData<&'a ()>,
138}
139
140impl<'a> CreateDraft<'a> {
141 pub fn new() -> CreateDraftBuilder<'a, create_draft_state::Empty> {
143 CreateDraftBuilder::new()
144 }
145}
146
147impl<'a> CreateDraftBuilder<'a, create_draft_state::Empty> {
148 pub fn new() -> Self {
150 CreateDraftBuilder {
151 _state: PhantomData,
152 _fields: (None,),
153 _lifetime: PhantomData,
154 }
155 }
156}
157
158impl<'a, S> CreateDraftBuilder<'a, S>
159where
160 S: create_draft_state::State,
161 S::Draft: create_draft_state::IsUnset,
162{
163 pub fn draft(
165 mut self,
166 value: impl Into<Draft<'a>>,
167 ) -> CreateDraftBuilder<'a, create_draft_state::SetDraft<S>> {
168 self._fields.0 = Option::Some(value.into());
169 CreateDraftBuilder {
170 _state: PhantomData,
171 _fields: self._fields,
172 _lifetime: PhantomData,
173 }
174 }
175}
176
177impl<'a, S> CreateDraftBuilder<'a, S>
178where
179 S: create_draft_state::State,
180 S::Draft: create_draft_state::IsSet,
181{
182 pub fn build(self) -> CreateDraft<'a> {
184 CreateDraft {
185 draft: self._fields.0.unwrap(),
186 extra_data: Default::default(),
187 }
188 }
189 pub fn build_with_data(
191 self,
192 extra_data: BTreeMap<
193 jacquard_common::deps::smol_str::SmolStr,
194 jacquard_common::types::value::Data<'a>,
195 >,
196 ) -> CreateDraft<'a> {
197 CreateDraft {
198 draft: self._fields.0.unwrap(),
199 extra_data: Some(extra_data),
200 }
201 }
202}