Skip to main content

jacquard_api/app_bsky/draft/
create_draft.rs

1// @generated by jacquard-lexicon. DO NOT EDIT.
2//
3// Lexicon: app.bsky.draft.createDraft
4//
5// This file was automatically generated from Lexicon schemas.
6// Any manual changes will be overwritten on the next regeneration.
7
8#[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    ///The ID of the created draft.
32    #[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    /// Trying to insert a new draft when the limit was already reached.
54    #[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
73/// Response type for app.bsky.draft.createDraft
74pub 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
90/// Endpoint type for app.bsky.draft.createDraft
91pub 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    /// State trait tracking which required fields have been set
110    pub trait State: sealed::Sealed {
111        type Draft;
112    }
113    /// Empty state - all required fields are unset
114    pub struct Empty(());
115    impl sealed::Sealed for Empty {}
116    impl State for Empty {
117        type Draft = Unset;
118    }
119    ///State transition - sets the `draft` field to Set
120    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    /// Marker types for field names
126    #[allow(non_camel_case_types)]
127    pub mod members {
128        ///Marker type for the `draft` field
129        pub struct draft(());
130    }
131}
132
133/// Builder for constructing an instance of this type
134pub 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    /// Create a new builder for this type
142    pub fn new() -> CreateDraftBuilder<'a, create_draft_state::Empty> {
143        CreateDraftBuilder::new()
144    }
145}
146
147impl<'a> CreateDraftBuilder<'a, create_draft_state::Empty> {
148    /// Create a new builder with all fields unset
149    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    /// Set the `draft` field (required)
164    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    /// Build the final struct
183    pub fn build(self) -> CreateDraft<'a> {
184        CreateDraft {
185            draft: self._fields.0.unwrap(),
186            extra_data: Default::default(),
187        }
188    }
189    /// Build the final struct with custom extra_data
190    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}