1#[allow(unused_imports)]
9use alloc::collections::BTreeMap;
10
11#[allow(unused_imports)]
12use core::marker::PhantomData;
13use jacquard_common::{CowStr, BosStr, DefaultStr, FromStaticStr};
14use jacquard_common::deps::smol_str::SmolStr;
15use jacquard_common::types::string::UriValue;
16use jacquard_common::types::value::Data;
17use jacquard_derive::IntoStatic;
18use serde::{Serialize, Deserialize};
19use crate::network_slices::slice::get_o_auth_clients::OauthClientDetails;
20
21#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic)]
22#[serde(rename_all = "camelCase", bound(deserialize = "S: Deserialize<'de> + BosStr"))]
23pub struct CreateOAuthClient<S: BosStr = DefaultStr> {
24 pub client_name: S,
26 #[serde(skip_serializing_if = "Option::is_none")]
28 pub client_uri: Option<UriValue<S>>,
29 #[serde(skip_serializing_if = "Option::is_none")]
31 pub grant_types: Option<Vec<S>>,
32 #[serde(skip_serializing_if = "Option::is_none")]
34 pub logo_uri: Option<UriValue<S>>,
35 #[serde(skip_serializing_if = "Option::is_none")]
37 pub policy_uri: Option<UriValue<S>>,
38 pub redirect_uris: Vec<UriValue<S>>,
40 #[serde(skip_serializing_if = "Option::is_none")]
42 pub response_types: Option<Vec<S>>,
43 #[serde(skip_serializing_if = "Option::is_none")]
45 pub scope: Option<S>,
46 pub slice_uri: S,
48 #[serde(skip_serializing_if = "Option::is_none")]
50 pub tos_uri: Option<UriValue<S>>,
51 #[serde(flatten, default, skip_serializing_if = "Option::is_none")]
52 pub extra_data: Option<BTreeMap<SmolStr, Data<S>>>,
53}
54
55
56#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic)]
57#[serde(rename_all = "camelCase", bound(deserialize = "S: Deserialize<'de> + BosStr"))]
58pub struct CreateOAuthClientOutput<S: BosStr = DefaultStr> {
59 #[serde(flatten)]
60 pub value: OauthClientDetails<S>,
61 #[serde(flatten, default, skip_serializing_if = "Option::is_none")]
62 pub extra_data: Option<BTreeMap<SmolStr, Data<S>>>,
63}
64
65pub struct CreateOAuthClientResponse;
69impl jacquard_common::xrpc::XrpcResp for CreateOAuthClientResponse {
70 const NSID: &'static str = "network.slices.slice.createOAuthClient";
71 const ENCODING: &'static str = "application/json";
72 type Output<S: BosStr> = CreateOAuthClientOutput<S>;
73 type Err = jacquard_common::xrpc::GenericError;
74}
75
76impl<S: BosStr> jacquard_common::xrpc::XrpcRequest for CreateOAuthClient<S> {
77 const NSID: &'static str = "network.slices.slice.createOAuthClient";
78 const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Procedure(
79 "application/json",
80 );
81 type Response = CreateOAuthClientResponse;
82}
83
84pub struct CreateOAuthClientRequest;
88impl jacquard_common::xrpc::XrpcEndpoint for CreateOAuthClientRequest {
89 const PATH: &'static str = "/xrpc/network.slices.slice.createOAuthClient";
90 const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Procedure(
91 "application/json",
92 );
93 type Request<S: BosStr> = CreateOAuthClient<S>;
94 type Response = CreateOAuthClientResponse;
95}
96
97pub mod create_o_auth_client_state {
98
99 pub use crate::builder_types::{Set, Unset, IsSet, IsUnset};
100 #[allow(unused)]
101 use ::core::marker::PhantomData;
102 mod sealed {
103 pub trait Sealed {}
104 }
105 pub trait State: sealed::Sealed {
107 type ClientName;
108 type RedirectUris;
109 type SliceUri;
110 }
111 pub struct Empty(());
113 impl sealed::Sealed for Empty {}
114 impl State for Empty {
115 type ClientName = Unset;
116 type RedirectUris = Unset;
117 type SliceUri = Unset;
118 }
119 pub struct SetClientName<St: State = Empty>(PhantomData<fn() -> St>);
121 impl<St: State> sealed::Sealed for SetClientName<St> {}
122 impl<St: State> State for SetClientName<St> {
123 type ClientName = Set<members::client_name>;
124 type RedirectUris = St::RedirectUris;
125 type SliceUri = St::SliceUri;
126 }
127 pub struct SetRedirectUris<St: State = Empty>(PhantomData<fn() -> St>);
129 impl<St: State> sealed::Sealed for SetRedirectUris<St> {}
130 impl<St: State> State for SetRedirectUris<St> {
131 type ClientName = St::ClientName;
132 type RedirectUris = Set<members::redirect_uris>;
133 type SliceUri = St::SliceUri;
134 }
135 pub struct SetSliceUri<St: State = Empty>(PhantomData<fn() -> St>);
137 impl<St: State> sealed::Sealed for SetSliceUri<St> {}
138 impl<St: State> State for SetSliceUri<St> {
139 type ClientName = St::ClientName;
140 type RedirectUris = St::RedirectUris;
141 type SliceUri = Set<members::slice_uri>;
142 }
143 #[allow(non_camel_case_types)]
145 pub mod members {
146 pub struct client_name(());
148 pub struct redirect_uris(());
150 pub struct slice_uri(());
152 }
153}
154
155pub struct CreateOAuthClientBuilder<
157 St: create_o_auth_client_state::State,
158 S: BosStr = DefaultStr,
159> {
160 _state: PhantomData<fn() -> St>,
161 _fields: (
162 Option<S>,
163 Option<UriValue<S>>,
164 Option<Vec<S>>,
165 Option<UriValue<S>>,
166 Option<UriValue<S>>,
167 Option<Vec<UriValue<S>>>,
168 Option<Vec<S>>,
169 Option<S>,
170 Option<S>,
171 Option<UriValue<S>>,
172 ),
173 _type: PhantomData<fn() -> S>,
174}
175
176impl CreateOAuthClient<DefaultStr> {
177 pub fn new() -> CreateOAuthClientBuilder<
179 create_o_auth_client_state::Empty,
180 DefaultStr,
181 > {
182 CreateOAuthClientBuilder::new()
183 }
184}
185
186impl<S: BosStr> CreateOAuthClient<S> {
187 pub fn builder() -> CreateOAuthClientBuilder<create_o_auth_client_state::Empty, S> {
189 CreateOAuthClientBuilder::builder()
190 }
191}
192
193impl CreateOAuthClientBuilder<create_o_auth_client_state::Empty, DefaultStr> {
194 pub fn new() -> Self {
196 CreateOAuthClientBuilder {
197 _state: PhantomData,
198 _fields: (None, None, None, None, None, None, None, None, None, None),
199 _type: PhantomData,
200 }
201 }
202}
203
204impl<S: BosStr> CreateOAuthClientBuilder<create_o_auth_client_state::Empty, S> {
205 pub fn builder() -> Self {
207 CreateOAuthClientBuilder {
208 _state: PhantomData,
209 _fields: (None, None, None, None, None, None, None, None, None, None),
210 _type: PhantomData,
211 }
212 }
213}
214
215impl<St, S: BosStr> CreateOAuthClientBuilder<St, S>
216where
217 St: create_o_auth_client_state::State,
218 St::ClientName: create_o_auth_client_state::IsUnset,
219{
220 pub fn client_name(
222 mut self,
223 value: impl Into<S>,
224 ) -> CreateOAuthClientBuilder<create_o_auth_client_state::SetClientName<St>, S> {
225 self._fields.0 = Option::Some(value.into());
226 CreateOAuthClientBuilder {
227 _state: PhantomData,
228 _fields: self._fields,
229 _type: PhantomData,
230 }
231 }
232}
233
234impl<St: create_o_auth_client_state::State, S: BosStr> CreateOAuthClientBuilder<St, S> {
235 pub fn client_uri(mut self, value: impl Into<Option<UriValue<S>>>) -> Self {
237 self._fields.1 = value.into();
238 self
239 }
240 pub fn maybe_client_uri(mut self, value: Option<UriValue<S>>) -> Self {
242 self._fields.1 = value;
243 self
244 }
245}
246
247impl<St: create_o_auth_client_state::State, S: BosStr> CreateOAuthClientBuilder<St, S> {
248 pub fn grant_types(mut self, value: impl Into<Option<Vec<S>>>) -> Self {
250 self._fields.2 = value.into();
251 self
252 }
253 pub fn maybe_grant_types(mut self, value: Option<Vec<S>>) -> Self {
255 self._fields.2 = value;
256 self
257 }
258}
259
260impl<St: create_o_auth_client_state::State, S: BosStr> CreateOAuthClientBuilder<St, S> {
261 pub fn logo_uri(mut self, value: impl Into<Option<UriValue<S>>>) -> Self {
263 self._fields.3 = value.into();
264 self
265 }
266 pub fn maybe_logo_uri(mut self, value: Option<UriValue<S>>) -> Self {
268 self._fields.3 = value;
269 self
270 }
271}
272
273impl<St: create_o_auth_client_state::State, S: BosStr> CreateOAuthClientBuilder<St, S> {
274 pub fn policy_uri(mut self, value: impl Into<Option<UriValue<S>>>) -> Self {
276 self._fields.4 = value.into();
277 self
278 }
279 pub fn maybe_policy_uri(mut self, value: Option<UriValue<S>>) -> Self {
281 self._fields.4 = value;
282 self
283 }
284}
285
286impl<St, S: BosStr> CreateOAuthClientBuilder<St, S>
287where
288 St: create_o_auth_client_state::State,
289 St::RedirectUris: create_o_auth_client_state::IsUnset,
290{
291 pub fn redirect_uris(
293 mut self,
294 value: impl Into<Vec<UriValue<S>>>,
295 ) -> CreateOAuthClientBuilder<create_o_auth_client_state::SetRedirectUris<St>, S> {
296 self._fields.5 = Option::Some(value.into());
297 CreateOAuthClientBuilder {
298 _state: PhantomData,
299 _fields: self._fields,
300 _type: PhantomData,
301 }
302 }
303}
304
305impl<St: create_o_auth_client_state::State, S: BosStr> CreateOAuthClientBuilder<St, S> {
306 pub fn response_types(mut self, value: impl Into<Option<Vec<S>>>) -> Self {
308 self._fields.6 = value.into();
309 self
310 }
311 pub fn maybe_response_types(mut self, value: Option<Vec<S>>) -> Self {
313 self._fields.6 = value;
314 self
315 }
316}
317
318impl<St: create_o_auth_client_state::State, S: BosStr> CreateOAuthClientBuilder<St, S> {
319 pub fn scope(mut self, value: impl Into<Option<S>>) -> Self {
321 self._fields.7 = value.into();
322 self
323 }
324 pub fn maybe_scope(mut self, value: Option<S>) -> Self {
326 self._fields.7 = value;
327 self
328 }
329}
330
331impl<St, S: BosStr> CreateOAuthClientBuilder<St, S>
332where
333 St: create_o_auth_client_state::State,
334 St::SliceUri: create_o_auth_client_state::IsUnset,
335{
336 pub fn slice_uri(
338 mut self,
339 value: impl Into<S>,
340 ) -> CreateOAuthClientBuilder<create_o_auth_client_state::SetSliceUri<St>, S> {
341 self._fields.8 = Option::Some(value.into());
342 CreateOAuthClientBuilder {
343 _state: PhantomData,
344 _fields: self._fields,
345 _type: PhantomData,
346 }
347 }
348}
349
350impl<St: create_o_auth_client_state::State, S: BosStr> CreateOAuthClientBuilder<St, S> {
351 pub fn tos_uri(mut self, value: impl Into<Option<UriValue<S>>>) -> Self {
353 self._fields.9 = value.into();
354 self
355 }
356 pub fn maybe_tos_uri(mut self, value: Option<UriValue<S>>) -> Self {
358 self._fields.9 = value;
359 self
360 }
361}
362
363impl<St, S: BosStr> CreateOAuthClientBuilder<St, S>
364where
365 St: create_o_auth_client_state::State,
366 St::ClientName: create_o_auth_client_state::IsSet,
367 St::RedirectUris: create_o_auth_client_state::IsSet,
368 St::SliceUri: create_o_auth_client_state::IsSet,
369{
370 pub fn build(self) -> CreateOAuthClient<S> {
372 CreateOAuthClient {
373 client_name: self._fields.0.unwrap(),
374 client_uri: self._fields.1,
375 grant_types: self._fields.2,
376 logo_uri: self._fields.3,
377 policy_uri: self._fields.4,
378 redirect_uris: self._fields.5.unwrap(),
379 response_types: self._fields.6,
380 scope: self._fields.7,
381 slice_uri: self._fields.8.unwrap(),
382 tos_uri: self._fields.9,
383 extra_data: Default::default(),
384 }
385 }
386 pub fn build_with_data(
388 self,
389 extra_data: BTreeMap<SmolStr, Data<S>>,
390 ) -> CreateOAuthClient<S> {
391 CreateOAuthClient {
392 client_name: self._fields.0.unwrap(),
393 client_uri: self._fields.1,
394 grant_types: self._fields.2,
395 logo_uri: self._fields.3,
396 policy_uri: self._fields.4,
397 redirect_uris: self._fields.5.unwrap(),
398 response_types: self._fields.6,
399 scope: self._fields.7,
400 slice_uri: self._fields.8.unwrap(),
401 tos_uri: self._fields.9,
402 extra_data: Some(extra_data),
403 }
404 }
405}