jacquard_api/chat_bsky/group/
remove_members.rs1#[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 #[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
89pub 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
107pub 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 pub trait State: sealed::Sealed {
129 type ConvoId;
130 type Members;
131 }
132 pub struct Empty(());
134 impl sealed::Sealed for Empty {}
135 impl State for Empty {
136 type ConvoId = Unset;
137 type Members = Unset;
138 }
139 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 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 #[allow(non_camel_case_types)]
155 pub mod members {
156 pub struct convo_id(());
158 pub struct members(());
160 }
161}
162
163pub 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 pub fn new() -> RemoveMembersBuilder<remove_members_state::Empty, DefaultStr> {
173 RemoveMembersBuilder::new()
174 }
175}
176
177impl<S: BosStr> RemoveMembers<S> {
178 pub fn builder() -> RemoveMembersBuilder<remove_members_state::Empty, S> {
180 RemoveMembersBuilder::builder()
181 }
182}
183
184impl RemoveMembersBuilder<remove_members_state::Empty, DefaultStr> {
185 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 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 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 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 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 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}