atproto blogging
1// @generated by jacquard-lexicon. DO NOT EDIT.
2//
3// Lexicon: tools.ozone.team.addMember
4//
5// This file was automatically generated from Lexicon schemas.
6// Any manual changes will be overwritten on the next regeneration.
7
8#[jacquard_derive::lexicon]
9#[derive(
10 serde::Serialize,
11 serde::Deserialize,
12 Debug,
13 Clone,
14 PartialEq,
15 Eq,
16 jacquard_derive::IntoStatic
17)]
18#[serde(rename_all = "camelCase")]
19pub struct AddMember<'a> {
20 #[serde(borrow)]
21 pub did: jacquard_common::types::string::Did<'a>,
22 #[serde(borrow)]
23 pub role: AddMemberRole<'a>,
24}
25
26pub mod add_member_state {
27
28 pub use crate::builder_types::{Set, Unset, IsSet, IsUnset};
29 #[allow(unused)]
30 use ::core::marker::PhantomData;
31 mod sealed {
32 pub trait Sealed {}
33 }
34 /// State trait tracking which required fields have been set
35 pub trait State: sealed::Sealed {
36 type Did;
37 type Role;
38 }
39 /// Empty state - all required fields are unset
40 pub struct Empty(());
41 impl sealed::Sealed for Empty {}
42 impl State for Empty {
43 type Did = Unset;
44 type Role = Unset;
45 }
46 ///State transition - sets the `did` field to Set
47 pub struct SetDid<S: State = Empty>(PhantomData<fn() -> S>);
48 impl<S: State> sealed::Sealed for SetDid<S> {}
49 impl<S: State> State for SetDid<S> {
50 type Did = Set<members::did>;
51 type Role = S::Role;
52 }
53 ///State transition - sets the `role` field to Set
54 pub struct SetRole<S: State = Empty>(PhantomData<fn() -> S>);
55 impl<S: State> sealed::Sealed for SetRole<S> {}
56 impl<S: State> State for SetRole<S> {
57 type Did = S::Did;
58 type Role = Set<members::role>;
59 }
60 /// Marker types for field names
61 #[allow(non_camel_case_types)]
62 pub mod members {
63 ///Marker type for the `did` field
64 pub struct did(());
65 ///Marker type for the `role` field
66 pub struct role(());
67 }
68}
69
70/// Builder for constructing an instance of this type
71pub struct AddMemberBuilder<'a, S: add_member_state::State> {
72 _phantom_state: ::core::marker::PhantomData<fn() -> S>,
73 __unsafe_private_named: (
74 ::core::option::Option<jacquard_common::types::string::Did<'a>>,
75 ::core::option::Option<AddMemberRole<'a>>,
76 ),
77 _phantom: ::core::marker::PhantomData<&'a ()>,
78}
79
80impl<'a> AddMember<'a> {
81 /// Create a new builder for this type
82 pub fn new() -> AddMemberBuilder<'a, add_member_state::Empty> {
83 AddMemberBuilder::new()
84 }
85}
86
87impl<'a> AddMemberBuilder<'a, add_member_state::Empty> {
88 /// Create a new builder with all fields unset
89 pub fn new() -> Self {
90 AddMemberBuilder {
91 _phantom_state: ::core::marker::PhantomData,
92 __unsafe_private_named: (None, None),
93 _phantom: ::core::marker::PhantomData,
94 }
95 }
96}
97
98impl<'a, S> AddMemberBuilder<'a, S>
99where
100 S: add_member_state::State,
101 S::Did: add_member_state::IsUnset,
102{
103 /// Set the `did` field (required)
104 pub fn did(
105 mut self,
106 value: impl Into<jacquard_common::types::string::Did<'a>>,
107 ) -> AddMemberBuilder<'a, add_member_state::SetDid<S>> {
108 self.__unsafe_private_named.0 = ::core::option::Option::Some(value.into());
109 AddMemberBuilder {
110 _phantom_state: ::core::marker::PhantomData,
111 __unsafe_private_named: self.__unsafe_private_named,
112 _phantom: ::core::marker::PhantomData,
113 }
114 }
115}
116
117impl<'a, S> AddMemberBuilder<'a, S>
118where
119 S: add_member_state::State,
120 S::Role: add_member_state::IsUnset,
121{
122 /// Set the `role` field (required)
123 pub fn role(
124 mut self,
125 value: impl Into<AddMemberRole<'a>>,
126 ) -> AddMemberBuilder<'a, add_member_state::SetRole<S>> {
127 self.__unsafe_private_named.1 = ::core::option::Option::Some(value.into());
128 AddMemberBuilder {
129 _phantom_state: ::core::marker::PhantomData,
130 __unsafe_private_named: self.__unsafe_private_named,
131 _phantom: ::core::marker::PhantomData,
132 }
133 }
134}
135
136impl<'a, S> AddMemberBuilder<'a, S>
137where
138 S: add_member_state::State,
139 S::Did: add_member_state::IsSet,
140 S::Role: add_member_state::IsSet,
141{
142 /// Build the final struct
143 pub fn build(self) -> AddMember<'a> {
144 AddMember {
145 did: self.__unsafe_private_named.0.unwrap(),
146 role: self.__unsafe_private_named.1.unwrap(),
147 extra_data: Default::default(),
148 }
149 }
150 /// Build the final struct with custom extra_data
151 pub fn build_with_data(
152 self,
153 extra_data: std::collections::BTreeMap<
154 jacquard_common::smol_str::SmolStr,
155 jacquard_common::types::value::Data<'a>,
156 >,
157 ) -> AddMember<'a> {
158 AddMember {
159 did: self.__unsafe_private_named.0.unwrap(),
160 role: self.__unsafe_private_named.1.unwrap(),
161 extra_data: Some(extra_data),
162 }
163 }
164}
165
166#[derive(Debug, Clone, PartialEq, Eq, Hash)]
167pub enum AddMemberRole<'a> {
168 RoleAdmin,
169 RoleModerator,
170 RoleVerifier,
171 RoleTriage,
172 Other(jacquard_common::CowStr<'a>),
173}
174
175impl<'a> AddMemberRole<'a> {
176 pub fn as_str(&self) -> &str {
177 match self {
178 Self::RoleAdmin => "tools.ozone.team.defs#roleAdmin",
179 Self::RoleModerator => "tools.ozone.team.defs#roleModerator",
180 Self::RoleVerifier => "tools.ozone.team.defs#roleVerifier",
181 Self::RoleTriage => "tools.ozone.team.defs#roleTriage",
182 Self::Other(s) => s.as_ref(),
183 }
184 }
185}
186
187impl<'a> From<&'a str> for AddMemberRole<'a> {
188 fn from(s: &'a str) -> Self {
189 match s {
190 "tools.ozone.team.defs#roleAdmin" => Self::RoleAdmin,
191 "tools.ozone.team.defs#roleModerator" => Self::RoleModerator,
192 "tools.ozone.team.defs#roleVerifier" => Self::RoleVerifier,
193 "tools.ozone.team.defs#roleTriage" => Self::RoleTriage,
194 _ => Self::Other(jacquard_common::CowStr::from(s)),
195 }
196 }
197}
198
199impl<'a> From<String> for AddMemberRole<'a> {
200 fn from(s: String) -> Self {
201 match s.as_str() {
202 "tools.ozone.team.defs#roleAdmin" => Self::RoleAdmin,
203 "tools.ozone.team.defs#roleModerator" => Self::RoleModerator,
204 "tools.ozone.team.defs#roleVerifier" => Self::RoleVerifier,
205 "tools.ozone.team.defs#roleTriage" => Self::RoleTriage,
206 _ => Self::Other(jacquard_common::CowStr::from(s)),
207 }
208 }
209}
210
211impl<'a> core::fmt::Display for AddMemberRole<'a> {
212 fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
213 write!(f, "{}", self.as_str())
214 }
215}
216
217impl<'a> AsRef<str> for AddMemberRole<'a> {
218 fn as_ref(&self) -> &str {
219 self.as_str()
220 }
221}
222
223impl<'a> serde::Serialize for AddMemberRole<'a> {
224 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
225 where
226 S: serde::Serializer,
227 {
228 serializer.serialize_str(self.as_str())
229 }
230}
231
232impl<'de, 'a> serde::Deserialize<'de> for AddMemberRole<'a>
233where
234 'de: 'a,
235{
236 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
237 where
238 D: serde::Deserializer<'de>,
239 {
240 let s = <&'de str>::deserialize(deserializer)?;
241 Ok(Self::from(s))
242 }
243}
244
245impl<'a> Default for AddMemberRole<'a> {
246 fn default() -> Self {
247 Self::Other(Default::default())
248 }
249}
250
251impl jacquard_common::IntoStatic for AddMemberRole<'_> {
252 type Output = AddMemberRole<'static>;
253 fn into_static(self) -> Self::Output {
254 match self {
255 AddMemberRole::RoleAdmin => AddMemberRole::RoleAdmin,
256 AddMemberRole::RoleModerator => AddMemberRole::RoleModerator,
257 AddMemberRole::RoleVerifier => AddMemberRole::RoleVerifier,
258 AddMemberRole::RoleTriage => AddMemberRole::RoleTriage,
259 AddMemberRole::Other(v) => AddMemberRole::Other(v.into_static()),
260 }
261 }
262}
263
264#[jacquard_derive::lexicon]
265#[derive(
266 serde::Serialize,
267 serde::Deserialize,
268 Debug,
269 Clone,
270 PartialEq,
271 Eq,
272 jacquard_derive::IntoStatic
273)]
274#[serde(rename_all = "camelCase")]
275pub struct AddMemberOutput<'a> {
276 #[serde(flatten)]
277 #[serde(borrow)]
278 pub value: crate::tools_ozone::team::Member<'a>,
279}
280
281#[jacquard_derive::open_union]
282#[derive(
283 serde::Serialize,
284 serde::Deserialize,
285 Debug,
286 Clone,
287 PartialEq,
288 Eq,
289 thiserror::Error,
290 miette::Diagnostic,
291 jacquard_derive::IntoStatic
292)]
293#[serde(tag = "error", content = "message")]
294#[serde(bound(deserialize = "'de: 'a"))]
295pub enum AddMemberError<'a> {
296 /// Member already exists in the team.
297 #[serde(rename = "MemberAlreadyExists")]
298 MemberAlreadyExists(std::option::Option<jacquard_common::CowStr<'a>>),
299}
300
301impl core::fmt::Display for AddMemberError<'_> {
302 fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
303 match self {
304 Self::MemberAlreadyExists(msg) => {
305 write!(f, "MemberAlreadyExists")?;
306 if let Some(msg) = msg {
307 write!(f, ": {}", msg)?;
308 }
309 Ok(())
310 }
311 Self::Unknown(err) => write!(f, "Unknown error: {:?}", err),
312 }
313 }
314}
315
316/// Response type for
317///tools.ozone.team.addMember
318pub struct AddMemberResponse;
319impl jacquard_common::xrpc::XrpcResp for AddMemberResponse {
320 const NSID: &'static str = "tools.ozone.team.addMember";
321 const ENCODING: &'static str = "application/json";
322 type Output<'de> = AddMemberOutput<'de>;
323 type Err<'de> = AddMemberError<'de>;
324}
325
326impl<'a> jacquard_common::xrpc::XrpcRequest for AddMember<'a> {
327 const NSID: &'static str = "tools.ozone.team.addMember";
328 const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Procedure(
329 "application/json",
330 );
331 type Response = AddMemberResponse;
332}
333
334/// Endpoint type for
335///tools.ozone.team.addMember
336pub struct AddMemberRequest;
337impl jacquard_common::xrpc::XrpcEndpoint for AddMemberRequest {
338 const PATH: &'static str = "/xrpc/tools.ozone.team.addMember";
339 const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Procedure(
340 "application/json",
341 );
342 type Request<'de> = AddMember<'de>;
343 type Response = AddMemberResponse;
344}