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