Skip to main content

jacquard_api/chat_bsky/group/
remove_members.rs

1// @generated by jacquard-lexicon. DO NOT EDIT.
2//
3// Lexicon: chat.bsky.group.removeMembers
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
11use crate::chat_bsky::convo::ConvoView;
12#[allow(unused_imports)]
13use core::marker::PhantomData;
14use jacquard_common::deps::smol_str::SmolStr;
15use jacquard_common::types::string::Did;
16use jacquard_common::types::value::Data;
17use jacquard_common::{BosStr, CowStr, DefaultStr, FromStaticStr};
18use jacquard_derive::{IntoStatic, open_union};
19use serde::{Deserialize, Serialize};
20
21#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic)]
22#[serde(
23    rename_all = "camelCase",
24    bound(deserialize = "S: Deserialize<'de> + BosStr")
25)]
26pub struct RemoveMembers<S: BosStr = DefaultStr> {
27    pub convo_id: S,
28    pub members: Vec<Did<S>>,
29    #[serde(flatten, default, skip_serializing_if = "Option::is_none")]
30    pub extra_data: Option<BTreeMap<SmolStr, Data<S>>>,
31}
32
33#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic)]
34#[serde(
35    rename_all = "camelCase",
36    bound(deserialize = "S: Deserialize<'de> + BosStr")
37)]
38pub struct RemoveMembersOutput<S: BosStr = DefaultStr> {
39    pub convo: ConvoView<S>,
40    #[serde(flatten, default, skip_serializing_if = "Option::is_none")]
41    pub extra_data: Option<BTreeMap<SmolStr, Data<S>>>,
42}
43
44#[derive(
45    Serialize, Deserialize, Debug, Clone, PartialEq, Eq, thiserror::Error, miette::Diagnostic,
46)]
47#[serde(tag = "error", content = "message")]
48pub enum RemoveMembersError {
49    #[serde(rename = "InvalidConvo")]
50    InvalidConvo(Option<SmolStr>),
51    #[serde(rename = "InsufficientRole")]
52    InsufficientRole(Option<SmolStr>),
53    /// Catch-all for unknown error codes.
54    #[serde(untagged)]
55    Other {
56        error: SmolStr,
57        message: Option<SmolStr>,
58    },
59}
60
61impl core::fmt::Display for RemoveMembersError {
62    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
63        match self {
64            Self::InvalidConvo(msg) => {
65                write!(f, "InvalidConvo")?;
66                if let Some(msg) = msg {
67                    write!(f, ": {}", msg)?;
68                }
69                Ok(())
70            }
71            Self::InsufficientRole(msg) => {
72                write!(f, "InsufficientRole")?;
73                if let Some(msg) = msg {
74                    write!(f, ": {}", msg)?;
75                }
76                Ok(())
77            }
78            Self::Other { error, message } => {
79                write!(f, "{}", error)?;
80                if let Some(msg) = message {
81                    write!(f, ": {}", msg)?;
82                }
83                Ok(())
84            }
85        }
86    }
87}
88
89/** Response marker for the `chat.bsky.group.removeMembers` procedure.
90
91Implements `jacquard_common::xrpc::XrpcResp`; successful bodies decode as `Self::Output<S>`, which is `RemoveMembersOutput<S>` for this endpoint.*/
92pub struct RemoveMembersResponse;
93impl jacquard_common::xrpc::XrpcResp for RemoveMembersResponse {
94    const NSID: &'static str = "chat.bsky.group.removeMembers";
95    const ENCODING: &'static str = "application/json";
96    type Output<S: BosStr> = RemoveMembersOutput<S>;
97    type Err = RemoveMembersError;
98}
99
100impl<S: BosStr> jacquard_common::xrpc::XrpcRequest for RemoveMembers<S> {
101    const NSID: &'static str = "chat.bsky.group.removeMembers";
102    const METHOD: jacquard_common::xrpc::XrpcMethod =
103        jacquard_common::xrpc::XrpcMethod::Procedure("application/json");
104    type Response = RemoveMembersResponse;
105}
106
107/** Endpoint marker for the `chat.bsky.group.removeMembers` procedure.
108
109Path: `/xrpc/chat.bsky.group.removeMembers`. The request payload type is `RemoveMembers<S>`; send that request with `jacquard::Client` or use this marker through lower-level `XrpcEndpoint` APIs.*/
110pub struct RemoveMembersRequest;
111impl jacquard_common::xrpc::XrpcEndpoint for RemoveMembersRequest {
112    const PATH: &'static str = "/xrpc/chat.bsky.group.removeMembers";
113    const METHOD: jacquard_common::xrpc::XrpcMethod =
114        jacquard_common::xrpc::XrpcMethod::Procedure("application/json");
115    type Request<S: BosStr> = RemoveMembers<S>;
116    type Response = RemoveMembersResponse;
117}
118
119pub mod remove_members_state {
120
121    pub use crate::builder_types::{IsSet, IsUnset, Set, Unset};
122    #[allow(unused)]
123    use ::core::marker::PhantomData;
124    mod sealed {
125        pub trait Sealed {}
126    }
127    /// State trait tracking which required fields have been set
128    pub trait State: sealed::Sealed {
129        type ConvoId;
130        type Members;
131    }
132    /// Empty state - all required fields are unset
133    pub struct Empty(());
134    impl sealed::Sealed for Empty {}
135    impl State for Empty {
136        type ConvoId = Unset;
137        type Members = Unset;
138    }
139    ///State transition - sets the `convo_id` field to Set
140    pub struct SetConvoId<St: State = Empty>(PhantomData<fn() -> St>);
141    impl<St: State> sealed::Sealed for SetConvoId<St> {}
142    impl<St: State> State for SetConvoId<St> {
143        type ConvoId = Set<members::convo_id>;
144        type Members = St::Members;
145    }
146    ///State transition - sets the `members` field to Set
147    pub struct SetMembers<St: State = Empty>(PhantomData<fn() -> St>);
148    impl<St: State> sealed::Sealed for SetMembers<St> {}
149    impl<St: State> State for SetMembers<St> {
150        type ConvoId = St::ConvoId;
151        type Members = Set<members::members>;
152    }
153    /// Marker types for field names
154    #[allow(non_camel_case_types)]
155    pub mod members {
156        ///Marker type for the `convo_id` field
157        pub struct convo_id(());
158        ///Marker type for the `members` field
159        pub struct members(());
160    }
161}
162
163/// Builder for constructing an instance of this type.
164pub struct RemoveMembersBuilder<St: remove_members_state::State, S: BosStr = DefaultStr> {
165    _state: PhantomData<fn() -> St>,
166    _fields: (Option<S>, Option<Vec<Did<S>>>),
167    _type: PhantomData<fn() -> S>,
168}
169
170impl RemoveMembers<DefaultStr> {
171    /// Create a new builder for this type, using the default string type (DefaultStr = SmolStr) if needed
172    pub fn new() -> RemoveMembersBuilder<remove_members_state::Empty, DefaultStr> {
173        RemoveMembersBuilder::new()
174    }
175}
176
177impl<S: BosStr> RemoveMembers<S> {
178    /// Create a new builder for this type
179    pub fn builder() -> RemoveMembersBuilder<remove_members_state::Empty, S> {
180        RemoveMembersBuilder::builder()
181    }
182}
183
184impl RemoveMembersBuilder<remove_members_state::Empty, DefaultStr> {
185    /// Create a new builder with all fields unset, using the default string type, if needed
186    pub fn new() -> Self {
187        RemoveMembersBuilder {
188            _state: PhantomData,
189            _fields: (None, None),
190            _type: PhantomData,
191        }
192    }
193}
194
195impl<S: BosStr> RemoveMembersBuilder<remove_members_state::Empty, S> {
196    /// Create a new builder with all fields unset
197    pub fn builder() -> Self {
198        RemoveMembersBuilder {
199            _state: PhantomData,
200            _fields: (None, None),
201            _type: PhantomData,
202        }
203    }
204}
205
206impl<St, S: BosStr> RemoveMembersBuilder<St, S>
207where
208    St: remove_members_state::State,
209    St::ConvoId: remove_members_state::IsUnset,
210{
211    /// Set the `convoId` field (required)
212    pub fn convo_id(
213        mut self,
214        value: impl Into<S>,
215    ) -> RemoveMembersBuilder<remove_members_state::SetConvoId<St>, S> {
216        self._fields.0 = Option::Some(value.into());
217        RemoveMembersBuilder {
218            _state: PhantomData,
219            _fields: self._fields,
220            _type: PhantomData,
221        }
222    }
223}
224
225impl<St, S: BosStr> RemoveMembersBuilder<St, S>
226where
227    St: remove_members_state::State,
228    St::Members: remove_members_state::IsUnset,
229{
230    /// Set the `members` field (required)
231    pub fn members(
232        mut self,
233        value: impl Into<Vec<Did<S>>>,
234    ) -> RemoveMembersBuilder<remove_members_state::SetMembers<St>, S> {
235        self._fields.1 = Option::Some(value.into());
236        RemoveMembersBuilder {
237            _state: PhantomData,
238            _fields: self._fields,
239            _type: PhantomData,
240        }
241    }
242}
243
244impl<St, S: BosStr> RemoveMembersBuilder<St, S>
245where
246    St: remove_members_state::State,
247    St::ConvoId: remove_members_state::IsSet,
248    St::Members: remove_members_state::IsSet,
249{
250    /// Build the final struct.
251    pub fn build(self) -> RemoveMembers<S> {
252        RemoveMembers {
253            convo_id: self._fields.0.unwrap(),
254            members: self._fields.1.unwrap(),
255            extra_data: Default::default(),
256        }
257    }
258    /// Build the final struct with custom extra_data.
259    pub fn build_with_data(self, extra_data: BTreeMap<SmolStr, Data<S>>) -> RemoveMembers<S> {
260        RemoveMembers {
261            convo_id: self._fields.0.unwrap(),
262            members: self._fields.1.unwrap(),
263            extra_data: Some(extra_data),
264        }
265    }
266}