dropbox_sdk/generated/types/
team.rs

1// DO NOT EDIT
2// This file was @generated by Stone
3
4#![allow(
5    clippy::too_many_arguments,
6    clippy::large_enum_variant,
7    clippy::result_large_err,
8    clippy::doc_markdown,
9)]
10
11pub type GroupsGetInfoResult = Vec<GroupsGetInfoItem>;
12pub type LegalHoldId = String;
13pub type LegalHoldPolicyDescription = String;
14pub type LegalHoldPolicyName = String;
15pub type LegalHoldsGetPolicyResult = LegalHoldPolicy;
16pub type LegalHoldsPolicyCreateResult = LegalHoldPolicy;
17pub type LegalHoldsPolicyUpdateResult = LegalHoldPolicy;
18pub type ListHeldRevisionCursor = String;
19pub type MembersGetInfoResult = Vec<MembersGetInfoItem>;
20pub type NumberPerDay = Vec<Option<u64>>;
21pub type Path = String;
22pub type SecondaryEmail = crate::types::secondary_emails::SecondaryEmail;
23pub type TeamMemberRoleId = String;
24pub type UserQuota = u32;
25
26/// Information on active web sessions.
27#[derive(Debug, Clone, PartialEq, Eq)]
28#[non_exhaustive] // structs may have more fields added in the future.
29pub struct ActiveWebSession {
30    /// The session id.
31    pub session_id: String,
32    /// Information on the hosting device.
33    pub user_agent: String,
34    /// Information on the hosting operating system.
35    pub os: String,
36    /// Information on the browser used for this web session.
37    pub browser: String,
38    /// The IP address of the last activity from this session.
39    pub ip_address: Option<String>,
40    /// The country from which the last activity from this session was made.
41    pub country: Option<String>,
42    /// The time this session was created.
43    pub created: Option<crate::types::common::DropboxTimestamp>,
44    /// The time of the last activity from this session.
45    pub updated: Option<crate::types::common::DropboxTimestamp>,
46    /// The time this session expires.
47    pub expires: Option<crate::types::common::DropboxTimestamp>,
48}
49
50impl ActiveWebSession {
51    pub fn new(session_id: String, user_agent: String, os: String, browser: String) -> Self {
52        ActiveWebSession {
53            session_id,
54            user_agent,
55            os,
56            browser,
57            ip_address: None,
58            country: None,
59            created: None,
60            updated: None,
61            expires: None,
62        }
63    }
64
65    pub fn with_ip_address(mut self, value: String) -> Self {
66        self.ip_address = Some(value);
67        self
68    }
69
70    pub fn with_country(mut self, value: String) -> Self {
71        self.country = Some(value);
72        self
73    }
74
75    pub fn with_created(mut self, value: crate::types::common::DropboxTimestamp) -> Self {
76        self.created = Some(value);
77        self
78    }
79
80    pub fn with_updated(mut self, value: crate::types::common::DropboxTimestamp) -> Self {
81        self.updated = Some(value);
82        self
83    }
84
85    pub fn with_expires(mut self, value: crate::types::common::DropboxTimestamp) -> Self {
86        self.expires = Some(value);
87        self
88    }
89}
90
91const ACTIVE_WEB_SESSION_FIELDS: &[&str] = &["session_id",
92                                             "user_agent",
93                                             "os",
94                                             "browser",
95                                             "ip_address",
96                                             "country",
97                                             "created",
98                                             "updated",
99                                             "expires"];
100impl ActiveWebSession {
101    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
102        map: V,
103    ) -> Result<ActiveWebSession, V::Error> {
104        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
105    }
106
107    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
108        mut map: V,
109        optional: bool,
110    ) -> Result<Option<ActiveWebSession>, V::Error> {
111        let mut field_session_id = None;
112        let mut field_user_agent = None;
113        let mut field_os = None;
114        let mut field_browser = None;
115        let mut field_ip_address = None;
116        let mut field_country = None;
117        let mut field_created = None;
118        let mut field_updated = None;
119        let mut field_expires = None;
120        let mut nothing = true;
121        while let Some(key) = map.next_key::<&str>()? {
122            nothing = false;
123            match key {
124                "session_id" => {
125                    if field_session_id.is_some() {
126                        return Err(::serde::de::Error::duplicate_field("session_id"));
127                    }
128                    field_session_id = Some(map.next_value()?);
129                }
130                "user_agent" => {
131                    if field_user_agent.is_some() {
132                        return Err(::serde::de::Error::duplicate_field("user_agent"));
133                    }
134                    field_user_agent = Some(map.next_value()?);
135                }
136                "os" => {
137                    if field_os.is_some() {
138                        return Err(::serde::de::Error::duplicate_field("os"));
139                    }
140                    field_os = Some(map.next_value()?);
141                }
142                "browser" => {
143                    if field_browser.is_some() {
144                        return Err(::serde::de::Error::duplicate_field("browser"));
145                    }
146                    field_browser = Some(map.next_value()?);
147                }
148                "ip_address" => {
149                    if field_ip_address.is_some() {
150                        return Err(::serde::de::Error::duplicate_field("ip_address"));
151                    }
152                    field_ip_address = Some(map.next_value()?);
153                }
154                "country" => {
155                    if field_country.is_some() {
156                        return Err(::serde::de::Error::duplicate_field("country"));
157                    }
158                    field_country = Some(map.next_value()?);
159                }
160                "created" => {
161                    if field_created.is_some() {
162                        return Err(::serde::de::Error::duplicate_field("created"));
163                    }
164                    field_created = Some(map.next_value()?);
165                }
166                "updated" => {
167                    if field_updated.is_some() {
168                        return Err(::serde::de::Error::duplicate_field("updated"));
169                    }
170                    field_updated = Some(map.next_value()?);
171                }
172                "expires" => {
173                    if field_expires.is_some() {
174                        return Err(::serde::de::Error::duplicate_field("expires"));
175                    }
176                    field_expires = Some(map.next_value()?);
177                }
178                _ => {
179                    // unknown field allowed and ignored
180                    map.next_value::<::serde_json::Value>()?;
181                }
182            }
183        }
184        if optional && nothing {
185            return Ok(None);
186        }
187        let result = ActiveWebSession {
188            session_id: field_session_id.ok_or_else(|| ::serde::de::Error::missing_field("session_id"))?,
189            user_agent: field_user_agent.ok_or_else(|| ::serde::de::Error::missing_field("user_agent"))?,
190            os: field_os.ok_or_else(|| ::serde::de::Error::missing_field("os"))?,
191            browser: field_browser.ok_or_else(|| ::serde::de::Error::missing_field("browser"))?,
192            ip_address: field_ip_address.and_then(Option::flatten),
193            country: field_country.and_then(Option::flatten),
194            created: field_created.and_then(Option::flatten),
195            updated: field_updated.and_then(Option::flatten),
196            expires: field_expires.and_then(Option::flatten),
197        };
198        Ok(Some(result))
199    }
200
201    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
202        &self,
203        s: &mut S::SerializeStruct,
204    ) -> Result<(), S::Error> {
205        use serde::ser::SerializeStruct;
206        s.serialize_field("session_id", &self.session_id)?;
207        s.serialize_field("user_agent", &self.user_agent)?;
208        s.serialize_field("os", &self.os)?;
209        s.serialize_field("browser", &self.browser)?;
210        if let Some(val) = &self.ip_address {
211            s.serialize_field("ip_address", val)?;
212        }
213        if let Some(val) = &self.country {
214            s.serialize_field("country", val)?;
215        }
216        if let Some(val) = &self.created {
217            s.serialize_field("created", val)?;
218        }
219        if let Some(val) = &self.updated {
220            s.serialize_field("updated", val)?;
221        }
222        if let Some(val) = &self.expires {
223            s.serialize_field("expires", val)?;
224        }
225        Ok(())
226    }
227}
228
229impl<'de> ::serde::de::Deserialize<'de> for ActiveWebSession {
230    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
231        // struct deserializer
232        use serde::de::{MapAccess, Visitor};
233        struct StructVisitor;
234        impl<'de> Visitor<'de> for StructVisitor {
235            type Value = ActiveWebSession;
236            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
237                f.write_str("a ActiveWebSession struct")
238            }
239            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
240                ActiveWebSession::internal_deserialize(map)
241            }
242        }
243        deserializer.deserialize_struct("ActiveWebSession", ACTIVE_WEB_SESSION_FIELDS, StructVisitor)
244    }
245}
246
247impl ::serde::ser::Serialize for ActiveWebSession {
248    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
249        // struct serializer
250        use serde::ser::SerializeStruct;
251        let mut s = serializer.serialize_struct("ActiveWebSession", 9)?;
252        self.internal_serialize::<S>(&mut s)?;
253        s.end()
254    }
255}
256
257// struct extends DeviceSession
258impl From<ActiveWebSession> for DeviceSession {
259    fn from(subtype: ActiveWebSession) -> Self {
260        Self {
261            session_id: subtype.session_id,
262            ip_address: subtype.ip_address,
263            country: subtype.country,
264            created: subtype.created,
265            updated: subtype.updated,
266        }
267    }
268}
269/// Result of trying to add a secondary email to a user. 'success' is the only value indicating that
270/// a secondary email was successfully added to a user. The other values explain the type of error
271/// that occurred, and include the email for which the error occurred.
272#[derive(Debug, Clone, PartialEq, Eq)]
273#[non_exhaustive] // variants may be added in the future
274pub enum AddSecondaryEmailResult {
275    /// Describes a secondary email that was successfully added to a user.
276    Success(SecondaryEmail),
277    /// Secondary email is not available to be claimed by the user.
278    Unavailable(crate::types::common::EmailAddress),
279    /// Secondary email is already a pending email for the user.
280    AlreadyPending(crate::types::common::EmailAddress),
281    /// Secondary email is already a verified email for the user.
282    AlreadyOwnedByUser(crate::types::common::EmailAddress),
283    /// User already has the maximum number of secondary emails allowed.
284    ReachedLimit(crate::types::common::EmailAddress),
285    /// A transient error occurred. Please try again later.
286    TransientError(crate::types::common::EmailAddress),
287    /// An error occurred due to conflicting updates. Please try again later.
288    TooManyUpdates(crate::types::common::EmailAddress),
289    /// An unknown error occurred.
290    UnknownError(crate::types::common::EmailAddress),
291    /// Too many emails are being sent to this email address. Please try again later.
292    RateLimited(crate::types::common::EmailAddress),
293    /// Catch-all used for unrecognized values returned from the server. Encountering this value
294    /// typically indicates that this SDK version is out of date.
295    Other,
296}
297
298impl<'de> ::serde::de::Deserialize<'de> for AddSecondaryEmailResult {
299    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
300        // union deserializer
301        use serde::de::{self, MapAccess, Visitor};
302        struct EnumVisitor;
303        impl<'de> Visitor<'de> for EnumVisitor {
304            type Value = AddSecondaryEmailResult;
305            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
306                f.write_str("a AddSecondaryEmailResult structure")
307            }
308            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
309                let tag: &str = match map.next_key()? {
310                    Some(".tag") => map.next_value()?,
311                    _ => return Err(de::Error::missing_field(".tag"))
312                };
313                let value = match tag {
314                    "success" => AddSecondaryEmailResult::Success(SecondaryEmail::internal_deserialize(&mut map)?),
315                    "unavailable" => {
316                        match map.next_key()? {
317                            Some("unavailable") => AddSecondaryEmailResult::Unavailable(map.next_value()?),
318                            None => return Err(de::Error::missing_field("unavailable")),
319                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
320                        }
321                    }
322                    "already_pending" => {
323                        match map.next_key()? {
324                            Some("already_pending") => AddSecondaryEmailResult::AlreadyPending(map.next_value()?),
325                            None => return Err(de::Error::missing_field("already_pending")),
326                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
327                        }
328                    }
329                    "already_owned_by_user" => {
330                        match map.next_key()? {
331                            Some("already_owned_by_user") => AddSecondaryEmailResult::AlreadyOwnedByUser(map.next_value()?),
332                            None => return Err(de::Error::missing_field("already_owned_by_user")),
333                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
334                        }
335                    }
336                    "reached_limit" => {
337                        match map.next_key()? {
338                            Some("reached_limit") => AddSecondaryEmailResult::ReachedLimit(map.next_value()?),
339                            None => return Err(de::Error::missing_field("reached_limit")),
340                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
341                        }
342                    }
343                    "transient_error" => {
344                        match map.next_key()? {
345                            Some("transient_error") => AddSecondaryEmailResult::TransientError(map.next_value()?),
346                            None => return Err(de::Error::missing_field("transient_error")),
347                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
348                        }
349                    }
350                    "too_many_updates" => {
351                        match map.next_key()? {
352                            Some("too_many_updates") => AddSecondaryEmailResult::TooManyUpdates(map.next_value()?),
353                            None => return Err(de::Error::missing_field("too_many_updates")),
354                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
355                        }
356                    }
357                    "unknown_error" => {
358                        match map.next_key()? {
359                            Some("unknown_error") => AddSecondaryEmailResult::UnknownError(map.next_value()?),
360                            None => return Err(de::Error::missing_field("unknown_error")),
361                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
362                        }
363                    }
364                    "rate_limited" => {
365                        match map.next_key()? {
366                            Some("rate_limited") => AddSecondaryEmailResult::RateLimited(map.next_value()?),
367                            None => return Err(de::Error::missing_field("rate_limited")),
368                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
369                        }
370                    }
371                    _ => AddSecondaryEmailResult::Other,
372                };
373                crate::eat_json_fields(&mut map)?;
374                Ok(value)
375            }
376        }
377        const VARIANTS: &[&str] = &["success",
378                                    "unavailable",
379                                    "already_pending",
380                                    "already_owned_by_user",
381                                    "reached_limit",
382                                    "transient_error",
383                                    "too_many_updates",
384                                    "unknown_error",
385                                    "rate_limited",
386                                    "other"];
387        deserializer.deserialize_struct("AddSecondaryEmailResult", VARIANTS, EnumVisitor)
388    }
389}
390
391impl ::serde::ser::Serialize for AddSecondaryEmailResult {
392    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
393        // union serializer
394        use serde::ser::SerializeStruct;
395        match self {
396            AddSecondaryEmailResult::Success(x) => {
397                // struct
398                let mut s = serializer.serialize_struct("AddSecondaryEmailResult", 3)?;
399                s.serialize_field(".tag", "success")?;
400                x.internal_serialize::<S>(&mut s)?;
401                s.end()
402            }
403            AddSecondaryEmailResult::Unavailable(x) => {
404                // primitive
405                let mut s = serializer.serialize_struct("AddSecondaryEmailResult", 2)?;
406                s.serialize_field(".tag", "unavailable")?;
407                s.serialize_field("unavailable", x)?;
408                s.end()
409            }
410            AddSecondaryEmailResult::AlreadyPending(x) => {
411                // primitive
412                let mut s = serializer.serialize_struct("AddSecondaryEmailResult", 2)?;
413                s.serialize_field(".tag", "already_pending")?;
414                s.serialize_field("already_pending", x)?;
415                s.end()
416            }
417            AddSecondaryEmailResult::AlreadyOwnedByUser(x) => {
418                // primitive
419                let mut s = serializer.serialize_struct("AddSecondaryEmailResult", 2)?;
420                s.serialize_field(".tag", "already_owned_by_user")?;
421                s.serialize_field("already_owned_by_user", x)?;
422                s.end()
423            }
424            AddSecondaryEmailResult::ReachedLimit(x) => {
425                // primitive
426                let mut s = serializer.serialize_struct("AddSecondaryEmailResult", 2)?;
427                s.serialize_field(".tag", "reached_limit")?;
428                s.serialize_field("reached_limit", x)?;
429                s.end()
430            }
431            AddSecondaryEmailResult::TransientError(x) => {
432                // primitive
433                let mut s = serializer.serialize_struct("AddSecondaryEmailResult", 2)?;
434                s.serialize_field(".tag", "transient_error")?;
435                s.serialize_field("transient_error", x)?;
436                s.end()
437            }
438            AddSecondaryEmailResult::TooManyUpdates(x) => {
439                // primitive
440                let mut s = serializer.serialize_struct("AddSecondaryEmailResult", 2)?;
441                s.serialize_field(".tag", "too_many_updates")?;
442                s.serialize_field("too_many_updates", x)?;
443                s.end()
444            }
445            AddSecondaryEmailResult::UnknownError(x) => {
446                // primitive
447                let mut s = serializer.serialize_struct("AddSecondaryEmailResult", 2)?;
448                s.serialize_field(".tag", "unknown_error")?;
449                s.serialize_field("unknown_error", x)?;
450                s.end()
451            }
452            AddSecondaryEmailResult::RateLimited(x) => {
453                // primitive
454                let mut s = serializer.serialize_struct("AddSecondaryEmailResult", 2)?;
455                s.serialize_field(".tag", "rate_limited")?;
456                s.serialize_field("rate_limited", x)?;
457                s.end()
458            }
459            AddSecondaryEmailResult::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
460        }
461    }
462}
463
464#[derive(Debug, Clone, PartialEq, Eq)]
465#[non_exhaustive] // structs may have more fields added in the future.
466pub struct AddSecondaryEmailsArg {
467    /// List of users and secondary emails to add.
468    pub new_secondary_emails: Vec<UserSecondaryEmailsArg>,
469}
470
471impl AddSecondaryEmailsArg {
472    pub fn new(new_secondary_emails: Vec<UserSecondaryEmailsArg>) -> Self {
473        AddSecondaryEmailsArg {
474            new_secondary_emails,
475        }
476    }
477}
478
479const ADD_SECONDARY_EMAILS_ARG_FIELDS: &[&str] = &["new_secondary_emails"];
480impl AddSecondaryEmailsArg {
481    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
482        map: V,
483    ) -> Result<AddSecondaryEmailsArg, V::Error> {
484        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
485    }
486
487    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
488        mut map: V,
489        optional: bool,
490    ) -> Result<Option<AddSecondaryEmailsArg>, V::Error> {
491        let mut field_new_secondary_emails = None;
492        let mut nothing = true;
493        while let Some(key) = map.next_key::<&str>()? {
494            nothing = false;
495            match key {
496                "new_secondary_emails" => {
497                    if field_new_secondary_emails.is_some() {
498                        return Err(::serde::de::Error::duplicate_field("new_secondary_emails"));
499                    }
500                    field_new_secondary_emails = Some(map.next_value()?);
501                }
502                _ => {
503                    // unknown field allowed and ignored
504                    map.next_value::<::serde_json::Value>()?;
505                }
506            }
507        }
508        if optional && nothing {
509            return Ok(None);
510        }
511        let result = AddSecondaryEmailsArg {
512            new_secondary_emails: field_new_secondary_emails.ok_or_else(|| ::serde::de::Error::missing_field("new_secondary_emails"))?,
513        };
514        Ok(Some(result))
515    }
516
517    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
518        &self,
519        s: &mut S::SerializeStruct,
520    ) -> Result<(), S::Error> {
521        use serde::ser::SerializeStruct;
522        s.serialize_field("new_secondary_emails", &self.new_secondary_emails)?;
523        Ok(())
524    }
525}
526
527impl<'de> ::serde::de::Deserialize<'de> for AddSecondaryEmailsArg {
528    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
529        // struct deserializer
530        use serde::de::{MapAccess, Visitor};
531        struct StructVisitor;
532        impl<'de> Visitor<'de> for StructVisitor {
533            type Value = AddSecondaryEmailsArg;
534            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
535                f.write_str("a AddSecondaryEmailsArg struct")
536            }
537            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
538                AddSecondaryEmailsArg::internal_deserialize(map)
539            }
540        }
541        deserializer.deserialize_struct("AddSecondaryEmailsArg", ADD_SECONDARY_EMAILS_ARG_FIELDS, StructVisitor)
542    }
543}
544
545impl ::serde::ser::Serialize for AddSecondaryEmailsArg {
546    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
547        // struct serializer
548        use serde::ser::SerializeStruct;
549        let mut s = serializer.serialize_struct("AddSecondaryEmailsArg", 1)?;
550        self.internal_serialize::<S>(&mut s)?;
551        s.end()
552    }
553}
554
555/// Error returned when adding secondary emails fails.
556#[derive(Debug, Clone, PartialEq, Eq)]
557#[non_exhaustive] // variants may be added in the future
558pub enum AddSecondaryEmailsError {
559    /// Secondary emails are disabled for the team.
560    SecondaryEmailsDisabled,
561    /// A maximum of 20 secondary emails can be added in a single call.
562    TooManyEmails,
563    /// Catch-all used for unrecognized values returned from the server. Encountering this value
564    /// typically indicates that this SDK version is out of date.
565    Other,
566}
567
568impl<'de> ::serde::de::Deserialize<'de> for AddSecondaryEmailsError {
569    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
570        // union deserializer
571        use serde::de::{self, MapAccess, Visitor};
572        struct EnumVisitor;
573        impl<'de> Visitor<'de> for EnumVisitor {
574            type Value = AddSecondaryEmailsError;
575            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
576                f.write_str("a AddSecondaryEmailsError structure")
577            }
578            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
579                let tag: &str = match map.next_key()? {
580                    Some(".tag") => map.next_value()?,
581                    _ => return Err(de::Error::missing_field(".tag"))
582                };
583                let value = match tag {
584                    "secondary_emails_disabled" => AddSecondaryEmailsError::SecondaryEmailsDisabled,
585                    "too_many_emails" => AddSecondaryEmailsError::TooManyEmails,
586                    _ => AddSecondaryEmailsError::Other,
587                };
588                crate::eat_json_fields(&mut map)?;
589                Ok(value)
590            }
591        }
592        const VARIANTS: &[&str] = &["secondary_emails_disabled",
593                                    "too_many_emails",
594                                    "other"];
595        deserializer.deserialize_struct("AddSecondaryEmailsError", VARIANTS, EnumVisitor)
596    }
597}
598
599impl ::serde::ser::Serialize for AddSecondaryEmailsError {
600    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
601        // union serializer
602        use serde::ser::SerializeStruct;
603        match self {
604            AddSecondaryEmailsError::SecondaryEmailsDisabled => {
605                // unit
606                let mut s = serializer.serialize_struct("AddSecondaryEmailsError", 1)?;
607                s.serialize_field(".tag", "secondary_emails_disabled")?;
608                s.end()
609            }
610            AddSecondaryEmailsError::TooManyEmails => {
611                // unit
612                let mut s = serializer.serialize_struct("AddSecondaryEmailsError", 1)?;
613                s.serialize_field(".tag", "too_many_emails")?;
614                s.end()
615            }
616            AddSecondaryEmailsError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
617        }
618    }
619}
620
621impl ::std::error::Error for AddSecondaryEmailsError {
622}
623
624impl ::std::fmt::Display for AddSecondaryEmailsError {
625    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
626        match self {
627            AddSecondaryEmailsError::SecondaryEmailsDisabled => f.write_str("Secondary emails are disabled for the team."),
628            AddSecondaryEmailsError::TooManyEmails => f.write_str("A maximum of 20 secondary emails can be added in a single call."),
629            _ => write!(f, "{:?}", *self),
630        }
631    }
632}
633
634#[derive(Debug, Clone, PartialEq, Eq)]
635#[non_exhaustive] // structs may have more fields added in the future.
636pub struct AddSecondaryEmailsResult {
637    /// List of users and secondary email results.
638    pub results: Vec<UserAddResult>,
639}
640
641impl AddSecondaryEmailsResult {
642    pub fn new(results: Vec<UserAddResult>) -> Self {
643        AddSecondaryEmailsResult {
644            results,
645        }
646    }
647}
648
649const ADD_SECONDARY_EMAILS_RESULT_FIELDS: &[&str] = &["results"];
650impl AddSecondaryEmailsResult {
651    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
652        map: V,
653    ) -> Result<AddSecondaryEmailsResult, V::Error> {
654        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
655    }
656
657    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
658        mut map: V,
659        optional: bool,
660    ) -> Result<Option<AddSecondaryEmailsResult>, V::Error> {
661        let mut field_results = None;
662        let mut nothing = true;
663        while let Some(key) = map.next_key::<&str>()? {
664            nothing = false;
665            match key {
666                "results" => {
667                    if field_results.is_some() {
668                        return Err(::serde::de::Error::duplicate_field("results"));
669                    }
670                    field_results = Some(map.next_value()?);
671                }
672                _ => {
673                    // unknown field allowed and ignored
674                    map.next_value::<::serde_json::Value>()?;
675                }
676            }
677        }
678        if optional && nothing {
679            return Ok(None);
680        }
681        let result = AddSecondaryEmailsResult {
682            results: field_results.ok_or_else(|| ::serde::de::Error::missing_field("results"))?,
683        };
684        Ok(Some(result))
685    }
686
687    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
688        &self,
689        s: &mut S::SerializeStruct,
690    ) -> Result<(), S::Error> {
691        use serde::ser::SerializeStruct;
692        s.serialize_field("results", &self.results)?;
693        Ok(())
694    }
695}
696
697impl<'de> ::serde::de::Deserialize<'de> for AddSecondaryEmailsResult {
698    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
699        // struct deserializer
700        use serde::de::{MapAccess, Visitor};
701        struct StructVisitor;
702        impl<'de> Visitor<'de> for StructVisitor {
703            type Value = AddSecondaryEmailsResult;
704            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
705                f.write_str("a AddSecondaryEmailsResult struct")
706            }
707            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
708                AddSecondaryEmailsResult::internal_deserialize(map)
709            }
710        }
711        deserializer.deserialize_struct("AddSecondaryEmailsResult", ADD_SECONDARY_EMAILS_RESULT_FIELDS, StructVisitor)
712    }
713}
714
715impl ::serde::ser::Serialize for AddSecondaryEmailsResult {
716    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
717        // struct serializer
718        use serde::ser::SerializeStruct;
719        let mut s = serializer.serialize_struct("AddSecondaryEmailsResult", 1)?;
720        self.internal_serialize::<S>(&mut s)?;
721        s.end()
722    }
723}
724
725/// Describes which team-related admin permissions a user has.
726#[derive(Debug, Clone, PartialEq, Eq)]
727pub enum AdminTier {
728    /// User is an administrator of the team - has all permissions.
729    TeamAdmin,
730    /// User can do most user provisioning, de-provisioning and management.
731    UserManagementAdmin,
732    /// User can do a limited set of common support tasks for existing users. Note: Dropbox is
733    /// adding new types of admin roles; these may display as support_admin.
734    SupportAdmin,
735    /// User is not an admin of the team.
736    MemberOnly,
737}
738
739impl<'de> ::serde::de::Deserialize<'de> for AdminTier {
740    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
741        // union deserializer
742        use serde::de::{self, MapAccess, Visitor};
743        struct EnumVisitor;
744        impl<'de> Visitor<'de> for EnumVisitor {
745            type Value = AdminTier;
746            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
747                f.write_str("a AdminTier structure")
748            }
749            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
750                let tag: &str = match map.next_key()? {
751                    Some(".tag") => map.next_value()?,
752                    _ => return Err(de::Error::missing_field(".tag"))
753                };
754                let value = match tag {
755                    "team_admin" => AdminTier::TeamAdmin,
756                    "user_management_admin" => AdminTier::UserManagementAdmin,
757                    "support_admin" => AdminTier::SupportAdmin,
758                    "member_only" => AdminTier::MemberOnly,
759                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
760                };
761                crate::eat_json_fields(&mut map)?;
762                Ok(value)
763            }
764        }
765        const VARIANTS: &[&str] = &["team_admin",
766                                    "user_management_admin",
767                                    "support_admin",
768                                    "member_only"];
769        deserializer.deserialize_struct("AdminTier", VARIANTS, EnumVisitor)
770    }
771}
772
773impl ::serde::ser::Serialize for AdminTier {
774    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
775        // union serializer
776        use serde::ser::SerializeStruct;
777        match self {
778            AdminTier::TeamAdmin => {
779                // unit
780                let mut s = serializer.serialize_struct("AdminTier", 1)?;
781                s.serialize_field(".tag", "team_admin")?;
782                s.end()
783            }
784            AdminTier::UserManagementAdmin => {
785                // unit
786                let mut s = serializer.serialize_struct("AdminTier", 1)?;
787                s.serialize_field(".tag", "user_management_admin")?;
788                s.end()
789            }
790            AdminTier::SupportAdmin => {
791                // unit
792                let mut s = serializer.serialize_struct("AdminTier", 1)?;
793                s.serialize_field(".tag", "support_admin")?;
794                s.end()
795            }
796            AdminTier::MemberOnly => {
797                // unit
798                let mut s = serializer.serialize_struct("AdminTier", 1)?;
799                s.serialize_field(".tag", "member_only")?;
800                s.end()
801            }
802        }
803    }
804}
805
806/// Information on linked third party applications.
807#[derive(Debug, Clone, PartialEq, Eq)]
808#[non_exhaustive] // structs may have more fields added in the future.
809pub struct ApiApp {
810    /// The application unique id.
811    pub app_id: String,
812    /// The application name.
813    pub app_name: String,
814    /// Whether the linked application uses a dedicated folder.
815    pub is_app_folder: bool,
816    /// The application publisher name.
817    pub publisher: Option<String>,
818    /// The publisher's URL.
819    pub publisher_url: Option<String>,
820    /// The time this application was linked.
821    pub linked: Option<crate::types::common::DropboxTimestamp>,
822}
823
824impl ApiApp {
825    pub fn new(app_id: String, app_name: String, is_app_folder: bool) -> Self {
826        ApiApp {
827            app_id,
828            app_name,
829            is_app_folder,
830            publisher: None,
831            publisher_url: None,
832            linked: None,
833        }
834    }
835
836    pub fn with_publisher(mut self, value: String) -> Self {
837        self.publisher = Some(value);
838        self
839    }
840
841    pub fn with_publisher_url(mut self, value: String) -> Self {
842        self.publisher_url = Some(value);
843        self
844    }
845
846    pub fn with_linked(mut self, value: crate::types::common::DropboxTimestamp) -> Self {
847        self.linked = Some(value);
848        self
849    }
850}
851
852const API_APP_FIELDS: &[&str] = &["app_id",
853                                  "app_name",
854                                  "is_app_folder",
855                                  "publisher",
856                                  "publisher_url",
857                                  "linked"];
858impl ApiApp {
859    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
860        map: V,
861    ) -> Result<ApiApp, V::Error> {
862        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
863    }
864
865    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
866        mut map: V,
867        optional: bool,
868    ) -> Result<Option<ApiApp>, V::Error> {
869        let mut field_app_id = None;
870        let mut field_app_name = None;
871        let mut field_is_app_folder = None;
872        let mut field_publisher = None;
873        let mut field_publisher_url = None;
874        let mut field_linked = None;
875        let mut nothing = true;
876        while let Some(key) = map.next_key::<&str>()? {
877            nothing = false;
878            match key {
879                "app_id" => {
880                    if field_app_id.is_some() {
881                        return Err(::serde::de::Error::duplicate_field("app_id"));
882                    }
883                    field_app_id = Some(map.next_value()?);
884                }
885                "app_name" => {
886                    if field_app_name.is_some() {
887                        return Err(::serde::de::Error::duplicate_field("app_name"));
888                    }
889                    field_app_name = Some(map.next_value()?);
890                }
891                "is_app_folder" => {
892                    if field_is_app_folder.is_some() {
893                        return Err(::serde::de::Error::duplicate_field("is_app_folder"));
894                    }
895                    field_is_app_folder = Some(map.next_value()?);
896                }
897                "publisher" => {
898                    if field_publisher.is_some() {
899                        return Err(::serde::de::Error::duplicate_field("publisher"));
900                    }
901                    field_publisher = Some(map.next_value()?);
902                }
903                "publisher_url" => {
904                    if field_publisher_url.is_some() {
905                        return Err(::serde::de::Error::duplicate_field("publisher_url"));
906                    }
907                    field_publisher_url = Some(map.next_value()?);
908                }
909                "linked" => {
910                    if field_linked.is_some() {
911                        return Err(::serde::de::Error::duplicate_field("linked"));
912                    }
913                    field_linked = Some(map.next_value()?);
914                }
915                _ => {
916                    // unknown field allowed and ignored
917                    map.next_value::<::serde_json::Value>()?;
918                }
919            }
920        }
921        if optional && nothing {
922            return Ok(None);
923        }
924        let result = ApiApp {
925            app_id: field_app_id.ok_or_else(|| ::serde::de::Error::missing_field("app_id"))?,
926            app_name: field_app_name.ok_or_else(|| ::serde::de::Error::missing_field("app_name"))?,
927            is_app_folder: field_is_app_folder.ok_or_else(|| ::serde::de::Error::missing_field("is_app_folder"))?,
928            publisher: field_publisher.and_then(Option::flatten),
929            publisher_url: field_publisher_url.and_then(Option::flatten),
930            linked: field_linked.and_then(Option::flatten),
931        };
932        Ok(Some(result))
933    }
934
935    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
936        &self,
937        s: &mut S::SerializeStruct,
938    ) -> Result<(), S::Error> {
939        use serde::ser::SerializeStruct;
940        s.serialize_field("app_id", &self.app_id)?;
941        s.serialize_field("app_name", &self.app_name)?;
942        s.serialize_field("is_app_folder", &self.is_app_folder)?;
943        if let Some(val) = &self.publisher {
944            s.serialize_field("publisher", val)?;
945        }
946        if let Some(val) = &self.publisher_url {
947            s.serialize_field("publisher_url", val)?;
948        }
949        if let Some(val) = &self.linked {
950            s.serialize_field("linked", val)?;
951        }
952        Ok(())
953    }
954}
955
956impl<'de> ::serde::de::Deserialize<'de> for ApiApp {
957    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
958        // struct deserializer
959        use serde::de::{MapAccess, Visitor};
960        struct StructVisitor;
961        impl<'de> Visitor<'de> for StructVisitor {
962            type Value = ApiApp;
963            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
964                f.write_str("a ApiApp struct")
965            }
966            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
967                ApiApp::internal_deserialize(map)
968            }
969        }
970        deserializer.deserialize_struct("ApiApp", API_APP_FIELDS, StructVisitor)
971    }
972}
973
974impl ::serde::ser::Serialize for ApiApp {
975    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
976        // struct serializer
977        use serde::ser::SerializeStruct;
978        let mut s = serializer.serialize_struct("ApiApp", 6)?;
979        self.internal_serialize::<S>(&mut s)?;
980        s.end()
981    }
982}
983
984/// Base report structure.
985#[derive(Debug, Clone, PartialEq, Eq)]
986#[non_exhaustive] // structs may have more fields added in the future.
987pub struct BaseDfbReport {
988    /// First date present in the results as 'YYYY-MM-DD' or None.
989    pub start_date: String,
990}
991
992impl BaseDfbReport {
993    pub fn new(start_date: String) -> Self {
994        BaseDfbReport {
995            start_date,
996        }
997    }
998}
999
1000const BASE_DFB_REPORT_FIELDS: &[&str] = &["start_date"];
1001impl BaseDfbReport {
1002    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
1003        map: V,
1004    ) -> Result<BaseDfbReport, V::Error> {
1005        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
1006    }
1007
1008    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
1009        mut map: V,
1010        optional: bool,
1011    ) -> Result<Option<BaseDfbReport>, V::Error> {
1012        let mut field_start_date = None;
1013        let mut nothing = true;
1014        while let Some(key) = map.next_key::<&str>()? {
1015            nothing = false;
1016            match key {
1017                "start_date" => {
1018                    if field_start_date.is_some() {
1019                        return Err(::serde::de::Error::duplicate_field("start_date"));
1020                    }
1021                    field_start_date = Some(map.next_value()?);
1022                }
1023                _ => {
1024                    // unknown field allowed and ignored
1025                    map.next_value::<::serde_json::Value>()?;
1026                }
1027            }
1028        }
1029        if optional && nothing {
1030            return Ok(None);
1031        }
1032        let result = BaseDfbReport {
1033            start_date: field_start_date.ok_or_else(|| ::serde::de::Error::missing_field("start_date"))?,
1034        };
1035        Ok(Some(result))
1036    }
1037
1038    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
1039        &self,
1040        s: &mut S::SerializeStruct,
1041    ) -> Result<(), S::Error> {
1042        use serde::ser::SerializeStruct;
1043        s.serialize_field("start_date", &self.start_date)?;
1044        Ok(())
1045    }
1046}
1047
1048impl<'de> ::serde::de::Deserialize<'de> for BaseDfbReport {
1049    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1050        // struct deserializer
1051        use serde::de::{MapAccess, Visitor};
1052        struct StructVisitor;
1053        impl<'de> Visitor<'de> for StructVisitor {
1054            type Value = BaseDfbReport;
1055            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
1056                f.write_str("a BaseDfbReport struct")
1057            }
1058            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
1059                BaseDfbReport::internal_deserialize(map)
1060            }
1061        }
1062        deserializer.deserialize_struct("BaseDfbReport", BASE_DFB_REPORT_FIELDS, StructVisitor)
1063    }
1064}
1065
1066impl ::serde::ser::Serialize for BaseDfbReport {
1067    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
1068        // struct serializer
1069        use serde::ser::SerializeStruct;
1070        let mut s = serializer.serialize_struct("BaseDfbReport", 1)?;
1071        self.internal_serialize::<S>(&mut s)?;
1072        s.end()
1073    }
1074}
1075
1076/// Base error that all errors for existing team folders should extend.
1077#[derive(Debug, Clone, PartialEq, Eq)]
1078#[non_exhaustive] // variants may be added in the future
1079pub enum BaseTeamFolderError {
1080    AccessError(TeamFolderAccessError),
1081    StatusError(TeamFolderInvalidStatusError),
1082    TeamSharedDropboxError(TeamFolderTeamSharedDropboxError),
1083    /// Catch-all used for unrecognized values returned from the server. Encountering this value
1084    /// typically indicates that this SDK version is out of date.
1085    Other,
1086}
1087
1088impl<'de> ::serde::de::Deserialize<'de> for BaseTeamFolderError {
1089    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1090        // union deserializer
1091        use serde::de::{self, MapAccess, Visitor};
1092        struct EnumVisitor;
1093        impl<'de> Visitor<'de> for EnumVisitor {
1094            type Value = BaseTeamFolderError;
1095            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
1096                f.write_str("a BaseTeamFolderError structure")
1097            }
1098            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
1099                let tag: &str = match map.next_key()? {
1100                    Some(".tag") => map.next_value()?,
1101                    _ => return Err(de::Error::missing_field(".tag"))
1102                };
1103                let value = match tag {
1104                    "access_error" => {
1105                        match map.next_key()? {
1106                            Some("access_error") => BaseTeamFolderError::AccessError(map.next_value()?),
1107                            None => return Err(de::Error::missing_field("access_error")),
1108                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
1109                        }
1110                    }
1111                    "status_error" => {
1112                        match map.next_key()? {
1113                            Some("status_error") => BaseTeamFolderError::StatusError(map.next_value()?),
1114                            None => return Err(de::Error::missing_field("status_error")),
1115                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
1116                        }
1117                    }
1118                    "team_shared_dropbox_error" => {
1119                        match map.next_key()? {
1120                            Some("team_shared_dropbox_error") => BaseTeamFolderError::TeamSharedDropboxError(map.next_value()?),
1121                            None => return Err(de::Error::missing_field("team_shared_dropbox_error")),
1122                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
1123                        }
1124                    }
1125                    _ => BaseTeamFolderError::Other,
1126                };
1127                crate::eat_json_fields(&mut map)?;
1128                Ok(value)
1129            }
1130        }
1131        const VARIANTS: &[&str] = &["access_error",
1132                                    "status_error",
1133                                    "team_shared_dropbox_error",
1134                                    "other"];
1135        deserializer.deserialize_struct("BaseTeamFolderError", VARIANTS, EnumVisitor)
1136    }
1137}
1138
1139impl ::serde::ser::Serialize for BaseTeamFolderError {
1140    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
1141        // union serializer
1142        use serde::ser::SerializeStruct;
1143        match self {
1144            BaseTeamFolderError::AccessError(x) => {
1145                // union or polymporphic struct
1146                let mut s = serializer.serialize_struct("BaseTeamFolderError", 2)?;
1147                s.serialize_field(".tag", "access_error")?;
1148                s.serialize_field("access_error", x)?;
1149                s.end()
1150            }
1151            BaseTeamFolderError::StatusError(x) => {
1152                // union or polymporphic struct
1153                let mut s = serializer.serialize_struct("BaseTeamFolderError", 2)?;
1154                s.serialize_field(".tag", "status_error")?;
1155                s.serialize_field("status_error", x)?;
1156                s.end()
1157            }
1158            BaseTeamFolderError::TeamSharedDropboxError(x) => {
1159                // union or polymporphic struct
1160                let mut s = serializer.serialize_struct("BaseTeamFolderError", 2)?;
1161                s.serialize_field(".tag", "team_shared_dropbox_error")?;
1162                s.serialize_field("team_shared_dropbox_error", x)?;
1163                s.end()
1164            }
1165            BaseTeamFolderError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
1166        }
1167    }
1168}
1169
1170impl ::std::error::Error for BaseTeamFolderError {
1171    fn source(&self) -> Option<&(dyn ::std::error::Error + 'static)> {
1172        match self {
1173            BaseTeamFolderError::AccessError(inner) => Some(inner),
1174            BaseTeamFolderError::StatusError(inner) => Some(inner),
1175            BaseTeamFolderError::TeamSharedDropboxError(inner) => Some(inner),
1176            _ => None,
1177        }
1178    }
1179}
1180
1181impl ::std::fmt::Display for BaseTeamFolderError {
1182    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
1183        match self {
1184            BaseTeamFolderError::AccessError(inner) => write!(f, "BaseTeamFolderError: {}", inner),
1185            BaseTeamFolderError::StatusError(inner) => write!(f, "BaseTeamFolderError: {}", inner),
1186            BaseTeamFolderError::TeamSharedDropboxError(inner) => write!(f, "BaseTeamFolderError: {}", inner),
1187            _ => write!(f, "{:?}", *self),
1188        }
1189    }
1190}
1191
1192/// Error returned when getting member custom quota.
1193#[derive(Debug, Clone, PartialEq, Eq)]
1194#[non_exhaustive] // variants may be added in the future
1195pub enum CustomQuotaError {
1196    /// A maximum of 1000 users can be set for a single call.
1197    TooManyUsers,
1198    /// Catch-all used for unrecognized values returned from the server. Encountering this value
1199    /// typically indicates that this SDK version is out of date.
1200    Other,
1201}
1202
1203impl<'de> ::serde::de::Deserialize<'de> for CustomQuotaError {
1204    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1205        // union deserializer
1206        use serde::de::{self, MapAccess, Visitor};
1207        struct EnumVisitor;
1208        impl<'de> Visitor<'de> for EnumVisitor {
1209            type Value = CustomQuotaError;
1210            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
1211                f.write_str("a CustomQuotaError structure")
1212            }
1213            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
1214                let tag: &str = match map.next_key()? {
1215                    Some(".tag") => map.next_value()?,
1216                    _ => return Err(de::Error::missing_field(".tag"))
1217                };
1218                let value = match tag {
1219                    "too_many_users" => CustomQuotaError::TooManyUsers,
1220                    _ => CustomQuotaError::Other,
1221                };
1222                crate::eat_json_fields(&mut map)?;
1223                Ok(value)
1224            }
1225        }
1226        const VARIANTS: &[&str] = &["too_many_users",
1227                                    "other"];
1228        deserializer.deserialize_struct("CustomQuotaError", VARIANTS, EnumVisitor)
1229    }
1230}
1231
1232impl ::serde::ser::Serialize for CustomQuotaError {
1233    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
1234        // union serializer
1235        use serde::ser::SerializeStruct;
1236        match self {
1237            CustomQuotaError::TooManyUsers => {
1238                // unit
1239                let mut s = serializer.serialize_struct("CustomQuotaError", 1)?;
1240                s.serialize_field(".tag", "too_many_users")?;
1241                s.end()
1242            }
1243            CustomQuotaError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
1244        }
1245    }
1246}
1247
1248impl ::std::error::Error for CustomQuotaError {
1249}
1250
1251impl ::std::fmt::Display for CustomQuotaError {
1252    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
1253        match self {
1254            CustomQuotaError::TooManyUsers => f.write_str("A maximum of 1000 users can be set for a single call."),
1255            _ => write!(f, "{:?}", *self),
1256        }
1257    }
1258}
1259
1260/// User custom quota.
1261#[derive(Debug, Clone, PartialEq, Eq)]
1262#[non_exhaustive] // variants may be added in the future
1263pub enum CustomQuotaResult {
1264    /// User's custom quota.
1265    Success(UserCustomQuotaResult),
1266    /// Invalid user (not in team).
1267    InvalidUser(UserSelectorArg),
1268    /// Catch-all used for unrecognized values returned from the server. Encountering this value
1269    /// typically indicates that this SDK version is out of date.
1270    Other,
1271}
1272
1273impl<'de> ::serde::de::Deserialize<'de> for CustomQuotaResult {
1274    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1275        // union deserializer
1276        use serde::de::{self, MapAccess, Visitor};
1277        struct EnumVisitor;
1278        impl<'de> Visitor<'de> for EnumVisitor {
1279            type Value = CustomQuotaResult;
1280            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
1281                f.write_str("a CustomQuotaResult structure")
1282            }
1283            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
1284                let tag: &str = match map.next_key()? {
1285                    Some(".tag") => map.next_value()?,
1286                    _ => return Err(de::Error::missing_field(".tag"))
1287                };
1288                let value = match tag {
1289                    "success" => CustomQuotaResult::Success(UserCustomQuotaResult::internal_deserialize(&mut map)?),
1290                    "invalid_user" => {
1291                        match map.next_key()? {
1292                            Some("invalid_user") => CustomQuotaResult::InvalidUser(map.next_value()?),
1293                            None => return Err(de::Error::missing_field("invalid_user")),
1294                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
1295                        }
1296                    }
1297                    _ => CustomQuotaResult::Other,
1298                };
1299                crate::eat_json_fields(&mut map)?;
1300                Ok(value)
1301            }
1302        }
1303        const VARIANTS: &[&str] = &["success",
1304                                    "invalid_user",
1305                                    "other"];
1306        deserializer.deserialize_struct("CustomQuotaResult", VARIANTS, EnumVisitor)
1307    }
1308}
1309
1310impl ::serde::ser::Serialize for CustomQuotaResult {
1311    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
1312        // union serializer
1313        use serde::ser::SerializeStruct;
1314        match self {
1315            CustomQuotaResult::Success(x) => {
1316                // struct
1317                let mut s = serializer.serialize_struct("CustomQuotaResult", 3)?;
1318                s.serialize_field(".tag", "success")?;
1319                x.internal_serialize::<S>(&mut s)?;
1320                s.end()
1321            }
1322            CustomQuotaResult::InvalidUser(x) => {
1323                // union or polymporphic struct
1324                let mut s = serializer.serialize_struct("CustomQuotaResult", 2)?;
1325                s.serialize_field(".tag", "invalid_user")?;
1326                s.serialize_field("invalid_user", x)?;
1327                s.end()
1328            }
1329            CustomQuotaResult::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
1330        }
1331    }
1332}
1333
1334#[derive(Debug, Clone, PartialEq, Eq)]
1335#[non_exhaustive] // structs may have more fields added in the future.
1336pub struct CustomQuotaUsersArg {
1337    /// List of users.
1338    pub users: Vec<UserSelectorArg>,
1339}
1340
1341impl CustomQuotaUsersArg {
1342    pub fn new(users: Vec<UserSelectorArg>) -> Self {
1343        CustomQuotaUsersArg {
1344            users,
1345        }
1346    }
1347}
1348
1349const CUSTOM_QUOTA_USERS_ARG_FIELDS: &[&str] = &["users"];
1350impl CustomQuotaUsersArg {
1351    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
1352        map: V,
1353    ) -> Result<CustomQuotaUsersArg, V::Error> {
1354        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
1355    }
1356
1357    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
1358        mut map: V,
1359        optional: bool,
1360    ) -> Result<Option<CustomQuotaUsersArg>, V::Error> {
1361        let mut field_users = None;
1362        let mut nothing = true;
1363        while let Some(key) = map.next_key::<&str>()? {
1364            nothing = false;
1365            match key {
1366                "users" => {
1367                    if field_users.is_some() {
1368                        return Err(::serde::de::Error::duplicate_field("users"));
1369                    }
1370                    field_users = Some(map.next_value()?);
1371                }
1372                _ => {
1373                    // unknown field allowed and ignored
1374                    map.next_value::<::serde_json::Value>()?;
1375                }
1376            }
1377        }
1378        if optional && nothing {
1379            return Ok(None);
1380        }
1381        let result = CustomQuotaUsersArg {
1382            users: field_users.ok_or_else(|| ::serde::de::Error::missing_field("users"))?,
1383        };
1384        Ok(Some(result))
1385    }
1386
1387    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
1388        &self,
1389        s: &mut S::SerializeStruct,
1390    ) -> Result<(), S::Error> {
1391        use serde::ser::SerializeStruct;
1392        s.serialize_field("users", &self.users)?;
1393        Ok(())
1394    }
1395}
1396
1397impl<'de> ::serde::de::Deserialize<'de> for CustomQuotaUsersArg {
1398    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1399        // struct deserializer
1400        use serde::de::{MapAccess, Visitor};
1401        struct StructVisitor;
1402        impl<'de> Visitor<'de> for StructVisitor {
1403            type Value = CustomQuotaUsersArg;
1404            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
1405                f.write_str("a CustomQuotaUsersArg struct")
1406            }
1407            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
1408                CustomQuotaUsersArg::internal_deserialize(map)
1409            }
1410        }
1411        deserializer.deserialize_struct("CustomQuotaUsersArg", CUSTOM_QUOTA_USERS_ARG_FIELDS, StructVisitor)
1412    }
1413}
1414
1415impl ::serde::ser::Serialize for CustomQuotaUsersArg {
1416    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
1417        // struct serializer
1418        use serde::ser::SerializeStruct;
1419        let mut s = serializer.serialize_struct("CustomQuotaUsersArg", 1)?;
1420        self.internal_serialize::<S>(&mut s)?;
1421        s.end()
1422    }
1423}
1424
1425/// Input arguments that can be provided for most reports.
1426#[derive(Debug, Clone, PartialEq, Eq, Default)]
1427#[non_exhaustive] // structs may have more fields added in the future.
1428pub struct DateRange {
1429    /// Optional starting date (inclusive). If start_date is None or too long ago, this field will
1430    /// be set to 6 months ago.
1431    pub start_date: Option<crate::types::common::Date>,
1432    /// Optional ending date (exclusive).
1433    pub end_date: Option<crate::types::common::Date>,
1434}
1435
1436impl DateRange {
1437    pub fn with_start_date(mut self, value: crate::types::common::Date) -> Self {
1438        self.start_date = Some(value);
1439        self
1440    }
1441
1442    pub fn with_end_date(mut self, value: crate::types::common::Date) -> Self {
1443        self.end_date = Some(value);
1444        self
1445    }
1446}
1447
1448const DATE_RANGE_FIELDS: &[&str] = &["start_date",
1449                                     "end_date"];
1450impl DateRange {
1451    // no _opt deserializer
1452    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
1453        mut map: V,
1454    ) -> Result<DateRange, V::Error> {
1455        let mut field_start_date = None;
1456        let mut field_end_date = None;
1457        while let Some(key) = map.next_key::<&str>()? {
1458            match key {
1459                "start_date" => {
1460                    if field_start_date.is_some() {
1461                        return Err(::serde::de::Error::duplicate_field("start_date"));
1462                    }
1463                    field_start_date = Some(map.next_value()?);
1464                }
1465                "end_date" => {
1466                    if field_end_date.is_some() {
1467                        return Err(::serde::de::Error::duplicate_field("end_date"));
1468                    }
1469                    field_end_date = Some(map.next_value()?);
1470                }
1471                _ => {
1472                    // unknown field allowed and ignored
1473                    map.next_value::<::serde_json::Value>()?;
1474                }
1475            }
1476        }
1477        let result = DateRange {
1478            start_date: field_start_date.and_then(Option::flatten),
1479            end_date: field_end_date.and_then(Option::flatten),
1480        };
1481        Ok(result)
1482    }
1483
1484    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
1485        &self,
1486        s: &mut S::SerializeStruct,
1487    ) -> Result<(), S::Error> {
1488        use serde::ser::SerializeStruct;
1489        if let Some(val) = &self.start_date {
1490            s.serialize_field("start_date", val)?;
1491        }
1492        if let Some(val) = &self.end_date {
1493            s.serialize_field("end_date", val)?;
1494        }
1495        Ok(())
1496    }
1497}
1498
1499impl<'de> ::serde::de::Deserialize<'de> for DateRange {
1500    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1501        // struct deserializer
1502        use serde::de::{MapAccess, Visitor};
1503        struct StructVisitor;
1504        impl<'de> Visitor<'de> for StructVisitor {
1505            type Value = DateRange;
1506            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
1507                f.write_str("a DateRange struct")
1508            }
1509            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
1510                DateRange::internal_deserialize(map)
1511            }
1512        }
1513        deserializer.deserialize_struct("DateRange", DATE_RANGE_FIELDS, StructVisitor)
1514    }
1515}
1516
1517impl ::serde::ser::Serialize for DateRange {
1518    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
1519        // struct serializer
1520        use serde::ser::SerializeStruct;
1521        let mut s = serializer.serialize_struct("DateRange", 2)?;
1522        self.internal_serialize::<S>(&mut s)?;
1523        s.end()
1524    }
1525}
1526
1527/// Errors that can originate from problems in input arguments to reports.
1528#[derive(Debug, Clone, PartialEq, Eq)]
1529#[non_exhaustive] // variants may be added in the future
1530pub enum DateRangeError {
1531    /// Catch-all used for unrecognized values returned from the server. Encountering this value
1532    /// typically indicates that this SDK version is out of date.
1533    Other,
1534}
1535
1536impl<'de> ::serde::de::Deserialize<'de> for DateRangeError {
1537    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1538        // union deserializer
1539        use serde::de::{self, MapAccess, Visitor};
1540        struct EnumVisitor;
1541        impl<'de> Visitor<'de> for EnumVisitor {
1542            type Value = DateRangeError;
1543            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
1544                f.write_str("a DateRangeError structure")
1545            }
1546            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
1547                let tag: &str = match map.next_key()? {
1548                    Some(".tag") => map.next_value()?,
1549                    _ => return Err(de::Error::missing_field(".tag"))
1550                };
1551                // open enum with no defined variants
1552                let _ = tag;
1553                crate::eat_json_fields(&mut map)?;
1554                Ok(DateRangeError::Other)
1555            }
1556        }
1557        const VARIANTS: &[&str] = &["other"];
1558        deserializer.deserialize_struct("DateRangeError", VARIANTS, EnumVisitor)
1559    }
1560}
1561
1562impl ::serde::ser::Serialize for DateRangeError {
1563    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
1564        // union serializer
1565        #![allow(unused_variables)]
1566        Err(::serde::ser::Error::custom("cannot serialize an open union with no defined variants"))
1567    }
1568}
1569
1570impl ::std::error::Error for DateRangeError {
1571}
1572
1573impl ::std::fmt::Display for DateRangeError {
1574    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
1575        write!(f, "{:?}", *self)
1576    }
1577}
1578
1579/// Result of trying to delete a secondary email address. 'success' is the only value indicating
1580/// that a secondary email was successfully deleted. The other values explain the type of error that
1581/// occurred, and include the email for which the error occurred.
1582#[derive(Debug, Clone, PartialEq, Eq)]
1583#[non_exhaustive] // variants may be added in the future
1584pub enum DeleteSecondaryEmailResult {
1585    /// The secondary email was successfully deleted.
1586    Success(crate::types::common::EmailAddress),
1587    /// The email address was not found for the user.
1588    NotFound(crate::types::common::EmailAddress),
1589    /// The email address is the primary email address of the user, and cannot be removed.
1590    CannotRemovePrimary(crate::types::common::EmailAddress),
1591    /// Catch-all used for unrecognized values returned from the server. Encountering this value
1592    /// typically indicates that this SDK version is out of date.
1593    Other,
1594}
1595
1596impl<'de> ::serde::de::Deserialize<'de> for DeleteSecondaryEmailResult {
1597    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1598        // union deserializer
1599        use serde::de::{self, MapAccess, Visitor};
1600        struct EnumVisitor;
1601        impl<'de> Visitor<'de> for EnumVisitor {
1602            type Value = DeleteSecondaryEmailResult;
1603            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
1604                f.write_str("a DeleteSecondaryEmailResult structure")
1605            }
1606            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
1607                let tag: &str = match map.next_key()? {
1608                    Some(".tag") => map.next_value()?,
1609                    _ => return Err(de::Error::missing_field(".tag"))
1610                };
1611                let value = match tag {
1612                    "success" => {
1613                        match map.next_key()? {
1614                            Some("success") => DeleteSecondaryEmailResult::Success(map.next_value()?),
1615                            None => return Err(de::Error::missing_field("success")),
1616                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
1617                        }
1618                    }
1619                    "not_found" => {
1620                        match map.next_key()? {
1621                            Some("not_found") => DeleteSecondaryEmailResult::NotFound(map.next_value()?),
1622                            None => return Err(de::Error::missing_field("not_found")),
1623                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
1624                        }
1625                    }
1626                    "cannot_remove_primary" => {
1627                        match map.next_key()? {
1628                            Some("cannot_remove_primary") => DeleteSecondaryEmailResult::CannotRemovePrimary(map.next_value()?),
1629                            None => return Err(de::Error::missing_field("cannot_remove_primary")),
1630                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
1631                        }
1632                    }
1633                    _ => DeleteSecondaryEmailResult::Other,
1634                };
1635                crate::eat_json_fields(&mut map)?;
1636                Ok(value)
1637            }
1638        }
1639        const VARIANTS: &[&str] = &["success",
1640                                    "not_found",
1641                                    "cannot_remove_primary",
1642                                    "other"];
1643        deserializer.deserialize_struct("DeleteSecondaryEmailResult", VARIANTS, EnumVisitor)
1644    }
1645}
1646
1647impl ::serde::ser::Serialize for DeleteSecondaryEmailResult {
1648    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
1649        // union serializer
1650        use serde::ser::SerializeStruct;
1651        match self {
1652            DeleteSecondaryEmailResult::Success(x) => {
1653                // primitive
1654                let mut s = serializer.serialize_struct("DeleteSecondaryEmailResult", 2)?;
1655                s.serialize_field(".tag", "success")?;
1656                s.serialize_field("success", x)?;
1657                s.end()
1658            }
1659            DeleteSecondaryEmailResult::NotFound(x) => {
1660                // primitive
1661                let mut s = serializer.serialize_struct("DeleteSecondaryEmailResult", 2)?;
1662                s.serialize_field(".tag", "not_found")?;
1663                s.serialize_field("not_found", x)?;
1664                s.end()
1665            }
1666            DeleteSecondaryEmailResult::CannotRemovePrimary(x) => {
1667                // primitive
1668                let mut s = serializer.serialize_struct("DeleteSecondaryEmailResult", 2)?;
1669                s.serialize_field(".tag", "cannot_remove_primary")?;
1670                s.serialize_field("cannot_remove_primary", x)?;
1671                s.end()
1672            }
1673            DeleteSecondaryEmailResult::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
1674        }
1675    }
1676}
1677
1678#[derive(Debug, Clone, PartialEq, Eq)]
1679#[non_exhaustive] // structs may have more fields added in the future.
1680pub struct DeleteSecondaryEmailsArg {
1681    /// List of users and their secondary emails to delete.
1682    pub emails_to_delete: Vec<UserSecondaryEmailsArg>,
1683}
1684
1685impl DeleteSecondaryEmailsArg {
1686    pub fn new(emails_to_delete: Vec<UserSecondaryEmailsArg>) -> Self {
1687        DeleteSecondaryEmailsArg {
1688            emails_to_delete,
1689        }
1690    }
1691}
1692
1693const DELETE_SECONDARY_EMAILS_ARG_FIELDS: &[&str] = &["emails_to_delete"];
1694impl DeleteSecondaryEmailsArg {
1695    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
1696        map: V,
1697    ) -> Result<DeleteSecondaryEmailsArg, V::Error> {
1698        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
1699    }
1700
1701    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
1702        mut map: V,
1703        optional: bool,
1704    ) -> Result<Option<DeleteSecondaryEmailsArg>, V::Error> {
1705        let mut field_emails_to_delete = None;
1706        let mut nothing = true;
1707        while let Some(key) = map.next_key::<&str>()? {
1708            nothing = false;
1709            match key {
1710                "emails_to_delete" => {
1711                    if field_emails_to_delete.is_some() {
1712                        return Err(::serde::de::Error::duplicate_field("emails_to_delete"));
1713                    }
1714                    field_emails_to_delete = Some(map.next_value()?);
1715                }
1716                _ => {
1717                    // unknown field allowed and ignored
1718                    map.next_value::<::serde_json::Value>()?;
1719                }
1720            }
1721        }
1722        if optional && nothing {
1723            return Ok(None);
1724        }
1725        let result = DeleteSecondaryEmailsArg {
1726            emails_to_delete: field_emails_to_delete.ok_or_else(|| ::serde::de::Error::missing_field("emails_to_delete"))?,
1727        };
1728        Ok(Some(result))
1729    }
1730
1731    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
1732        &self,
1733        s: &mut S::SerializeStruct,
1734    ) -> Result<(), S::Error> {
1735        use serde::ser::SerializeStruct;
1736        s.serialize_field("emails_to_delete", &self.emails_to_delete)?;
1737        Ok(())
1738    }
1739}
1740
1741impl<'de> ::serde::de::Deserialize<'de> for DeleteSecondaryEmailsArg {
1742    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1743        // struct deserializer
1744        use serde::de::{MapAccess, Visitor};
1745        struct StructVisitor;
1746        impl<'de> Visitor<'de> for StructVisitor {
1747            type Value = DeleteSecondaryEmailsArg;
1748            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
1749                f.write_str("a DeleteSecondaryEmailsArg struct")
1750            }
1751            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
1752                DeleteSecondaryEmailsArg::internal_deserialize(map)
1753            }
1754        }
1755        deserializer.deserialize_struct("DeleteSecondaryEmailsArg", DELETE_SECONDARY_EMAILS_ARG_FIELDS, StructVisitor)
1756    }
1757}
1758
1759impl ::serde::ser::Serialize for DeleteSecondaryEmailsArg {
1760    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
1761        // struct serializer
1762        use serde::ser::SerializeStruct;
1763        let mut s = serializer.serialize_struct("DeleteSecondaryEmailsArg", 1)?;
1764        self.internal_serialize::<S>(&mut s)?;
1765        s.end()
1766    }
1767}
1768
1769#[derive(Debug, Clone, PartialEq, Eq)]
1770#[non_exhaustive] // structs may have more fields added in the future.
1771pub struct DeleteSecondaryEmailsResult {
1772    pub results: Vec<UserDeleteResult>,
1773}
1774
1775impl DeleteSecondaryEmailsResult {
1776    pub fn new(results: Vec<UserDeleteResult>) -> Self {
1777        DeleteSecondaryEmailsResult {
1778            results,
1779        }
1780    }
1781}
1782
1783const DELETE_SECONDARY_EMAILS_RESULT_FIELDS: &[&str] = &["results"];
1784impl DeleteSecondaryEmailsResult {
1785    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
1786        map: V,
1787    ) -> Result<DeleteSecondaryEmailsResult, V::Error> {
1788        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
1789    }
1790
1791    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
1792        mut map: V,
1793        optional: bool,
1794    ) -> Result<Option<DeleteSecondaryEmailsResult>, V::Error> {
1795        let mut field_results = None;
1796        let mut nothing = true;
1797        while let Some(key) = map.next_key::<&str>()? {
1798            nothing = false;
1799            match key {
1800                "results" => {
1801                    if field_results.is_some() {
1802                        return Err(::serde::de::Error::duplicate_field("results"));
1803                    }
1804                    field_results = Some(map.next_value()?);
1805                }
1806                _ => {
1807                    // unknown field allowed and ignored
1808                    map.next_value::<::serde_json::Value>()?;
1809                }
1810            }
1811        }
1812        if optional && nothing {
1813            return Ok(None);
1814        }
1815        let result = DeleteSecondaryEmailsResult {
1816            results: field_results.ok_or_else(|| ::serde::de::Error::missing_field("results"))?,
1817        };
1818        Ok(Some(result))
1819    }
1820
1821    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
1822        &self,
1823        s: &mut S::SerializeStruct,
1824    ) -> Result<(), S::Error> {
1825        use serde::ser::SerializeStruct;
1826        s.serialize_field("results", &self.results)?;
1827        Ok(())
1828    }
1829}
1830
1831impl<'de> ::serde::de::Deserialize<'de> for DeleteSecondaryEmailsResult {
1832    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1833        // struct deserializer
1834        use serde::de::{MapAccess, Visitor};
1835        struct StructVisitor;
1836        impl<'de> Visitor<'de> for StructVisitor {
1837            type Value = DeleteSecondaryEmailsResult;
1838            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
1839                f.write_str("a DeleteSecondaryEmailsResult struct")
1840            }
1841            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
1842                DeleteSecondaryEmailsResult::internal_deserialize(map)
1843            }
1844        }
1845        deserializer.deserialize_struct("DeleteSecondaryEmailsResult", DELETE_SECONDARY_EMAILS_RESULT_FIELDS, StructVisitor)
1846    }
1847}
1848
1849impl ::serde::ser::Serialize for DeleteSecondaryEmailsResult {
1850    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
1851        // struct serializer
1852        use serde::ser::SerializeStruct;
1853        let mut s = serializer.serialize_struct("DeleteSecondaryEmailsResult", 1)?;
1854        self.internal_serialize::<S>(&mut s)?;
1855        s.end()
1856    }
1857}
1858
1859/// Information about linked Dropbox desktop client sessions.
1860#[derive(Debug, Clone, PartialEq, Eq)]
1861#[non_exhaustive] // structs may have more fields added in the future.
1862pub struct DesktopClientSession {
1863    /// The session id.
1864    pub session_id: String,
1865    /// Name of the hosting desktop.
1866    pub host_name: String,
1867    /// The Dropbox desktop client type.
1868    pub client_type: DesktopPlatform,
1869    /// The Dropbox client version.
1870    pub client_version: String,
1871    /// Information on the hosting platform.
1872    pub platform: String,
1873    /// Whether it's possible to delete all of the account files upon unlinking.
1874    pub is_delete_on_unlink_supported: bool,
1875    /// The IP address of the last activity from this session.
1876    pub ip_address: Option<String>,
1877    /// The country from which the last activity from this session was made.
1878    pub country: Option<String>,
1879    /// The time this session was created.
1880    pub created: Option<crate::types::common::DropboxTimestamp>,
1881    /// The time of the last activity from this session.
1882    pub updated: Option<crate::types::common::DropboxTimestamp>,
1883}
1884
1885impl DesktopClientSession {
1886    pub fn new(
1887        session_id: String,
1888        host_name: String,
1889        client_type: DesktopPlatform,
1890        client_version: String,
1891        platform: String,
1892        is_delete_on_unlink_supported: bool,
1893    ) -> Self {
1894        DesktopClientSession {
1895            session_id,
1896            host_name,
1897            client_type,
1898            client_version,
1899            platform,
1900            is_delete_on_unlink_supported,
1901            ip_address: None,
1902            country: None,
1903            created: None,
1904            updated: None,
1905        }
1906    }
1907
1908    pub fn with_ip_address(mut self, value: String) -> Self {
1909        self.ip_address = Some(value);
1910        self
1911    }
1912
1913    pub fn with_country(mut self, value: String) -> Self {
1914        self.country = Some(value);
1915        self
1916    }
1917
1918    pub fn with_created(mut self, value: crate::types::common::DropboxTimestamp) -> Self {
1919        self.created = Some(value);
1920        self
1921    }
1922
1923    pub fn with_updated(mut self, value: crate::types::common::DropboxTimestamp) -> Self {
1924        self.updated = Some(value);
1925        self
1926    }
1927}
1928
1929const DESKTOP_CLIENT_SESSION_FIELDS: &[&str] = &["session_id",
1930                                                 "host_name",
1931                                                 "client_type",
1932                                                 "client_version",
1933                                                 "platform",
1934                                                 "is_delete_on_unlink_supported",
1935                                                 "ip_address",
1936                                                 "country",
1937                                                 "created",
1938                                                 "updated"];
1939impl DesktopClientSession {
1940    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
1941        map: V,
1942    ) -> Result<DesktopClientSession, V::Error> {
1943        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
1944    }
1945
1946    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
1947        mut map: V,
1948        optional: bool,
1949    ) -> Result<Option<DesktopClientSession>, V::Error> {
1950        let mut field_session_id = None;
1951        let mut field_host_name = None;
1952        let mut field_client_type = None;
1953        let mut field_client_version = None;
1954        let mut field_platform = None;
1955        let mut field_is_delete_on_unlink_supported = None;
1956        let mut field_ip_address = None;
1957        let mut field_country = None;
1958        let mut field_created = None;
1959        let mut field_updated = None;
1960        let mut nothing = true;
1961        while let Some(key) = map.next_key::<&str>()? {
1962            nothing = false;
1963            match key {
1964                "session_id" => {
1965                    if field_session_id.is_some() {
1966                        return Err(::serde::de::Error::duplicate_field("session_id"));
1967                    }
1968                    field_session_id = Some(map.next_value()?);
1969                }
1970                "host_name" => {
1971                    if field_host_name.is_some() {
1972                        return Err(::serde::de::Error::duplicate_field("host_name"));
1973                    }
1974                    field_host_name = Some(map.next_value()?);
1975                }
1976                "client_type" => {
1977                    if field_client_type.is_some() {
1978                        return Err(::serde::de::Error::duplicate_field("client_type"));
1979                    }
1980                    field_client_type = Some(map.next_value()?);
1981                }
1982                "client_version" => {
1983                    if field_client_version.is_some() {
1984                        return Err(::serde::de::Error::duplicate_field("client_version"));
1985                    }
1986                    field_client_version = Some(map.next_value()?);
1987                }
1988                "platform" => {
1989                    if field_platform.is_some() {
1990                        return Err(::serde::de::Error::duplicate_field("platform"));
1991                    }
1992                    field_platform = Some(map.next_value()?);
1993                }
1994                "is_delete_on_unlink_supported" => {
1995                    if field_is_delete_on_unlink_supported.is_some() {
1996                        return Err(::serde::de::Error::duplicate_field("is_delete_on_unlink_supported"));
1997                    }
1998                    field_is_delete_on_unlink_supported = Some(map.next_value()?);
1999                }
2000                "ip_address" => {
2001                    if field_ip_address.is_some() {
2002                        return Err(::serde::de::Error::duplicate_field("ip_address"));
2003                    }
2004                    field_ip_address = Some(map.next_value()?);
2005                }
2006                "country" => {
2007                    if field_country.is_some() {
2008                        return Err(::serde::de::Error::duplicate_field("country"));
2009                    }
2010                    field_country = Some(map.next_value()?);
2011                }
2012                "created" => {
2013                    if field_created.is_some() {
2014                        return Err(::serde::de::Error::duplicate_field("created"));
2015                    }
2016                    field_created = Some(map.next_value()?);
2017                }
2018                "updated" => {
2019                    if field_updated.is_some() {
2020                        return Err(::serde::de::Error::duplicate_field("updated"));
2021                    }
2022                    field_updated = Some(map.next_value()?);
2023                }
2024                _ => {
2025                    // unknown field allowed and ignored
2026                    map.next_value::<::serde_json::Value>()?;
2027                }
2028            }
2029        }
2030        if optional && nothing {
2031            return Ok(None);
2032        }
2033        let result = DesktopClientSession {
2034            session_id: field_session_id.ok_or_else(|| ::serde::de::Error::missing_field("session_id"))?,
2035            host_name: field_host_name.ok_or_else(|| ::serde::de::Error::missing_field("host_name"))?,
2036            client_type: field_client_type.ok_or_else(|| ::serde::de::Error::missing_field("client_type"))?,
2037            client_version: field_client_version.ok_or_else(|| ::serde::de::Error::missing_field("client_version"))?,
2038            platform: field_platform.ok_or_else(|| ::serde::de::Error::missing_field("platform"))?,
2039            is_delete_on_unlink_supported: field_is_delete_on_unlink_supported.ok_or_else(|| ::serde::de::Error::missing_field("is_delete_on_unlink_supported"))?,
2040            ip_address: field_ip_address.and_then(Option::flatten),
2041            country: field_country.and_then(Option::flatten),
2042            created: field_created.and_then(Option::flatten),
2043            updated: field_updated.and_then(Option::flatten),
2044        };
2045        Ok(Some(result))
2046    }
2047
2048    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
2049        &self,
2050        s: &mut S::SerializeStruct,
2051    ) -> Result<(), S::Error> {
2052        use serde::ser::SerializeStruct;
2053        s.serialize_field("session_id", &self.session_id)?;
2054        s.serialize_field("host_name", &self.host_name)?;
2055        s.serialize_field("client_type", &self.client_type)?;
2056        s.serialize_field("client_version", &self.client_version)?;
2057        s.serialize_field("platform", &self.platform)?;
2058        s.serialize_field("is_delete_on_unlink_supported", &self.is_delete_on_unlink_supported)?;
2059        if let Some(val) = &self.ip_address {
2060            s.serialize_field("ip_address", val)?;
2061        }
2062        if let Some(val) = &self.country {
2063            s.serialize_field("country", val)?;
2064        }
2065        if let Some(val) = &self.created {
2066            s.serialize_field("created", val)?;
2067        }
2068        if let Some(val) = &self.updated {
2069            s.serialize_field("updated", val)?;
2070        }
2071        Ok(())
2072    }
2073}
2074
2075impl<'de> ::serde::de::Deserialize<'de> for DesktopClientSession {
2076    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2077        // struct deserializer
2078        use serde::de::{MapAccess, Visitor};
2079        struct StructVisitor;
2080        impl<'de> Visitor<'de> for StructVisitor {
2081            type Value = DesktopClientSession;
2082            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
2083                f.write_str("a DesktopClientSession struct")
2084            }
2085            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
2086                DesktopClientSession::internal_deserialize(map)
2087            }
2088        }
2089        deserializer.deserialize_struct("DesktopClientSession", DESKTOP_CLIENT_SESSION_FIELDS, StructVisitor)
2090    }
2091}
2092
2093impl ::serde::ser::Serialize for DesktopClientSession {
2094    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
2095        // struct serializer
2096        use serde::ser::SerializeStruct;
2097        let mut s = serializer.serialize_struct("DesktopClientSession", 10)?;
2098        self.internal_serialize::<S>(&mut s)?;
2099        s.end()
2100    }
2101}
2102
2103// struct extends DeviceSession
2104impl From<DesktopClientSession> for DeviceSession {
2105    fn from(subtype: DesktopClientSession) -> Self {
2106        Self {
2107            session_id: subtype.session_id,
2108            ip_address: subtype.ip_address,
2109            country: subtype.country,
2110            created: subtype.created,
2111            updated: subtype.updated,
2112        }
2113    }
2114}
2115#[derive(Debug, Clone, PartialEq, Eq)]
2116#[non_exhaustive] // variants may be added in the future
2117pub enum DesktopPlatform {
2118    /// Official Windows Dropbox desktop client.
2119    Windows,
2120    /// Official Mac Dropbox desktop client.
2121    Mac,
2122    /// Official Linux Dropbox desktop client.
2123    Linux,
2124    /// Catch-all used for unrecognized values returned from the server. Encountering this value
2125    /// typically indicates that this SDK version is out of date.
2126    Other,
2127}
2128
2129impl<'de> ::serde::de::Deserialize<'de> for DesktopPlatform {
2130    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2131        // union deserializer
2132        use serde::de::{self, MapAccess, Visitor};
2133        struct EnumVisitor;
2134        impl<'de> Visitor<'de> for EnumVisitor {
2135            type Value = DesktopPlatform;
2136            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
2137                f.write_str("a DesktopPlatform structure")
2138            }
2139            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
2140                let tag: &str = match map.next_key()? {
2141                    Some(".tag") => map.next_value()?,
2142                    _ => return Err(de::Error::missing_field(".tag"))
2143                };
2144                let value = match tag {
2145                    "windows" => DesktopPlatform::Windows,
2146                    "mac" => DesktopPlatform::Mac,
2147                    "linux" => DesktopPlatform::Linux,
2148                    _ => DesktopPlatform::Other,
2149                };
2150                crate::eat_json_fields(&mut map)?;
2151                Ok(value)
2152            }
2153        }
2154        const VARIANTS: &[&str] = &["windows",
2155                                    "mac",
2156                                    "linux",
2157                                    "other"];
2158        deserializer.deserialize_struct("DesktopPlatform", VARIANTS, EnumVisitor)
2159    }
2160}
2161
2162impl ::serde::ser::Serialize for DesktopPlatform {
2163    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
2164        // union serializer
2165        use serde::ser::SerializeStruct;
2166        match self {
2167            DesktopPlatform::Windows => {
2168                // unit
2169                let mut s = serializer.serialize_struct("DesktopPlatform", 1)?;
2170                s.serialize_field(".tag", "windows")?;
2171                s.end()
2172            }
2173            DesktopPlatform::Mac => {
2174                // unit
2175                let mut s = serializer.serialize_struct("DesktopPlatform", 1)?;
2176                s.serialize_field(".tag", "mac")?;
2177                s.end()
2178            }
2179            DesktopPlatform::Linux => {
2180                // unit
2181                let mut s = serializer.serialize_struct("DesktopPlatform", 1)?;
2182                s.serialize_field(".tag", "linux")?;
2183                s.end()
2184            }
2185            DesktopPlatform::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
2186        }
2187    }
2188}
2189
2190#[derive(Debug, Clone, PartialEq, Eq)]
2191#[non_exhaustive] // structs may have more fields added in the future.
2192pub struct DeviceSession {
2193    /// The session id.
2194    pub session_id: String,
2195    /// The IP address of the last activity from this session.
2196    pub ip_address: Option<String>,
2197    /// The country from which the last activity from this session was made.
2198    pub country: Option<String>,
2199    /// The time this session was created.
2200    pub created: Option<crate::types::common::DropboxTimestamp>,
2201    /// The time of the last activity from this session.
2202    pub updated: Option<crate::types::common::DropboxTimestamp>,
2203}
2204
2205impl DeviceSession {
2206    pub fn new(session_id: String) -> Self {
2207        DeviceSession {
2208            session_id,
2209            ip_address: None,
2210            country: None,
2211            created: None,
2212            updated: None,
2213        }
2214    }
2215
2216    pub fn with_ip_address(mut self, value: String) -> Self {
2217        self.ip_address = Some(value);
2218        self
2219    }
2220
2221    pub fn with_country(mut self, value: String) -> Self {
2222        self.country = Some(value);
2223        self
2224    }
2225
2226    pub fn with_created(mut self, value: crate::types::common::DropboxTimestamp) -> Self {
2227        self.created = Some(value);
2228        self
2229    }
2230
2231    pub fn with_updated(mut self, value: crate::types::common::DropboxTimestamp) -> Self {
2232        self.updated = Some(value);
2233        self
2234    }
2235}
2236
2237const DEVICE_SESSION_FIELDS: &[&str] = &["session_id",
2238                                         "ip_address",
2239                                         "country",
2240                                         "created",
2241                                         "updated"];
2242impl DeviceSession {
2243    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
2244        map: V,
2245    ) -> Result<DeviceSession, V::Error> {
2246        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
2247    }
2248
2249    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
2250        mut map: V,
2251        optional: bool,
2252    ) -> Result<Option<DeviceSession>, V::Error> {
2253        let mut field_session_id = None;
2254        let mut field_ip_address = None;
2255        let mut field_country = None;
2256        let mut field_created = None;
2257        let mut field_updated = None;
2258        let mut nothing = true;
2259        while let Some(key) = map.next_key::<&str>()? {
2260            nothing = false;
2261            match key {
2262                "session_id" => {
2263                    if field_session_id.is_some() {
2264                        return Err(::serde::de::Error::duplicate_field("session_id"));
2265                    }
2266                    field_session_id = Some(map.next_value()?);
2267                }
2268                "ip_address" => {
2269                    if field_ip_address.is_some() {
2270                        return Err(::serde::de::Error::duplicate_field("ip_address"));
2271                    }
2272                    field_ip_address = Some(map.next_value()?);
2273                }
2274                "country" => {
2275                    if field_country.is_some() {
2276                        return Err(::serde::de::Error::duplicate_field("country"));
2277                    }
2278                    field_country = Some(map.next_value()?);
2279                }
2280                "created" => {
2281                    if field_created.is_some() {
2282                        return Err(::serde::de::Error::duplicate_field("created"));
2283                    }
2284                    field_created = Some(map.next_value()?);
2285                }
2286                "updated" => {
2287                    if field_updated.is_some() {
2288                        return Err(::serde::de::Error::duplicate_field("updated"));
2289                    }
2290                    field_updated = Some(map.next_value()?);
2291                }
2292                _ => {
2293                    // unknown field allowed and ignored
2294                    map.next_value::<::serde_json::Value>()?;
2295                }
2296            }
2297        }
2298        if optional && nothing {
2299            return Ok(None);
2300        }
2301        let result = DeviceSession {
2302            session_id: field_session_id.ok_or_else(|| ::serde::de::Error::missing_field("session_id"))?,
2303            ip_address: field_ip_address.and_then(Option::flatten),
2304            country: field_country.and_then(Option::flatten),
2305            created: field_created.and_then(Option::flatten),
2306            updated: field_updated.and_then(Option::flatten),
2307        };
2308        Ok(Some(result))
2309    }
2310
2311    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
2312        &self,
2313        s: &mut S::SerializeStruct,
2314    ) -> Result<(), S::Error> {
2315        use serde::ser::SerializeStruct;
2316        s.serialize_field("session_id", &self.session_id)?;
2317        if let Some(val) = &self.ip_address {
2318            s.serialize_field("ip_address", val)?;
2319        }
2320        if let Some(val) = &self.country {
2321            s.serialize_field("country", val)?;
2322        }
2323        if let Some(val) = &self.created {
2324            s.serialize_field("created", val)?;
2325        }
2326        if let Some(val) = &self.updated {
2327            s.serialize_field("updated", val)?;
2328        }
2329        Ok(())
2330    }
2331}
2332
2333impl<'de> ::serde::de::Deserialize<'de> for DeviceSession {
2334    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2335        // struct deserializer
2336        use serde::de::{MapAccess, Visitor};
2337        struct StructVisitor;
2338        impl<'de> Visitor<'de> for StructVisitor {
2339            type Value = DeviceSession;
2340            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
2341                f.write_str("a DeviceSession struct")
2342            }
2343            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
2344                DeviceSession::internal_deserialize(map)
2345            }
2346        }
2347        deserializer.deserialize_struct("DeviceSession", DEVICE_SESSION_FIELDS, StructVisitor)
2348    }
2349}
2350
2351impl ::serde::ser::Serialize for DeviceSession {
2352    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
2353        // struct serializer
2354        use serde::ser::SerializeStruct;
2355        let mut s = serializer.serialize_struct("DeviceSession", 5)?;
2356        self.internal_serialize::<S>(&mut s)?;
2357        s.end()
2358    }
2359}
2360
2361#[derive(Debug, Clone, PartialEq, Eq)]
2362#[non_exhaustive] // structs may have more fields added in the future.
2363pub struct DeviceSessionArg {
2364    /// The session id.
2365    pub session_id: String,
2366    /// The unique id of the member owning the device.
2367    pub team_member_id: String,
2368}
2369
2370impl DeviceSessionArg {
2371    pub fn new(session_id: String, team_member_id: String) -> Self {
2372        DeviceSessionArg {
2373            session_id,
2374            team_member_id,
2375        }
2376    }
2377}
2378
2379const DEVICE_SESSION_ARG_FIELDS: &[&str] = &["session_id",
2380                                             "team_member_id"];
2381impl DeviceSessionArg {
2382    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
2383        map: V,
2384    ) -> Result<DeviceSessionArg, V::Error> {
2385        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
2386    }
2387
2388    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
2389        mut map: V,
2390        optional: bool,
2391    ) -> Result<Option<DeviceSessionArg>, V::Error> {
2392        let mut field_session_id = None;
2393        let mut field_team_member_id = None;
2394        let mut nothing = true;
2395        while let Some(key) = map.next_key::<&str>()? {
2396            nothing = false;
2397            match key {
2398                "session_id" => {
2399                    if field_session_id.is_some() {
2400                        return Err(::serde::de::Error::duplicate_field("session_id"));
2401                    }
2402                    field_session_id = Some(map.next_value()?);
2403                }
2404                "team_member_id" => {
2405                    if field_team_member_id.is_some() {
2406                        return Err(::serde::de::Error::duplicate_field("team_member_id"));
2407                    }
2408                    field_team_member_id = Some(map.next_value()?);
2409                }
2410                _ => {
2411                    // unknown field allowed and ignored
2412                    map.next_value::<::serde_json::Value>()?;
2413                }
2414            }
2415        }
2416        if optional && nothing {
2417            return Ok(None);
2418        }
2419        let result = DeviceSessionArg {
2420            session_id: field_session_id.ok_or_else(|| ::serde::de::Error::missing_field("session_id"))?,
2421            team_member_id: field_team_member_id.ok_or_else(|| ::serde::de::Error::missing_field("team_member_id"))?,
2422        };
2423        Ok(Some(result))
2424    }
2425
2426    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
2427        &self,
2428        s: &mut S::SerializeStruct,
2429    ) -> Result<(), S::Error> {
2430        use serde::ser::SerializeStruct;
2431        s.serialize_field("session_id", &self.session_id)?;
2432        s.serialize_field("team_member_id", &self.team_member_id)?;
2433        Ok(())
2434    }
2435}
2436
2437impl<'de> ::serde::de::Deserialize<'de> for DeviceSessionArg {
2438    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2439        // struct deserializer
2440        use serde::de::{MapAccess, Visitor};
2441        struct StructVisitor;
2442        impl<'de> Visitor<'de> for StructVisitor {
2443            type Value = DeviceSessionArg;
2444            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
2445                f.write_str("a DeviceSessionArg struct")
2446            }
2447            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
2448                DeviceSessionArg::internal_deserialize(map)
2449            }
2450        }
2451        deserializer.deserialize_struct("DeviceSessionArg", DEVICE_SESSION_ARG_FIELDS, StructVisitor)
2452    }
2453}
2454
2455impl ::serde::ser::Serialize for DeviceSessionArg {
2456    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
2457        // struct serializer
2458        use serde::ser::SerializeStruct;
2459        let mut s = serializer.serialize_struct("DeviceSessionArg", 2)?;
2460        self.internal_serialize::<S>(&mut s)?;
2461        s.end()
2462    }
2463}
2464
2465/// Each of the items is an array of values, one value per day. The value is the number of devices
2466/// active within a time window, ending with that day. If there is no data for a day, then the value
2467/// will be None.
2468#[derive(Debug, Clone, PartialEq, Eq)]
2469#[non_exhaustive] // structs may have more fields added in the future.
2470pub struct DevicesActive {
2471    /// Array of number of linked windows (desktop) clients with activity.
2472    pub windows: NumberPerDay,
2473    /// Array of number of linked mac (desktop) clients with activity.
2474    pub macos: NumberPerDay,
2475    /// Array of number of linked linus (desktop) clients with activity.
2476    pub linux: NumberPerDay,
2477    /// Array of number of linked ios devices with activity.
2478    pub ios: NumberPerDay,
2479    /// Array of number of linked android devices with activity.
2480    pub android: NumberPerDay,
2481    /// Array of number of other linked devices (blackberry, windows phone, etc)  with activity.
2482    pub other: NumberPerDay,
2483    /// Array of total number of linked clients with activity.
2484    pub total: NumberPerDay,
2485}
2486
2487impl DevicesActive {
2488    pub fn new(
2489        windows: NumberPerDay,
2490        macos: NumberPerDay,
2491        linux: NumberPerDay,
2492        ios: NumberPerDay,
2493        android: NumberPerDay,
2494        other: NumberPerDay,
2495        total: NumberPerDay,
2496    ) -> Self {
2497        DevicesActive {
2498            windows,
2499            macos,
2500            linux,
2501            ios,
2502            android,
2503            other,
2504            total,
2505        }
2506    }
2507}
2508
2509const DEVICES_ACTIVE_FIELDS: &[&str] = &["windows",
2510                                         "macos",
2511                                         "linux",
2512                                         "ios",
2513                                         "android",
2514                                         "other",
2515                                         "total"];
2516impl DevicesActive {
2517    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
2518        map: V,
2519    ) -> Result<DevicesActive, V::Error> {
2520        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
2521    }
2522
2523    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
2524        mut map: V,
2525        optional: bool,
2526    ) -> Result<Option<DevicesActive>, V::Error> {
2527        let mut field_windows = None;
2528        let mut field_macos = None;
2529        let mut field_linux = None;
2530        let mut field_ios = None;
2531        let mut field_android = None;
2532        let mut field_other = None;
2533        let mut field_total = None;
2534        let mut nothing = true;
2535        while let Some(key) = map.next_key::<&str>()? {
2536            nothing = false;
2537            match key {
2538                "windows" => {
2539                    if field_windows.is_some() {
2540                        return Err(::serde::de::Error::duplicate_field("windows"));
2541                    }
2542                    field_windows = Some(map.next_value()?);
2543                }
2544                "macos" => {
2545                    if field_macos.is_some() {
2546                        return Err(::serde::de::Error::duplicate_field("macos"));
2547                    }
2548                    field_macos = Some(map.next_value()?);
2549                }
2550                "linux" => {
2551                    if field_linux.is_some() {
2552                        return Err(::serde::de::Error::duplicate_field("linux"));
2553                    }
2554                    field_linux = Some(map.next_value()?);
2555                }
2556                "ios" => {
2557                    if field_ios.is_some() {
2558                        return Err(::serde::de::Error::duplicate_field("ios"));
2559                    }
2560                    field_ios = Some(map.next_value()?);
2561                }
2562                "android" => {
2563                    if field_android.is_some() {
2564                        return Err(::serde::de::Error::duplicate_field("android"));
2565                    }
2566                    field_android = Some(map.next_value()?);
2567                }
2568                "other" => {
2569                    if field_other.is_some() {
2570                        return Err(::serde::de::Error::duplicate_field("other"));
2571                    }
2572                    field_other = Some(map.next_value()?);
2573                }
2574                "total" => {
2575                    if field_total.is_some() {
2576                        return Err(::serde::de::Error::duplicate_field("total"));
2577                    }
2578                    field_total = Some(map.next_value()?);
2579                }
2580                _ => {
2581                    // unknown field allowed and ignored
2582                    map.next_value::<::serde_json::Value>()?;
2583                }
2584            }
2585        }
2586        if optional && nothing {
2587            return Ok(None);
2588        }
2589        let result = DevicesActive {
2590            windows: field_windows.ok_or_else(|| ::serde::de::Error::missing_field("windows"))?,
2591            macos: field_macos.ok_or_else(|| ::serde::de::Error::missing_field("macos"))?,
2592            linux: field_linux.ok_or_else(|| ::serde::de::Error::missing_field("linux"))?,
2593            ios: field_ios.ok_or_else(|| ::serde::de::Error::missing_field("ios"))?,
2594            android: field_android.ok_or_else(|| ::serde::de::Error::missing_field("android"))?,
2595            other: field_other.ok_or_else(|| ::serde::de::Error::missing_field("other"))?,
2596            total: field_total.ok_or_else(|| ::serde::de::Error::missing_field("total"))?,
2597        };
2598        Ok(Some(result))
2599    }
2600
2601    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
2602        &self,
2603        s: &mut S::SerializeStruct,
2604    ) -> Result<(), S::Error> {
2605        use serde::ser::SerializeStruct;
2606        s.serialize_field("windows", &self.windows)?;
2607        s.serialize_field("macos", &self.macos)?;
2608        s.serialize_field("linux", &self.linux)?;
2609        s.serialize_field("ios", &self.ios)?;
2610        s.serialize_field("android", &self.android)?;
2611        s.serialize_field("other", &self.other)?;
2612        s.serialize_field("total", &self.total)?;
2613        Ok(())
2614    }
2615}
2616
2617impl<'de> ::serde::de::Deserialize<'de> for DevicesActive {
2618    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2619        // struct deserializer
2620        use serde::de::{MapAccess, Visitor};
2621        struct StructVisitor;
2622        impl<'de> Visitor<'de> for StructVisitor {
2623            type Value = DevicesActive;
2624            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
2625                f.write_str("a DevicesActive struct")
2626            }
2627            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
2628                DevicesActive::internal_deserialize(map)
2629            }
2630        }
2631        deserializer.deserialize_struct("DevicesActive", DEVICES_ACTIVE_FIELDS, StructVisitor)
2632    }
2633}
2634
2635impl ::serde::ser::Serialize for DevicesActive {
2636    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
2637        // struct serializer
2638        use serde::ser::SerializeStruct;
2639        let mut s = serializer.serialize_struct("DevicesActive", 7)?;
2640        self.internal_serialize::<S>(&mut s)?;
2641        s.end()
2642    }
2643}
2644
2645/// Excluded users list argument.
2646#[derive(Debug, Clone, PartialEq, Eq)]
2647#[non_exhaustive] // structs may have more fields added in the future.
2648pub struct ExcludedUsersListArg {
2649    /// Number of results to return per call.
2650    pub limit: u32,
2651}
2652
2653impl Default for ExcludedUsersListArg {
2654    fn default() -> Self {
2655        ExcludedUsersListArg {
2656            limit: 1000,
2657        }
2658    }
2659}
2660
2661impl ExcludedUsersListArg {
2662    pub fn with_limit(mut self, value: u32) -> Self {
2663        self.limit = value;
2664        self
2665    }
2666}
2667
2668const EXCLUDED_USERS_LIST_ARG_FIELDS: &[&str] = &["limit"];
2669impl ExcludedUsersListArg {
2670    // no _opt deserializer
2671    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
2672        mut map: V,
2673    ) -> Result<ExcludedUsersListArg, V::Error> {
2674        let mut field_limit = None;
2675        while let Some(key) = map.next_key::<&str>()? {
2676            match key {
2677                "limit" => {
2678                    if field_limit.is_some() {
2679                        return Err(::serde::de::Error::duplicate_field("limit"));
2680                    }
2681                    field_limit = Some(map.next_value()?);
2682                }
2683                _ => {
2684                    // unknown field allowed and ignored
2685                    map.next_value::<::serde_json::Value>()?;
2686                }
2687            }
2688        }
2689        let result = ExcludedUsersListArg {
2690            limit: field_limit.unwrap_or(1000),
2691        };
2692        Ok(result)
2693    }
2694
2695    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
2696        &self,
2697        s: &mut S::SerializeStruct,
2698    ) -> Result<(), S::Error> {
2699        use serde::ser::SerializeStruct;
2700        if self.limit != 1000 {
2701            s.serialize_field("limit", &self.limit)?;
2702        }
2703        Ok(())
2704    }
2705}
2706
2707impl<'de> ::serde::de::Deserialize<'de> for ExcludedUsersListArg {
2708    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2709        // struct deserializer
2710        use serde::de::{MapAccess, Visitor};
2711        struct StructVisitor;
2712        impl<'de> Visitor<'de> for StructVisitor {
2713            type Value = ExcludedUsersListArg;
2714            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
2715                f.write_str("a ExcludedUsersListArg struct")
2716            }
2717            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
2718                ExcludedUsersListArg::internal_deserialize(map)
2719            }
2720        }
2721        deserializer.deserialize_struct("ExcludedUsersListArg", EXCLUDED_USERS_LIST_ARG_FIELDS, StructVisitor)
2722    }
2723}
2724
2725impl ::serde::ser::Serialize for ExcludedUsersListArg {
2726    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
2727        // struct serializer
2728        use serde::ser::SerializeStruct;
2729        let mut s = serializer.serialize_struct("ExcludedUsersListArg", 1)?;
2730        self.internal_serialize::<S>(&mut s)?;
2731        s.end()
2732    }
2733}
2734
2735/// Excluded users list continue argument.
2736#[derive(Debug, Clone, PartialEq, Eq)]
2737#[non_exhaustive] // structs may have more fields added in the future.
2738pub struct ExcludedUsersListContinueArg {
2739    /// Indicates from what point to get the next set of users.
2740    pub cursor: String,
2741}
2742
2743impl ExcludedUsersListContinueArg {
2744    pub fn new(cursor: String) -> Self {
2745        ExcludedUsersListContinueArg {
2746            cursor,
2747        }
2748    }
2749}
2750
2751const EXCLUDED_USERS_LIST_CONTINUE_ARG_FIELDS: &[&str] = &["cursor"];
2752impl ExcludedUsersListContinueArg {
2753    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
2754        map: V,
2755    ) -> Result<ExcludedUsersListContinueArg, V::Error> {
2756        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
2757    }
2758
2759    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
2760        mut map: V,
2761        optional: bool,
2762    ) -> Result<Option<ExcludedUsersListContinueArg>, V::Error> {
2763        let mut field_cursor = None;
2764        let mut nothing = true;
2765        while let Some(key) = map.next_key::<&str>()? {
2766            nothing = false;
2767            match key {
2768                "cursor" => {
2769                    if field_cursor.is_some() {
2770                        return Err(::serde::de::Error::duplicate_field("cursor"));
2771                    }
2772                    field_cursor = Some(map.next_value()?);
2773                }
2774                _ => {
2775                    // unknown field allowed and ignored
2776                    map.next_value::<::serde_json::Value>()?;
2777                }
2778            }
2779        }
2780        if optional && nothing {
2781            return Ok(None);
2782        }
2783        let result = ExcludedUsersListContinueArg {
2784            cursor: field_cursor.ok_or_else(|| ::serde::de::Error::missing_field("cursor"))?,
2785        };
2786        Ok(Some(result))
2787    }
2788
2789    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
2790        &self,
2791        s: &mut S::SerializeStruct,
2792    ) -> Result<(), S::Error> {
2793        use serde::ser::SerializeStruct;
2794        s.serialize_field("cursor", &self.cursor)?;
2795        Ok(())
2796    }
2797}
2798
2799impl<'de> ::serde::de::Deserialize<'de> for ExcludedUsersListContinueArg {
2800    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2801        // struct deserializer
2802        use serde::de::{MapAccess, Visitor};
2803        struct StructVisitor;
2804        impl<'de> Visitor<'de> for StructVisitor {
2805            type Value = ExcludedUsersListContinueArg;
2806            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
2807                f.write_str("a ExcludedUsersListContinueArg struct")
2808            }
2809            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
2810                ExcludedUsersListContinueArg::internal_deserialize(map)
2811            }
2812        }
2813        deserializer.deserialize_struct("ExcludedUsersListContinueArg", EXCLUDED_USERS_LIST_CONTINUE_ARG_FIELDS, StructVisitor)
2814    }
2815}
2816
2817impl ::serde::ser::Serialize for ExcludedUsersListContinueArg {
2818    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
2819        // struct serializer
2820        use serde::ser::SerializeStruct;
2821        let mut s = serializer.serialize_struct("ExcludedUsersListContinueArg", 1)?;
2822        self.internal_serialize::<S>(&mut s)?;
2823        s.end()
2824    }
2825}
2826
2827/// Excluded users list continue error.
2828#[derive(Debug, Clone, PartialEq, Eq)]
2829#[non_exhaustive] // variants may be added in the future
2830pub enum ExcludedUsersListContinueError {
2831    /// The cursor is invalid.
2832    InvalidCursor,
2833    /// Catch-all used for unrecognized values returned from the server. Encountering this value
2834    /// typically indicates that this SDK version is out of date.
2835    Other,
2836}
2837
2838impl<'de> ::serde::de::Deserialize<'de> for ExcludedUsersListContinueError {
2839    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2840        // union deserializer
2841        use serde::de::{self, MapAccess, Visitor};
2842        struct EnumVisitor;
2843        impl<'de> Visitor<'de> for EnumVisitor {
2844            type Value = ExcludedUsersListContinueError;
2845            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
2846                f.write_str("a ExcludedUsersListContinueError structure")
2847            }
2848            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
2849                let tag: &str = match map.next_key()? {
2850                    Some(".tag") => map.next_value()?,
2851                    _ => return Err(de::Error::missing_field(".tag"))
2852                };
2853                let value = match tag {
2854                    "invalid_cursor" => ExcludedUsersListContinueError::InvalidCursor,
2855                    _ => ExcludedUsersListContinueError::Other,
2856                };
2857                crate::eat_json_fields(&mut map)?;
2858                Ok(value)
2859            }
2860        }
2861        const VARIANTS: &[&str] = &["invalid_cursor",
2862                                    "other"];
2863        deserializer.deserialize_struct("ExcludedUsersListContinueError", VARIANTS, EnumVisitor)
2864    }
2865}
2866
2867impl ::serde::ser::Serialize for ExcludedUsersListContinueError {
2868    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
2869        // union serializer
2870        use serde::ser::SerializeStruct;
2871        match self {
2872            ExcludedUsersListContinueError::InvalidCursor => {
2873                // unit
2874                let mut s = serializer.serialize_struct("ExcludedUsersListContinueError", 1)?;
2875                s.serialize_field(".tag", "invalid_cursor")?;
2876                s.end()
2877            }
2878            ExcludedUsersListContinueError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
2879        }
2880    }
2881}
2882
2883impl ::std::error::Error for ExcludedUsersListContinueError {
2884}
2885
2886impl ::std::fmt::Display for ExcludedUsersListContinueError {
2887    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
2888        match self {
2889            ExcludedUsersListContinueError::InvalidCursor => f.write_str("The cursor is invalid."),
2890            _ => write!(f, "{:?}", *self),
2891        }
2892    }
2893}
2894
2895/// Excluded users list error.
2896#[derive(Debug, Clone, PartialEq, Eq)]
2897#[non_exhaustive] // variants may be added in the future
2898pub enum ExcludedUsersListError {
2899    /// An error occurred.
2900    ListError,
2901    /// Catch-all used for unrecognized values returned from the server. Encountering this value
2902    /// typically indicates that this SDK version is out of date.
2903    Other,
2904}
2905
2906impl<'de> ::serde::de::Deserialize<'de> for ExcludedUsersListError {
2907    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2908        // union deserializer
2909        use serde::de::{self, MapAccess, Visitor};
2910        struct EnumVisitor;
2911        impl<'de> Visitor<'de> for EnumVisitor {
2912            type Value = ExcludedUsersListError;
2913            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
2914                f.write_str("a ExcludedUsersListError structure")
2915            }
2916            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
2917                let tag: &str = match map.next_key()? {
2918                    Some(".tag") => map.next_value()?,
2919                    _ => return Err(de::Error::missing_field(".tag"))
2920                };
2921                let value = match tag {
2922                    "list_error" => ExcludedUsersListError::ListError,
2923                    _ => ExcludedUsersListError::Other,
2924                };
2925                crate::eat_json_fields(&mut map)?;
2926                Ok(value)
2927            }
2928        }
2929        const VARIANTS: &[&str] = &["list_error",
2930                                    "other"];
2931        deserializer.deserialize_struct("ExcludedUsersListError", VARIANTS, EnumVisitor)
2932    }
2933}
2934
2935impl ::serde::ser::Serialize for ExcludedUsersListError {
2936    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
2937        // union serializer
2938        use serde::ser::SerializeStruct;
2939        match self {
2940            ExcludedUsersListError::ListError => {
2941                // unit
2942                let mut s = serializer.serialize_struct("ExcludedUsersListError", 1)?;
2943                s.serialize_field(".tag", "list_error")?;
2944                s.end()
2945            }
2946            ExcludedUsersListError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
2947        }
2948    }
2949}
2950
2951impl ::std::error::Error for ExcludedUsersListError {
2952}
2953
2954impl ::std::fmt::Display for ExcludedUsersListError {
2955    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
2956        match self {
2957            ExcludedUsersListError::ListError => f.write_str("An error occurred."),
2958            _ => write!(f, "{:?}", *self),
2959        }
2960    }
2961}
2962
2963/// Excluded users list result.
2964#[derive(Debug, Clone, PartialEq, Eq)]
2965#[non_exhaustive] // structs may have more fields added in the future.
2966pub struct ExcludedUsersListResult {
2967    pub users: Vec<MemberProfile>,
2968    /// Is true if there are additional excluded users that have not been returned yet. An
2969    /// additional call to
2970    /// [`member_space_limits_excluded_users_list_continue()`](crate::team::member_space_limits_excluded_users_list_continue)
2971    /// can retrieve them.
2972    pub has_more: bool,
2973    /// Pass the cursor into
2974    /// [`member_space_limits_excluded_users_list_continue()`](crate::team::member_space_limits_excluded_users_list_continue)
2975    /// to obtain additional excluded users.
2976    pub cursor: Option<String>,
2977}
2978
2979impl ExcludedUsersListResult {
2980    pub fn new(users: Vec<MemberProfile>, has_more: bool) -> Self {
2981        ExcludedUsersListResult {
2982            users,
2983            has_more,
2984            cursor: None,
2985        }
2986    }
2987
2988    pub fn with_cursor(mut self, value: String) -> Self {
2989        self.cursor = Some(value);
2990        self
2991    }
2992}
2993
2994const EXCLUDED_USERS_LIST_RESULT_FIELDS: &[&str] = &["users",
2995                                                     "has_more",
2996                                                     "cursor"];
2997impl ExcludedUsersListResult {
2998    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
2999        map: V,
3000    ) -> Result<ExcludedUsersListResult, V::Error> {
3001        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
3002    }
3003
3004    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
3005        mut map: V,
3006        optional: bool,
3007    ) -> Result<Option<ExcludedUsersListResult>, V::Error> {
3008        let mut field_users = None;
3009        let mut field_has_more = None;
3010        let mut field_cursor = None;
3011        let mut nothing = true;
3012        while let Some(key) = map.next_key::<&str>()? {
3013            nothing = false;
3014            match key {
3015                "users" => {
3016                    if field_users.is_some() {
3017                        return Err(::serde::de::Error::duplicate_field("users"));
3018                    }
3019                    field_users = Some(map.next_value()?);
3020                }
3021                "has_more" => {
3022                    if field_has_more.is_some() {
3023                        return Err(::serde::de::Error::duplicate_field("has_more"));
3024                    }
3025                    field_has_more = Some(map.next_value()?);
3026                }
3027                "cursor" => {
3028                    if field_cursor.is_some() {
3029                        return Err(::serde::de::Error::duplicate_field("cursor"));
3030                    }
3031                    field_cursor = Some(map.next_value()?);
3032                }
3033                _ => {
3034                    // unknown field allowed and ignored
3035                    map.next_value::<::serde_json::Value>()?;
3036                }
3037            }
3038        }
3039        if optional && nothing {
3040            return Ok(None);
3041        }
3042        let result = ExcludedUsersListResult {
3043            users: field_users.ok_or_else(|| ::serde::de::Error::missing_field("users"))?,
3044            has_more: field_has_more.ok_or_else(|| ::serde::de::Error::missing_field("has_more"))?,
3045            cursor: field_cursor.and_then(Option::flatten),
3046        };
3047        Ok(Some(result))
3048    }
3049
3050    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
3051        &self,
3052        s: &mut S::SerializeStruct,
3053    ) -> Result<(), S::Error> {
3054        use serde::ser::SerializeStruct;
3055        s.serialize_field("users", &self.users)?;
3056        s.serialize_field("has_more", &self.has_more)?;
3057        if let Some(val) = &self.cursor {
3058            s.serialize_field("cursor", val)?;
3059        }
3060        Ok(())
3061    }
3062}
3063
3064impl<'de> ::serde::de::Deserialize<'de> for ExcludedUsersListResult {
3065    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3066        // struct deserializer
3067        use serde::de::{MapAccess, Visitor};
3068        struct StructVisitor;
3069        impl<'de> Visitor<'de> for StructVisitor {
3070            type Value = ExcludedUsersListResult;
3071            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
3072                f.write_str("a ExcludedUsersListResult struct")
3073            }
3074            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
3075                ExcludedUsersListResult::internal_deserialize(map)
3076            }
3077        }
3078        deserializer.deserialize_struct("ExcludedUsersListResult", EXCLUDED_USERS_LIST_RESULT_FIELDS, StructVisitor)
3079    }
3080}
3081
3082impl ::serde::ser::Serialize for ExcludedUsersListResult {
3083    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
3084        // struct serializer
3085        use serde::ser::SerializeStruct;
3086        let mut s = serializer.serialize_struct("ExcludedUsersListResult", 3)?;
3087        self.internal_serialize::<S>(&mut s)?;
3088        s.end()
3089    }
3090}
3091
3092/// Argument of excluded users update operation. Should include a list of users to add/remove
3093/// (according to endpoint), Maximum size of the list is 1000 users.
3094#[derive(Debug, Clone, PartialEq, Eq, Default)]
3095#[non_exhaustive] // structs may have more fields added in the future.
3096pub struct ExcludedUsersUpdateArg {
3097    /// List of users to be added/removed.
3098    pub users: Option<Vec<UserSelectorArg>>,
3099}
3100
3101impl ExcludedUsersUpdateArg {
3102    pub fn with_users(mut self, value: Vec<UserSelectorArg>) -> Self {
3103        self.users = Some(value);
3104        self
3105    }
3106}
3107
3108const EXCLUDED_USERS_UPDATE_ARG_FIELDS: &[&str] = &["users"];
3109impl ExcludedUsersUpdateArg {
3110    // no _opt deserializer
3111    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
3112        mut map: V,
3113    ) -> Result<ExcludedUsersUpdateArg, V::Error> {
3114        let mut field_users = None;
3115        while let Some(key) = map.next_key::<&str>()? {
3116            match key {
3117                "users" => {
3118                    if field_users.is_some() {
3119                        return Err(::serde::de::Error::duplicate_field("users"));
3120                    }
3121                    field_users = Some(map.next_value()?);
3122                }
3123                _ => {
3124                    // unknown field allowed and ignored
3125                    map.next_value::<::serde_json::Value>()?;
3126                }
3127            }
3128        }
3129        let result = ExcludedUsersUpdateArg {
3130            users: field_users.and_then(Option::flatten),
3131        };
3132        Ok(result)
3133    }
3134
3135    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
3136        &self,
3137        s: &mut S::SerializeStruct,
3138    ) -> Result<(), S::Error> {
3139        use serde::ser::SerializeStruct;
3140        if let Some(val) = &self.users {
3141            s.serialize_field("users", val)?;
3142        }
3143        Ok(())
3144    }
3145}
3146
3147impl<'de> ::serde::de::Deserialize<'de> for ExcludedUsersUpdateArg {
3148    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3149        // struct deserializer
3150        use serde::de::{MapAccess, Visitor};
3151        struct StructVisitor;
3152        impl<'de> Visitor<'de> for StructVisitor {
3153            type Value = ExcludedUsersUpdateArg;
3154            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
3155                f.write_str("a ExcludedUsersUpdateArg struct")
3156            }
3157            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
3158                ExcludedUsersUpdateArg::internal_deserialize(map)
3159            }
3160        }
3161        deserializer.deserialize_struct("ExcludedUsersUpdateArg", EXCLUDED_USERS_UPDATE_ARG_FIELDS, StructVisitor)
3162    }
3163}
3164
3165impl ::serde::ser::Serialize for ExcludedUsersUpdateArg {
3166    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
3167        // struct serializer
3168        use serde::ser::SerializeStruct;
3169        let mut s = serializer.serialize_struct("ExcludedUsersUpdateArg", 1)?;
3170        self.internal_serialize::<S>(&mut s)?;
3171        s.end()
3172    }
3173}
3174
3175/// Excluded users update error.
3176#[derive(Debug, Clone, PartialEq, Eq)]
3177#[non_exhaustive] // variants may be added in the future
3178pub enum ExcludedUsersUpdateError {
3179    /// At least one of the users is not part of your team.
3180    UsersNotInTeam,
3181    /// A maximum of 1000 users for each of addition/removal can be supplied.
3182    TooManyUsers,
3183    /// Catch-all used for unrecognized values returned from the server. Encountering this value
3184    /// typically indicates that this SDK version is out of date.
3185    Other,
3186}
3187
3188impl<'de> ::serde::de::Deserialize<'de> for ExcludedUsersUpdateError {
3189    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3190        // union deserializer
3191        use serde::de::{self, MapAccess, Visitor};
3192        struct EnumVisitor;
3193        impl<'de> Visitor<'de> for EnumVisitor {
3194            type Value = ExcludedUsersUpdateError;
3195            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
3196                f.write_str("a ExcludedUsersUpdateError structure")
3197            }
3198            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
3199                let tag: &str = match map.next_key()? {
3200                    Some(".tag") => map.next_value()?,
3201                    _ => return Err(de::Error::missing_field(".tag"))
3202                };
3203                let value = match tag {
3204                    "users_not_in_team" => ExcludedUsersUpdateError::UsersNotInTeam,
3205                    "too_many_users" => ExcludedUsersUpdateError::TooManyUsers,
3206                    _ => ExcludedUsersUpdateError::Other,
3207                };
3208                crate::eat_json_fields(&mut map)?;
3209                Ok(value)
3210            }
3211        }
3212        const VARIANTS: &[&str] = &["users_not_in_team",
3213                                    "too_many_users",
3214                                    "other"];
3215        deserializer.deserialize_struct("ExcludedUsersUpdateError", VARIANTS, EnumVisitor)
3216    }
3217}
3218
3219impl ::serde::ser::Serialize for ExcludedUsersUpdateError {
3220    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
3221        // union serializer
3222        use serde::ser::SerializeStruct;
3223        match self {
3224            ExcludedUsersUpdateError::UsersNotInTeam => {
3225                // unit
3226                let mut s = serializer.serialize_struct("ExcludedUsersUpdateError", 1)?;
3227                s.serialize_field(".tag", "users_not_in_team")?;
3228                s.end()
3229            }
3230            ExcludedUsersUpdateError::TooManyUsers => {
3231                // unit
3232                let mut s = serializer.serialize_struct("ExcludedUsersUpdateError", 1)?;
3233                s.serialize_field(".tag", "too_many_users")?;
3234                s.end()
3235            }
3236            ExcludedUsersUpdateError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
3237        }
3238    }
3239}
3240
3241impl ::std::error::Error for ExcludedUsersUpdateError {
3242}
3243
3244impl ::std::fmt::Display for ExcludedUsersUpdateError {
3245    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
3246        match self {
3247            ExcludedUsersUpdateError::UsersNotInTeam => f.write_str("At least one of the users is not part of your team."),
3248            ExcludedUsersUpdateError::TooManyUsers => f.write_str("A maximum of 1000 users for each of addition/removal can be supplied."),
3249            _ => write!(f, "{:?}", *self),
3250        }
3251    }
3252}
3253
3254/// Excluded users update result.
3255#[derive(Debug, Clone, PartialEq, Eq)]
3256#[non_exhaustive] // structs may have more fields added in the future.
3257pub struct ExcludedUsersUpdateResult {
3258    /// Update status.
3259    pub status: ExcludedUsersUpdateStatus,
3260}
3261
3262impl ExcludedUsersUpdateResult {
3263    pub fn new(status: ExcludedUsersUpdateStatus) -> Self {
3264        ExcludedUsersUpdateResult {
3265            status,
3266        }
3267    }
3268}
3269
3270const EXCLUDED_USERS_UPDATE_RESULT_FIELDS: &[&str] = &["status"];
3271impl ExcludedUsersUpdateResult {
3272    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
3273        map: V,
3274    ) -> Result<ExcludedUsersUpdateResult, V::Error> {
3275        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
3276    }
3277
3278    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
3279        mut map: V,
3280        optional: bool,
3281    ) -> Result<Option<ExcludedUsersUpdateResult>, V::Error> {
3282        let mut field_status = None;
3283        let mut nothing = true;
3284        while let Some(key) = map.next_key::<&str>()? {
3285            nothing = false;
3286            match key {
3287                "status" => {
3288                    if field_status.is_some() {
3289                        return Err(::serde::de::Error::duplicate_field("status"));
3290                    }
3291                    field_status = Some(map.next_value()?);
3292                }
3293                _ => {
3294                    // unknown field allowed and ignored
3295                    map.next_value::<::serde_json::Value>()?;
3296                }
3297            }
3298        }
3299        if optional && nothing {
3300            return Ok(None);
3301        }
3302        let result = ExcludedUsersUpdateResult {
3303            status: field_status.ok_or_else(|| ::serde::de::Error::missing_field("status"))?,
3304        };
3305        Ok(Some(result))
3306    }
3307
3308    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
3309        &self,
3310        s: &mut S::SerializeStruct,
3311    ) -> Result<(), S::Error> {
3312        use serde::ser::SerializeStruct;
3313        s.serialize_field("status", &self.status)?;
3314        Ok(())
3315    }
3316}
3317
3318impl<'de> ::serde::de::Deserialize<'de> for ExcludedUsersUpdateResult {
3319    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3320        // struct deserializer
3321        use serde::de::{MapAccess, Visitor};
3322        struct StructVisitor;
3323        impl<'de> Visitor<'de> for StructVisitor {
3324            type Value = ExcludedUsersUpdateResult;
3325            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
3326                f.write_str("a ExcludedUsersUpdateResult struct")
3327            }
3328            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
3329                ExcludedUsersUpdateResult::internal_deserialize(map)
3330            }
3331        }
3332        deserializer.deserialize_struct("ExcludedUsersUpdateResult", EXCLUDED_USERS_UPDATE_RESULT_FIELDS, StructVisitor)
3333    }
3334}
3335
3336impl ::serde::ser::Serialize for ExcludedUsersUpdateResult {
3337    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
3338        // struct serializer
3339        use serde::ser::SerializeStruct;
3340        let mut s = serializer.serialize_struct("ExcludedUsersUpdateResult", 1)?;
3341        self.internal_serialize::<S>(&mut s)?;
3342        s.end()
3343    }
3344}
3345
3346/// Excluded users update operation status.
3347#[derive(Debug, Clone, PartialEq, Eq)]
3348#[non_exhaustive] // variants may be added in the future
3349pub enum ExcludedUsersUpdateStatus {
3350    /// Update successful.
3351    Success,
3352    /// Catch-all used for unrecognized values returned from the server. Encountering this value
3353    /// typically indicates that this SDK version is out of date.
3354    Other,
3355}
3356
3357impl<'de> ::serde::de::Deserialize<'de> for ExcludedUsersUpdateStatus {
3358    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3359        // union deserializer
3360        use serde::de::{self, MapAccess, Visitor};
3361        struct EnumVisitor;
3362        impl<'de> Visitor<'de> for EnumVisitor {
3363            type Value = ExcludedUsersUpdateStatus;
3364            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
3365                f.write_str("a ExcludedUsersUpdateStatus structure")
3366            }
3367            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
3368                let tag: &str = match map.next_key()? {
3369                    Some(".tag") => map.next_value()?,
3370                    _ => return Err(de::Error::missing_field(".tag"))
3371                };
3372                let value = match tag {
3373                    "success" => ExcludedUsersUpdateStatus::Success,
3374                    _ => ExcludedUsersUpdateStatus::Other,
3375                };
3376                crate::eat_json_fields(&mut map)?;
3377                Ok(value)
3378            }
3379        }
3380        const VARIANTS: &[&str] = &["success",
3381                                    "other"];
3382        deserializer.deserialize_struct("ExcludedUsersUpdateStatus", VARIANTS, EnumVisitor)
3383    }
3384}
3385
3386impl ::serde::ser::Serialize for ExcludedUsersUpdateStatus {
3387    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
3388        // union serializer
3389        use serde::ser::SerializeStruct;
3390        match self {
3391            ExcludedUsersUpdateStatus::Success => {
3392                // unit
3393                let mut s = serializer.serialize_struct("ExcludedUsersUpdateStatus", 1)?;
3394                s.serialize_field(".tag", "success")?;
3395                s.end()
3396            }
3397            ExcludedUsersUpdateStatus::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
3398        }
3399    }
3400}
3401
3402/// A set of features that a Dropbox Business account may support.
3403#[derive(Debug, Clone, PartialEq, Eq)]
3404#[non_exhaustive] // variants may be added in the future
3405pub enum Feature {
3406    /// The number of upload API calls allowed per month.
3407    UploadApiRateLimit,
3408    /// Does this team have a shared team root.
3409    HasTeamSharedDropbox,
3410    /// Does this team have file events.
3411    HasTeamFileEvents,
3412    /// Does this team have team selective sync enabled.
3413    HasTeamSelectiveSync,
3414    /// Catch-all used for unrecognized values returned from the server. Encountering this value
3415    /// typically indicates that this SDK version is out of date.
3416    Other,
3417}
3418
3419impl<'de> ::serde::de::Deserialize<'de> for Feature {
3420    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3421        // union deserializer
3422        use serde::de::{self, MapAccess, Visitor};
3423        struct EnumVisitor;
3424        impl<'de> Visitor<'de> for EnumVisitor {
3425            type Value = Feature;
3426            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
3427                f.write_str("a Feature structure")
3428            }
3429            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
3430                let tag: &str = match map.next_key()? {
3431                    Some(".tag") => map.next_value()?,
3432                    _ => return Err(de::Error::missing_field(".tag"))
3433                };
3434                let value = match tag {
3435                    "upload_api_rate_limit" => Feature::UploadApiRateLimit,
3436                    "has_team_shared_dropbox" => Feature::HasTeamSharedDropbox,
3437                    "has_team_file_events" => Feature::HasTeamFileEvents,
3438                    "has_team_selective_sync" => Feature::HasTeamSelectiveSync,
3439                    _ => Feature::Other,
3440                };
3441                crate::eat_json_fields(&mut map)?;
3442                Ok(value)
3443            }
3444        }
3445        const VARIANTS: &[&str] = &["upload_api_rate_limit",
3446                                    "has_team_shared_dropbox",
3447                                    "has_team_file_events",
3448                                    "has_team_selective_sync",
3449                                    "other"];
3450        deserializer.deserialize_struct("Feature", VARIANTS, EnumVisitor)
3451    }
3452}
3453
3454impl ::serde::ser::Serialize for Feature {
3455    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
3456        // union serializer
3457        use serde::ser::SerializeStruct;
3458        match self {
3459            Feature::UploadApiRateLimit => {
3460                // unit
3461                let mut s = serializer.serialize_struct("Feature", 1)?;
3462                s.serialize_field(".tag", "upload_api_rate_limit")?;
3463                s.end()
3464            }
3465            Feature::HasTeamSharedDropbox => {
3466                // unit
3467                let mut s = serializer.serialize_struct("Feature", 1)?;
3468                s.serialize_field(".tag", "has_team_shared_dropbox")?;
3469                s.end()
3470            }
3471            Feature::HasTeamFileEvents => {
3472                // unit
3473                let mut s = serializer.serialize_struct("Feature", 1)?;
3474                s.serialize_field(".tag", "has_team_file_events")?;
3475                s.end()
3476            }
3477            Feature::HasTeamSelectiveSync => {
3478                // unit
3479                let mut s = serializer.serialize_struct("Feature", 1)?;
3480                s.serialize_field(".tag", "has_team_selective_sync")?;
3481                s.end()
3482            }
3483            Feature::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
3484        }
3485    }
3486}
3487
3488/// The values correspond to entries in [`Feature`]. You may get different value according to your
3489/// Dropbox Business plan.
3490#[derive(Debug, Clone, PartialEq, Eq)]
3491#[non_exhaustive] // variants may be added in the future
3492pub enum FeatureValue {
3493    UploadApiRateLimit(UploadApiRateLimitValue),
3494    HasTeamSharedDropbox(HasTeamSharedDropboxValue),
3495    HasTeamFileEvents(HasTeamFileEventsValue),
3496    HasTeamSelectiveSync(HasTeamSelectiveSyncValue),
3497    /// Catch-all used for unrecognized values returned from the server. Encountering this value
3498    /// typically indicates that this SDK version is out of date.
3499    Other,
3500}
3501
3502impl<'de> ::serde::de::Deserialize<'de> for FeatureValue {
3503    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3504        // union deserializer
3505        use serde::de::{self, MapAccess, Visitor};
3506        struct EnumVisitor;
3507        impl<'de> Visitor<'de> for EnumVisitor {
3508            type Value = FeatureValue;
3509            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
3510                f.write_str("a FeatureValue structure")
3511            }
3512            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
3513                let tag: &str = match map.next_key()? {
3514                    Some(".tag") => map.next_value()?,
3515                    _ => return Err(de::Error::missing_field(".tag"))
3516                };
3517                let value = match tag {
3518                    "upload_api_rate_limit" => {
3519                        match map.next_key()? {
3520                            Some("upload_api_rate_limit") => FeatureValue::UploadApiRateLimit(map.next_value()?),
3521                            None => return Err(de::Error::missing_field("upload_api_rate_limit")),
3522                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
3523                        }
3524                    }
3525                    "has_team_shared_dropbox" => {
3526                        match map.next_key()? {
3527                            Some("has_team_shared_dropbox") => FeatureValue::HasTeamSharedDropbox(map.next_value()?),
3528                            None => return Err(de::Error::missing_field("has_team_shared_dropbox")),
3529                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
3530                        }
3531                    }
3532                    "has_team_file_events" => {
3533                        match map.next_key()? {
3534                            Some("has_team_file_events") => FeatureValue::HasTeamFileEvents(map.next_value()?),
3535                            None => return Err(de::Error::missing_field("has_team_file_events")),
3536                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
3537                        }
3538                    }
3539                    "has_team_selective_sync" => {
3540                        match map.next_key()? {
3541                            Some("has_team_selective_sync") => FeatureValue::HasTeamSelectiveSync(map.next_value()?),
3542                            None => return Err(de::Error::missing_field("has_team_selective_sync")),
3543                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
3544                        }
3545                    }
3546                    _ => FeatureValue::Other,
3547                };
3548                crate::eat_json_fields(&mut map)?;
3549                Ok(value)
3550            }
3551        }
3552        const VARIANTS: &[&str] = &["upload_api_rate_limit",
3553                                    "has_team_shared_dropbox",
3554                                    "has_team_file_events",
3555                                    "has_team_selective_sync",
3556                                    "other"];
3557        deserializer.deserialize_struct("FeatureValue", VARIANTS, EnumVisitor)
3558    }
3559}
3560
3561impl ::serde::ser::Serialize for FeatureValue {
3562    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
3563        // union serializer
3564        use serde::ser::SerializeStruct;
3565        match self {
3566            FeatureValue::UploadApiRateLimit(x) => {
3567                // union or polymporphic struct
3568                let mut s = serializer.serialize_struct("FeatureValue", 2)?;
3569                s.serialize_field(".tag", "upload_api_rate_limit")?;
3570                s.serialize_field("upload_api_rate_limit", x)?;
3571                s.end()
3572            }
3573            FeatureValue::HasTeamSharedDropbox(x) => {
3574                // union or polymporphic struct
3575                let mut s = serializer.serialize_struct("FeatureValue", 2)?;
3576                s.serialize_field(".tag", "has_team_shared_dropbox")?;
3577                s.serialize_field("has_team_shared_dropbox", x)?;
3578                s.end()
3579            }
3580            FeatureValue::HasTeamFileEvents(x) => {
3581                // union or polymporphic struct
3582                let mut s = serializer.serialize_struct("FeatureValue", 2)?;
3583                s.serialize_field(".tag", "has_team_file_events")?;
3584                s.serialize_field("has_team_file_events", x)?;
3585                s.end()
3586            }
3587            FeatureValue::HasTeamSelectiveSync(x) => {
3588                // union or polymporphic struct
3589                let mut s = serializer.serialize_struct("FeatureValue", 2)?;
3590                s.serialize_field(".tag", "has_team_selective_sync")?;
3591                s.serialize_field("has_team_selective_sync", x)?;
3592                s.end()
3593            }
3594            FeatureValue::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
3595        }
3596    }
3597}
3598
3599#[derive(Debug, Clone, PartialEq, Eq)]
3600#[non_exhaustive] // structs may have more fields added in the future.
3601pub struct FeaturesGetValuesBatchArg {
3602    /// A list of features in [`Feature`]. If the list is empty, this route will return
3603    /// [`FeaturesGetValuesBatchError`].
3604    pub features: Vec<Feature>,
3605}
3606
3607impl FeaturesGetValuesBatchArg {
3608    pub fn new(features: Vec<Feature>) -> Self {
3609        FeaturesGetValuesBatchArg {
3610            features,
3611        }
3612    }
3613}
3614
3615const FEATURES_GET_VALUES_BATCH_ARG_FIELDS: &[&str] = &["features"];
3616impl FeaturesGetValuesBatchArg {
3617    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
3618        map: V,
3619    ) -> Result<FeaturesGetValuesBatchArg, V::Error> {
3620        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
3621    }
3622
3623    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
3624        mut map: V,
3625        optional: bool,
3626    ) -> Result<Option<FeaturesGetValuesBatchArg>, V::Error> {
3627        let mut field_features = None;
3628        let mut nothing = true;
3629        while let Some(key) = map.next_key::<&str>()? {
3630            nothing = false;
3631            match key {
3632                "features" => {
3633                    if field_features.is_some() {
3634                        return Err(::serde::de::Error::duplicate_field("features"));
3635                    }
3636                    field_features = Some(map.next_value()?);
3637                }
3638                _ => {
3639                    // unknown field allowed and ignored
3640                    map.next_value::<::serde_json::Value>()?;
3641                }
3642            }
3643        }
3644        if optional && nothing {
3645            return Ok(None);
3646        }
3647        let result = FeaturesGetValuesBatchArg {
3648            features: field_features.ok_or_else(|| ::serde::de::Error::missing_field("features"))?,
3649        };
3650        Ok(Some(result))
3651    }
3652
3653    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
3654        &self,
3655        s: &mut S::SerializeStruct,
3656    ) -> Result<(), S::Error> {
3657        use serde::ser::SerializeStruct;
3658        s.serialize_field("features", &self.features)?;
3659        Ok(())
3660    }
3661}
3662
3663impl<'de> ::serde::de::Deserialize<'de> for FeaturesGetValuesBatchArg {
3664    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3665        // struct deserializer
3666        use serde::de::{MapAccess, Visitor};
3667        struct StructVisitor;
3668        impl<'de> Visitor<'de> for StructVisitor {
3669            type Value = FeaturesGetValuesBatchArg;
3670            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
3671                f.write_str("a FeaturesGetValuesBatchArg struct")
3672            }
3673            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
3674                FeaturesGetValuesBatchArg::internal_deserialize(map)
3675            }
3676        }
3677        deserializer.deserialize_struct("FeaturesGetValuesBatchArg", FEATURES_GET_VALUES_BATCH_ARG_FIELDS, StructVisitor)
3678    }
3679}
3680
3681impl ::serde::ser::Serialize for FeaturesGetValuesBatchArg {
3682    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
3683        // struct serializer
3684        use serde::ser::SerializeStruct;
3685        let mut s = serializer.serialize_struct("FeaturesGetValuesBatchArg", 1)?;
3686        self.internal_serialize::<S>(&mut s)?;
3687        s.end()
3688    }
3689}
3690
3691#[derive(Debug, Clone, PartialEq, Eq)]
3692#[non_exhaustive] // variants may be added in the future
3693pub enum FeaturesGetValuesBatchError {
3694    /// At least one [`Feature`] must be included in the [`FeaturesGetValuesBatchArg`].features
3695    /// list.
3696    EmptyFeaturesList,
3697    /// Catch-all used for unrecognized values returned from the server. Encountering this value
3698    /// typically indicates that this SDK version is out of date.
3699    Other,
3700}
3701
3702impl<'de> ::serde::de::Deserialize<'de> for FeaturesGetValuesBatchError {
3703    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3704        // union deserializer
3705        use serde::de::{self, MapAccess, Visitor};
3706        struct EnumVisitor;
3707        impl<'de> Visitor<'de> for EnumVisitor {
3708            type Value = FeaturesGetValuesBatchError;
3709            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
3710                f.write_str("a FeaturesGetValuesBatchError structure")
3711            }
3712            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
3713                let tag: &str = match map.next_key()? {
3714                    Some(".tag") => map.next_value()?,
3715                    _ => return Err(de::Error::missing_field(".tag"))
3716                };
3717                let value = match tag {
3718                    "empty_features_list" => FeaturesGetValuesBatchError::EmptyFeaturesList,
3719                    _ => FeaturesGetValuesBatchError::Other,
3720                };
3721                crate::eat_json_fields(&mut map)?;
3722                Ok(value)
3723            }
3724        }
3725        const VARIANTS: &[&str] = &["empty_features_list",
3726                                    "other"];
3727        deserializer.deserialize_struct("FeaturesGetValuesBatchError", VARIANTS, EnumVisitor)
3728    }
3729}
3730
3731impl ::serde::ser::Serialize for FeaturesGetValuesBatchError {
3732    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
3733        // union serializer
3734        use serde::ser::SerializeStruct;
3735        match self {
3736            FeaturesGetValuesBatchError::EmptyFeaturesList => {
3737                // unit
3738                let mut s = serializer.serialize_struct("FeaturesGetValuesBatchError", 1)?;
3739                s.serialize_field(".tag", "empty_features_list")?;
3740                s.end()
3741            }
3742            FeaturesGetValuesBatchError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
3743        }
3744    }
3745}
3746
3747impl ::std::error::Error for FeaturesGetValuesBatchError {
3748}
3749
3750impl ::std::fmt::Display for FeaturesGetValuesBatchError {
3751    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
3752        write!(f, "{:?}", *self)
3753    }
3754}
3755
3756#[derive(Debug, Clone, PartialEq, Eq)]
3757#[non_exhaustive] // structs may have more fields added in the future.
3758pub struct FeaturesGetValuesBatchResult {
3759    pub values: Vec<FeatureValue>,
3760}
3761
3762impl FeaturesGetValuesBatchResult {
3763    pub fn new(values: Vec<FeatureValue>) -> Self {
3764        FeaturesGetValuesBatchResult {
3765            values,
3766        }
3767    }
3768}
3769
3770const FEATURES_GET_VALUES_BATCH_RESULT_FIELDS: &[&str] = &["values"];
3771impl FeaturesGetValuesBatchResult {
3772    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
3773        map: V,
3774    ) -> Result<FeaturesGetValuesBatchResult, V::Error> {
3775        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
3776    }
3777
3778    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
3779        mut map: V,
3780        optional: bool,
3781    ) -> Result<Option<FeaturesGetValuesBatchResult>, V::Error> {
3782        let mut field_values = None;
3783        let mut nothing = true;
3784        while let Some(key) = map.next_key::<&str>()? {
3785            nothing = false;
3786            match key {
3787                "values" => {
3788                    if field_values.is_some() {
3789                        return Err(::serde::de::Error::duplicate_field("values"));
3790                    }
3791                    field_values = Some(map.next_value()?);
3792                }
3793                _ => {
3794                    // unknown field allowed and ignored
3795                    map.next_value::<::serde_json::Value>()?;
3796                }
3797            }
3798        }
3799        if optional && nothing {
3800            return Ok(None);
3801        }
3802        let result = FeaturesGetValuesBatchResult {
3803            values: field_values.ok_or_else(|| ::serde::de::Error::missing_field("values"))?,
3804        };
3805        Ok(Some(result))
3806    }
3807
3808    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
3809        &self,
3810        s: &mut S::SerializeStruct,
3811    ) -> Result<(), S::Error> {
3812        use serde::ser::SerializeStruct;
3813        s.serialize_field("values", &self.values)?;
3814        Ok(())
3815    }
3816}
3817
3818impl<'de> ::serde::de::Deserialize<'de> for FeaturesGetValuesBatchResult {
3819    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3820        // struct deserializer
3821        use serde::de::{MapAccess, Visitor};
3822        struct StructVisitor;
3823        impl<'de> Visitor<'de> for StructVisitor {
3824            type Value = FeaturesGetValuesBatchResult;
3825            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
3826                f.write_str("a FeaturesGetValuesBatchResult struct")
3827            }
3828            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
3829                FeaturesGetValuesBatchResult::internal_deserialize(map)
3830            }
3831        }
3832        deserializer.deserialize_struct("FeaturesGetValuesBatchResult", FEATURES_GET_VALUES_BATCH_RESULT_FIELDS, StructVisitor)
3833    }
3834}
3835
3836impl ::serde::ser::Serialize for FeaturesGetValuesBatchResult {
3837    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
3838        // struct serializer
3839        use serde::ser::SerializeStruct;
3840        let mut s = serializer.serialize_struct("FeaturesGetValuesBatchResult", 1)?;
3841        self.internal_serialize::<S>(&mut s)?;
3842        s.end()
3843    }
3844}
3845
3846/// Activity Report Result. Each of the items in the storage report is an array of values, one value
3847/// per day. If there is no data for a day, then the value will be None.
3848#[derive(Debug, Clone, PartialEq, Eq)]
3849#[non_exhaustive] // structs may have more fields added in the future.
3850pub struct GetActivityReport {
3851    /// First date present in the results as 'YYYY-MM-DD' or None.
3852    pub start_date: String,
3853    /// Array of total number of adds by team members.
3854    pub adds: NumberPerDay,
3855    /// Array of number of edits by team members. If the same user edits the same file multiple
3856    /// times this is counted as a single edit.
3857    pub edits: NumberPerDay,
3858    /// Array of total number of deletes by team members.
3859    pub deletes: NumberPerDay,
3860    /// Array of the number of users who have been active in the last 28 days.
3861    pub active_users_28_day: NumberPerDay,
3862    /// Array of the number of users who have been active in the last week.
3863    pub active_users_7_day: NumberPerDay,
3864    /// Array of the number of users who have been active in the last day.
3865    pub active_users_1_day: NumberPerDay,
3866    /// Array of the number of shared folders with some activity in the last 28 days.
3867    pub active_shared_folders_28_day: NumberPerDay,
3868    /// Array of the number of shared folders with some activity in the last week.
3869    pub active_shared_folders_7_day: NumberPerDay,
3870    /// Array of the number of shared folders with some activity in the last day.
3871    pub active_shared_folders_1_day: NumberPerDay,
3872    /// Array of the number of shared links created.
3873    pub shared_links_created: NumberPerDay,
3874    /// Array of the number of views by team users to shared links created by the team.
3875    pub shared_links_viewed_by_team: NumberPerDay,
3876    /// Array of the number of views by users outside of the team to shared links created by the
3877    /// team.
3878    pub shared_links_viewed_by_outside_user: NumberPerDay,
3879    /// Array of the number of views by non-logged-in users to shared links created by the team.
3880    pub shared_links_viewed_by_not_logged_in: NumberPerDay,
3881    /// Array of the total number of views to shared links created by the team.
3882    pub shared_links_viewed_total: NumberPerDay,
3883}
3884
3885impl GetActivityReport {
3886    pub fn new(
3887        start_date: String,
3888        adds: NumberPerDay,
3889        edits: NumberPerDay,
3890        deletes: NumberPerDay,
3891        active_users_28_day: NumberPerDay,
3892        active_users_7_day: NumberPerDay,
3893        active_users_1_day: NumberPerDay,
3894        active_shared_folders_28_day: NumberPerDay,
3895        active_shared_folders_7_day: NumberPerDay,
3896        active_shared_folders_1_day: NumberPerDay,
3897        shared_links_created: NumberPerDay,
3898        shared_links_viewed_by_team: NumberPerDay,
3899        shared_links_viewed_by_outside_user: NumberPerDay,
3900        shared_links_viewed_by_not_logged_in: NumberPerDay,
3901        shared_links_viewed_total: NumberPerDay,
3902    ) -> Self {
3903        GetActivityReport {
3904            start_date,
3905            adds,
3906            edits,
3907            deletes,
3908            active_users_28_day,
3909            active_users_7_day,
3910            active_users_1_day,
3911            active_shared_folders_28_day,
3912            active_shared_folders_7_day,
3913            active_shared_folders_1_day,
3914            shared_links_created,
3915            shared_links_viewed_by_team,
3916            shared_links_viewed_by_outside_user,
3917            shared_links_viewed_by_not_logged_in,
3918            shared_links_viewed_total,
3919        }
3920    }
3921}
3922
3923const GET_ACTIVITY_REPORT_FIELDS: &[&str] = &["start_date",
3924                                              "adds",
3925                                              "edits",
3926                                              "deletes",
3927                                              "active_users_28_day",
3928                                              "active_users_7_day",
3929                                              "active_users_1_day",
3930                                              "active_shared_folders_28_day",
3931                                              "active_shared_folders_7_day",
3932                                              "active_shared_folders_1_day",
3933                                              "shared_links_created",
3934                                              "shared_links_viewed_by_team",
3935                                              "shared_links_viewed_by_outside_user",
3936                                              "shared_links_viewed_by_not_logged_in",
3937                                              "shared_links_viewed_total"];
3938impl GetActivityReport {
3939    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
3940        map: V,
3941    ) -> Result<GetActivityReport, V::Error> {
3942        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
3943    }
3944
3945    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
3946        mut map: V,
3947        optional: bool,
3948    ) -> Result<Option<GetActivityReport>, V::Error> {
3949        let mut field_start_date = None;
3950        let mut field_adds = None;
3951        let mut field_edits = None;
3952        let mut field_deletes = None;
3953        let mut field_active_users_28_day = None;
3954        let mut field_active_users_7_day = None;
3955        let mut field_active_users_1_day = None;
3956        let mut field_active_shared_folders_28_day = None;
3957        let mut field_active_shared_folders_7_day = None;
3958        let mut field_active_shared_folders_1_day = None;
3959        let mut field_shared_links_created = None;
3960        let mut field_shared_links_viewed_by_team = None;
3961        let mut field_shared_links_viewed_by_outside_user = None;
3962        let mut field_shared_links_viewed_by_not_logged_in = None;
3963        let mut field_shared_links_viewed_total = None;
3964        let mut nothing = true;
3965        while let Some(key) = map.next_key::<&str>()? {
3966            nothing = false;
3967            match key {
3968                "start_date" => {
3969                    if field_start_date.is_some() {
3970                        return Err(::serde::de::Error::duplicate_field("start_date"));
3971                    }
3972                    field_start_date = Some(map.next_value()?);
3973                }
3974                "adds" => {
3975                    if field_adds.is_some() {
3976                        return Err(::serde::de::Error::duplicate_field("adds"));
3977                    }
3978                    field_adds = Some(map.next_value()?);
3979                }
3980                "edits" => {
3981                    if field_edits.is_some() {
3982                        return Err(::serde::de::Error::duplicate_field("edits"));
3983                    }
3984                    field_edits = Some(map.next_value()?);
3985                }
3986                "deletes" => {
3987                    if field_deletes.is_some() {
3988                        return Err(::serde::de::Error::duplicate_field("deletes"));
3989                    }
3990                    field_deletes = Some(map.next_value()?);
3991                }
3992                "active_users_28_day" => {
3993                    if field_active_users_28_day.is_some() {
3994                        return Err(::serde::de::Error::duplicate_field("active_users_28_day"));
3995                    }
3996                    field_active_users_28_day = Some(map.next_value()?);
3997                }
3998                "active_users_7_day" => {
3999                    if field_active_users_7_day.is_some() {
4000                        return Err(::serde::de::Error::duplicate_field("active_users_7_day"));
4001                    }
4002                    field_active_users_7_day = Some(map.next_value()?);
4003                }
4004                "active_users_1_day" => {
4005                    if field_active_users_1_day.is_some() {
4006                        return Err(::serde::de::Error::duplicate_field("active_users_1_day"));
4007                    }
4008                    field_active_users_1_day = Some(map.next_value()?);
4009                }
4010                "active_shared_folders_28_day" => {
4011                    if field_active_shared_folders_28_day.is_some() {
4012                        return Err(::serde::de::Error::duplicate_field("active_shared_folders_28_day"));
4013                    }
4014                    field_active_shared_folders_28_day = Some(map.next_value()?);
4015                }
4016                "active_shared_folders_7_day" => {
4017                    if field_active_shared_folders_7_day.is_some() {
4018                        return Err(::serde::de::Error::duplicate_field("active_shared_folders_7_day"));
4019                    }
4020                    field_active_shared_folders_7_day = Some(map.next_value()?);
4021                }
4022                "active_shared_folders_1_day" => {
4023                    if field_active_shared_folders_1_day.is_some() {
4024                        return Err(::serde::de::Error::duplicate_field("active_shared_folders_1_day"));
4025                    }
4026                    field_active_shared_folders_1_day = Some(map.next_value()?);
4027                }
4028                "shared_links_created" => {
4029                    if field_shared_links_created.is_some() {
4030                        return Err(::serde::de::Error::duplicate_field("shared_links_created"));
4031                    }
4032                    field_shared_links_created = Some(map.next_value()?);
4033                }
4034                "shared_links_viewed_by_team" => {
4035                    if field_shared_links_viewed_by_team.is_some() {
4036                        return Err(::serde::de::Error::duplicate_field("shared_links_viewed_by_team"));
4037                    }
4038                    field_shared_links_viewed_by_team = Some(map.next_value()?);
4039                }
4040                "shared_links_viewed_by_outside_user" => {
4041                    if field_shared_links_viewed_by_outside_user.is_some() {
4042                        return Err(::serde::de::Error::duplicate_field("shared_links_viewed_by_outside_user"));
4043                    }
4044                    field_shared_links_viewed_by_outside_user = Some(map.next_value()?);
4045                }
4046                "shared_links_viewed_by_not_logged_in" => {
4047                    if field_shared_links_viewed_by_not_logged_in.is_some() {
4048                        return Err(::serde::de::Error::duplicate_field("shared_links_viewed_by_not_logged_in"));
4049                    }
4050                    field_shared_links_viewed_by_not_logged_in = Some(map.next_value()?);
4051                }
4052                "shared_links_viewed_total" => {
4053                    if field_shared_links_viewed_total.is_some() {
4054                        return Err(::serde::de::Error::duplicate_field("shared_links_viewed_total"));
4055                    }
4056                    field_shared_links_viewed_total = Some(map.next_value()?);
4057                }
4058                _ => {
4059                    // unknown field allowed and ignored
4060                    map.next_value::<::serde_json::Value>()?;
4061                }
4062            }
4063        }
4064        if optional && nothing {
4065            return Ok(None);
4066        }
4067        let result = GetActivityReport {
4068            start_date: field_start_date.ok_or_else(|| ::serde::de::Error::missing_field("start_date"))?,
4069            adds: field_adds.ok_or_else(|| ::serde::de::Error::missing_field("adds"))?,
4070            edits: field_edits.ok_or_else(|| ::serde::de::Error::missing_field("edits"))?,
4071            deletes: field_deletes.ok_or_else(|| ::serde::de::Error::missing_field("deletes"))?,
4072            active_users_28_day: field_active_users_28_day.ok_or_else(|| ::serde::de::Error::missing_field("active_users_28_day"))?,
4073            active_users_7_day: field_active_users_7_day.ok_or_else(|| ::serde::de::Error::missing_field("active_users_7_day"))?,
4074            active_users_1_day: field_active_users_1_day.ok_or_else(|| ::serde::de::Error::missing_field("active_users_1_day"))?,
4075            active_shared_folders_28_day: field_active_shared_folders_28_day.ok_or_else(|| ::serde::de::Error::missing_field("active_shared_folders_28_day"))?,
4076            active_shared_folders_7_day: field_active_shared_folders_7_day.ok_or_else(|| ::serde::de::Error::missing_field("active_shared_folders_7_day"))?,
4077            active_shared_folders_1_day: field_active_shared_folders_1_day.ok_or_else(|| ::serde::de::Error::missing_field("active_shared_folders_1_day"))?,
4078            shared_links_created: field_shared_links_created.ok_or_else(|| ::serde::de::Error::missing_field("shared_links_created"))?,
4079            shared_links_viewed_by_team: field_shared_links_viewed_by_team.ok_or_else(|| ::serde::de::Error::missing_field("shared_links_viewed_by_team"))?,
4080            shared_links_viewed_by_outside_user: field_shared_links_viewed_by_outside_user.ok_or_else(|| ::serde::de::Error::missing_field("shared_links_viewed_by_outside_user"))?,
4081            shared_links_viewed_by_not_logged_in: field_shared_links_viewed_by_not_logged_in.ok_or_else(|| ::serde::de::Error::missing_field("shared_links_viewed_by_not_logged_in"))?,
4082            shared_links_viewed_total: field_shared_links_viewed_total.ok_or_else(|| ::serde::de::Error::missing_field("shared_links_viewed_total"))?,
4083        };
4084        Ok(Some(result))
4085    }
4086
4087    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
4088        &self,
4089        s: &mut S::SerializeStruct,
4090    ) -> Result<(), S::Error> {
4091        use serde::ser::SerializeStruct;
4092        s.serialize_field("start_date", &self.start_date)?;
4093        s.serialize_field("adds", &self.adds)?;
4094        s.serialize_field("edits", &self.edits)?;
4095        s.serialize_field("deletes", &self.deletes)?;
4096        s.serialize_field("active_users_28_day", &self.active_users_28_day)?;
4097        s.serialize_field("active_users_7_day", &self.active_users_7_day)?;
4098        s.serialize_field("active_users_1_day", &self.active_users_1_day)?;
4099        s.serialize_field("active_shared_folders_28_day", &self.active_shared_folders_28_day)?;
4100        s.serialize_field("active_shared_folders_7_day", &self.active_shared_folders_7_day)?;
4101        s.serialize_field("active_shared_folders_1_day", &self.active_shared_folders_1_day)?;
4102        s.serialize_field("shared_links_created", &self.shared_links_created)?;
4103        s.serialize_field("shared_links_viewed_by_team", &self.shared_links_viewed_by_team)?;
4104        s.serialize_field("shared_links_viewed_by_outside_user", &self.shared_links_viewed_by_outside_user)?;
4105        s.serialize_field("shared_links_viewed_by_not_logged_in", &self.shared_links_viewed_by_not_logged_in)?;
4106        s.serialize_field("shared_links_viewed_total", &self.shared_links_viewed_total)?;
4107        Ok(())
4108    }
4109}
4110
4111impl<'de> ::serde::de::Deserialize<'de> for GetActivityReport {
4112    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4113        // struct deserializer
4114        use serde::de::{MapAccess, Visitor};
4115        struct StructVisitor;
4116        impl<'de> Visitor<'de> for StructVisitor {
4117            type Value = GetActivityReport;
4118            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
4119                f.write_str("a GetActivityReport struct")
4120            }
4121            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
4122                GetActivityReport::internal_deserialize(map)
4123            }
4124        }
4125        deserializer.deserialize_struct("GetActivityReport", GET_ACTIVITY_REPORT_FIELDS, StructVisitor)
4126    }
4127}
4128
4129impl ::serde::ser::Serialize for GetActivityReport {
4130    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
4131        // struct serializer
4132        use serde::ser::SerializeStruct;
4133        let mut s = serializer.serialize_struct("GetActivityReport", 15)?;
4134        self.internal_serialize::<S>(&mut s)?;
4135        s.end()
4136    }
4137}
4138
4139// struct extends BaseDfbReport
4140impl From<GetActivityReport> for BaseDfbReport {
4141    fn from(subtype: GetActivityReport) -> Self {
4142        Self {
4143            start_date: subtype.start_date,
4144        }
4145    }
4146}
4147/// Devices Report Result. Contains subsections for different time ranges of activity. Each of the
4148/// items in each subsection of the storage report is an array of values, one value per day. If
4149/// there is no data for a day, then the value will be None.
4150#[derive(Debug, Clone, PartialEq, Eq)]
4151#[non_exhaustive] // structs may have more fields added in the future.
4152pub struct GetDevicesReport {
4153    /// First date present in the results as 'YYYY-MM-DD' or None.
4154    pub start_date: String,
4155    /// Report of the number of devices active in the last day.
4156    pub active_1_day: DevicesActive,
4157    /// Report of the number of devices active in the last 7 days.
4158    pub active_7_day: DevicesActive,
4159    /// Report of the number of devices active in the last 28 days.
4160    pub active_28_day: DevicesActive,
4161}
4162
4163impl GetDevicesReport {
4164    pub fn new(
4165        start_date: String,
4166        active_1_day: DevicesActive,
4167        active_7_day: DevicesActive,
4168        active_28_day: DevicesActive,
4169    ) -> Self {
4170        GetDevicesReport {
4171            start_date,
4172            active_1_day,
4173            active_7_day,
4174            active_28_day,
4175        }
4176    }
4177}
4178
4179const GET_DEVICES_REPORT_FIELDS: &[&str] = &["start_date",
4180                                             "active_1_day",
4181                                             "active_7_day",
4182                                             "active_28_day"];
4183impl GetDevicesReport {
4184    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
4185        map: V,
4186    ) -> Result<GetDevicesReport, V::Error> {
4187        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
4188    }
4189
4190    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
4191        mut map: V,
4192        optional: bool,
4193    ) -> Result<Option<GetDevicesReport>, V::Error> {
4194        let mut field_start_date = None;
4195        let mut field_active_1_day = None;
4196        let mut field_active_7_day = None;
4197        let mut field_active_28_day = None;
4198        let mut nothing = true;
4199        while let Some(key) = map.next_key::<&str>()? {
4200            nothing = false;
4201            match key {
4202                "start_date" => {
4203                    if field_start_date.is_some() {
4204                        return Err(::serde::de::Error::duplicate_field("start_date"));
4205                    }
4206                    field_start_date = Some(map.next_value()?);
4207                }
4208                "active_1_day" => {
4209                    if field_active_1_day.is_some() {
4210                        return Err(::serde::de::Error::duplicate_field("active_1_day"));
4211                    }
4212                    field_active_1_day = Some(map.next_value()?);
4213                }
4214                "active_7_day" => {
4215                    if field_active_7_day.is_some() {
4216                        return Err(::serde::de::Error::duplicate_field("active_7_day"));
4217                    }
4218                    field_active_7_day = Some(map.next_value()?);
4219                }
4220                "active_28_day" => {
4221                    if field_active_28_day.is_some() {
4222                        return Err(::serde::de::Error::duplicate_field("active_28_day"));
4223                    }
4224                    field_active_28_day = Some(map.next_value()?);
4225                }
4226                _ => {
4227                    // unknown field allowed and ignored
4228                    map.next_value::<::serde_json::Value>()?;
4229                }
4230            }
4231        }
4232        if optional && nothing {
4233            return Ok(None);
4234        }
4235        let result = GetDevicesReport {
4236            start_date: field_start_date.ok_or_else(|| ::serde::de::Error::missing_field("start_date"))?,
4237            active_1_day: field_active_1_day.ok_or_else(|| ::serde::de::Error::missing_field("active_1_day"))?,
4238            active_7_day: field_active_7_day.ok_or_else(|| ::serde::de::Error::missing_field("active_7_day"))?,
4239            active_28_day: field_active_28_day.ok_or_else(|| ::serde::de::Error::missing_field("active_28_day"))?,
4240        };
4241        Ok(Some(result))
4242    }
4243
4244    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
4245        &self,
4246        s: &mut S::SerializeStruct,
4247    ) -> Result<(), S::Error> {
4248        use serde::ser::SerializeStruct;
4249        s.serialize_field("start_date", &self.start_date)?;
4250        s.serialize_field("active_1_day", &self.active_1_day)?;
4251        s.serialize_field("active_7_day", &self.active_7_day)?;
4252        s.serialize_field("active_28_day", &self.active_28_day)?;
4253        Ok(())
4254    }
4255}
4256
4257impl<'de> ::serde::de::Deserialize<'de> for GetDevicesReport {
4258    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4259        // struct deserializer
4260        use serde::de::{MapAccess, Visitor};
4261        struct StructVisitor;
4262        impl<'de> Visitor<'de> for StructVisitor {
4263            type Value = GetDevicesReport;
4264            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
4265                f.write_str("a GetDevicesReport struct")
4266            }
4267            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
4268                GetDevicesReport::internal_deserialize(map)
4269            }
4270        }
4271        deserializer.deserialize_struct("GetDevicesReport", GET_DEVICES_REPORT_FIELDS, StructVisitor)
4272    }
4273}
4274
4275impl ::serde::ser::Serialize for GetDevicesReport {
4276    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
4277        // struct serializer
4278        use serde::ser::SerializeStruct;
4279        let mut s = serializer.serialize_struct("GetDevicesReport", 4)?;
4280        self.internal_serialize::<S>(&mut s)?;
4281        s.end()
4282    }
4283}
4284
4285// struct extends BaseDfbReport
4286impl From<GetDevicesReport> for BaseDfbReport {
4287    fn from(subtype: GetDevicesReport) -> Self {
4288        Self {
4289            start_date: subtype.start_date,
4290        }
4291    }
4292}
4293/// Membership Report Result. Each of the items in the storage report is an array of values, one
4294/// value per day. If there is no data for a day, then the value will be None.
4295#[derive(Debug, Clone, PartialEq, Eq)]
4296#[non_exhaustive] // structs may have more fields added in the future.
4297pub struct GetMembershipReport {
4298    /// First date present in the results as 'YYYY-MM-DD' or None.
4299    pub start_date: String,
4300    /// Team size, for each day.
4301    pub team_size: NumberPerDay,
4302    /// The number of pending invites to the team, for each day.
4303    pub pending_invites: NumberPerDay,
4304    /// The number of members that joined the team, for each day.
4305    pub members_joined: NumberPerDay,
4306    /// The number of suspended team members, for each day.
4307    pub suspended_members: NumberPerDay,
4308    /// The total number of licenses the team has, for each day.
4309    pub licenses: NumberPerDay,
4310}
4311
4312impl GetMembershipReport {
4313    pub fn new(
4314        start_date: String,
4315        team_size: NumberPerDay,
4316        pending_invites: NumberPerDay,
4317        members_joined: NumberPerDay,
4318        suspended_members: NumberPerDay,
4319        licenses: NumberPerDay,
4320    ) -> Self {
4321        GetMembershipReport {
4322            start_date,
4323            team_size,
4324            pending_invites,
4325            members_joined,
4326            suspended_members,
4327            licenses,
4328        }
4329    }
4330}
4331
4332const GET_MEMBERSHIP_REPORT_FIELDS: &[&str] = &["start_date",
4333                                                "team_size",
4334                                                "pending_invites",
4335                                                "members_joined",
4336                                                "suspended_members",
4337                                                "licenses"];
4338impl GetMembershipReport {
4339    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
4340        map: V,
4341    ) -> Result<GetMembershipReport, V::Error> {
4342        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
4343    }
4344
4345    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
4346        mut map: V,
4347        optional: bool,
4348    ) -> Result<Option<GetMembershipReport>, V::Error> {
4349        let mut field_start_date = None;
4350        let mut field_team_size = None;
4351        let mut field_pending_invites = None;
4352        let mut field_members_joined = None;
4353        let mut field_suspended_members = None;
4354        let mut field_licenses = None;
4355        let mut nothing = true;
4356        while let Some(key) = map.next_key::<&str>()? {
4357            nothing = false;
4358            match key {
4359                "start_date" => {
4360                    if field_start_date.is_some() {
4361                        return Err(::serde::de::Error::duplicate_field("start_date"));
4362                    }
4363                    field_start_date = Some(map.next_value()?);
4364                }
4365                "team_size" => {
4366                    if field_team_size.is_some() {
4367                        return Err(::serde::de::Error::duplicate_field("team_size"));
4368                    }
4369                    field_team_size = Some(map.next_value()?);
4370                }
4371                "pending_invites" => {
4372                    if field_pending_invites.is_some() {
4373                        return Err(::serde::de::Error::duplicate_field("pending_invites"));
4374                    }
4375                    field_pending_invites = Some(map.next_value()?);
4376                }
4377                "members_joined" => {
4378                    if field_members_joined.is_some() {
4379                        return Err(::serde::de::Error::duplicate_field("members_joined"));
4380                    }
4381                    field_members_joined = Some(map.next_value()?);
4382                }
4383                "suspended_members" => {
4384                    if field_suspended_members.is_some() {
4385                        return Err(::serde::de::Error::duplicate_field("suspended_members"));
4386                    }
4387                    field_suspended_members = Some(map.next_value()?);
4388                }
4389                "licenses" => {
4390                    if field_licenses.is_some() {
4391                        return Err(::serde::de::Error::duplicate_field("licenses"));
4392                    }
4393                    field_licenses = Some(map.next_value()?);
4394                }
4395                _ => {
4396                    // unknown field allowed and ignored
4397                    map.next_value::<::serde_json::Value>()?;
4398                }
4399            }
4400        }
4401        if optional && nothing {
4402            return Ok(None);
4403        }
4404        let result = GetMembershipReport {
4405            start_date: field_start_date.ok_or_else(|| ::serde::de::Error::missing_field("start_date"))?,
4406            team_size: field_team_size.ok_or_else(|| ::serde::de::Error::missing_field("team_size"))?,
4407            pending_invites: field_pending_invites.ok_or_else(|| ::serde::de::Error::missing_field("pending_invites"))?,
4408            members_joined: field_members_joined.ok_or_else(|| ::serde::de::Error::missing_field("members_joined"))?,
4409            suspended_members: field_suspended_members.ok_or_else(|| ::serde::de::Error::missing_field("suspended_members"))?,
4410            licenses: field_licenses.ok_or_else(|| ::serde::de::Error::missing_field("licenses"))?,
4411        };
4412        Ok(Some(result))
4413    }
4414
4415    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
4416        &self,
4417        s: &mut S::SerializeStruct,
4418    ) -> Result<(), S::Error> {
4419        use serde::ser::SerializeStruct;
4420        s.serialize_field("start_date", &self.start_date)?;
4421        s.serialize_field("team_size", &self.team_size)?;
4422        s.serialize_field("pending_invites", &self.pending_invites)?;
4423        s.serialize_field("members_joined", &self.members_joined)?;
4424        s.serialize_field("suspended_members", &self.suspended_members)?;
4425        s.serialize_field("licenses", &self.licenses)?;
4426        Ok(())
4427    }
4428}
4429
4430impl<'de> ::serde::de::Deserialize<'de> for GetMembershipReport {
4431    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4432        // struct deserializer
4433        use serde::de::{MapAccess, Visitor};
4434        struct StructVisitor;
4435        impl<'de> Visitor<'de> for StructVisitor {
4436            type Value = GetMembershipReport;
4437            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
4438                f.write_str("a GetMembershipReport struct")
4439            }
4440            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
4441                GetMembershipReport::internal_deserialize(map)
4442            }
4443        }
4444        deserializer.deserialize_struct("GetMembershipReport", GET_MEMBERSHIP_REPORT_FIELDS, StructVisitor)
4445    }
4446}
4447
4448impl ::serde::ser::Serialize for GetMembershipReport {
4449    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
4450        // struct serializer
4451        use serde::ser::SerializeStruct;
4452        let mut s = serializer.serialize_struct("GetMembershipReport", 6)?;
4453        self.internal_serialize::<S>(&mut s)?;
4454        s.end()
4455    }
4456}
4457
4458// struct extends BaseDfbReport
4459impl From<GetMembershipReport> for BaseDfbReport {
4460    fn from(subtype: GetMembershipReport) -> Self {
4461        Self {
4462            start_date: subtype.start_date,
4463        }
4464    }
4465}
4466/// Storage Report Result. Each of the items in the storage report is an array of values, one value
4467/// per day. If there is no data for a day, then the value will be None.
4468#[derive(Debug, Clone, PartialEq, Eq)]
4469#[non_exhaustive] // structs may have more fields added in the future.
4470pub struct GetStorageReport {
4471    /// First date present in the results as 'YYYY-MM-DD' or None.
4472    pub start_date: String,
4473    /// Sum of the shared, unshared, and datastore usages, for each day.
4474    pub total_usage: NumberPerDay,
4475    /// Array of the combined size (bytes) of team members' shared folders, for each day.
4476    pub shared_usage: NumberPerDay,
4477    /// Array of the combined size (bytes) of team members' root namespaces, for each day.
4478    pub unshared_usage: NumberPerDay,
4479    /// Array of the number of shared folders owned by team members, for each day.
4480    pub shared_folders: NumberPerDay,
4481    /// Array of storage summaries of team members' account sizes. Each storage summary is an array
4482    /// of key, value pairs, where each pair describes a storage bucket. The key indicates the upper
4483    /// bound of the bucket and the value is the number of users in that bucket. There is one such
4484    /// summary per day. If there is no data for a day, the storage summary will be empty.
4485    pub member_storage_map: Vec<Vec<StorageBucket>>,
4486}
4487
4488impl GetStorageReport {
4489    pub fn new(
4490        start_date: String,
4491        total_usage: NumberPerDay,
4492        shared_usage: NumberPerDay,
4493        unshared_usage: NumberPerDay,
4494        shared_folders: NumberPerDay,
4495        member_storage_map: Vec<Vec<StorageBucket>>,
4496    ) -> Self {
4497        GetStorageReport {
4498            start_date,
4499            total_usage,
4500            shared_usage,
4501            unshared_usage,
4502            shared_folders,
4503            member_storage_map,
4504        }
4505    }
4506}
4507
4508const GET_STORAGE_REPORT_FIELDS: &[&str] = &["start_date",
4509                                             "total_usage",
4510                                             "shared_usage",
4511                                             "unshared_usage",
4512                                             "shared_folders",
4513                                             "member_storage_map"];
4514impl GetStorageReport {
4515    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
4516        map: V,
4517    ) -> Result<GetStorageReport, V::Error> {
4518        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
4519    }
4520
4521    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
4522        mut map: V,
4523        optional: bool,
4524    ) -> Result<Option<GetStorageReport>, V::Error> {
4525        let mut field_start_date = None;
4526        let mut field_total_usage = None;
4527        let mut field_shared_usage = None;
4528        let mut field_unshared_usage = None;
4529        let mut field_shared_folders = None;
4530        let mut field_member_storage_map = None;
4531        let mut nothing = true;
4532        while let Some(key) = map.next_key::<&str>()? {
4533            nothing = false;
4534            match key {
4535                "start_date" => {
4536                    if field_start_date.is_some() {
4537                        return Err(::serde::de::Error::duplicate_field("start_date"));
4538                    }
4539                    field_start_date = Some(map.next_value()?);
4540                }
4541                "total_usage" => {
4542                    if field_total_usage.is_some() {
4543                        return Err(::serde::de::Error::duplicate_field("total_usage"));
4544                    }
4545                    field_total_usage = Some(map.next_value()?);
4546                }
4547                "shared_usage" => {
4548                    if field_shared_usage.is_some() {
4549                        return Err(::serde::de::Error::duplicate_field("shared_usage"));
4550                    }
4551                    field_shared_usage = Some(map.next_value()?);
4552                }
4553                "unshared_usage" => {
4554                    if field_unshared_usage.is_some() {
4555                        return Err(::serde::de::Error::duplicate_field("unshared_usage"));
4556                    }
4557                    field_unshared_usage = Some(map.next_value()?);
4558                }
4559                "shared_folders" => {
4560                    if field_shared_folders.is_some() {
4561                        return Err(::serde::de::Error::duplicate_field("shared_folders"));
4562                    }
4563                    field_shared_folders = Some(map.next_value()?);
4564                }
4565                "member_storage_map" => {
4566                    if field_member_storage_map.is_some() {
4567                        return Err(::serde::de::Error::duplicate_field("member_storage_map"));
4568                    }
4569                    field_member_storage_map = Some(map.next_value()?);
4570                }
4571                _ => {
4572                    // unknown field allowed and ignored
4573                    map.next_value::<::serde_json::Value>()?;
4574                }
4575            }
4576        }
4577        if optional && nothing {
4578            return Ok(None);
4579        }
4580        let result = GetStorageReport {
4581            start_date: field_start_date.ok_or_else(|| ::serde::de::Error::missing_field("start_date"))?,
4582            total_usage: field_total_usage.ok_or_else(|| ::serde::de::Error::missing_field("total_usage"))?,
4583            shared_usage: field_shared_usage.ok_or_else(|| ::serde::de::Error::missing_field("shared_usage"))?,
4584            unshared_usage: field_unshared_usage.ok_or_else(|| ::serde::de::Error::missing_field("unshared_usage"))?,
4585            shared_folders: field_shared_folders.ok_or_else(|| ::serde::de::Error::missing_field("shared_folders"))?,
4586            member_storage_map: field_member_storage_map.ok_or_else(|| ::serde::de::Error::missing_field("member_storage_map"))?,
4587        };
4588        Ok(Some(result))
4589    }
4590
4591    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
4592        &self,
4593        s: &mut S::SerializeStruct,
4594    ) -> Result<(), S::Error> {
4595        use serde::ser::SerializeStruct;
4596        s.serialize_field("start_date", &self.start_date)?;
4597        s.serialize_field("total_usage", &self.total_usage)?;
4598        s.serialize_field("shared_usage", &self.shared_usage)?;
4599        s.serialize_field("unshared_usage", &self.unshared_usage)?;
4600        s.serialize_field("shared_folders", &self.shared_folders)?;
4601        s.serialize_field("member_storage_map", &self.member_storage_map)?;
4602        Ok(())
4603    }
4604}
4605
4606impl<'de> ::serde::de::Deserialize<'de> for GetStorageReport {
4607    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4608        // struct deserializer
4609        use serde::de::{MapAccess, Visitor};
4610        struct StructVisitor;
4611        impl<'de> Visitor<'de> for StructVisitor {
4612            type Value = GetStorageReport;
4613            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
4614                f.write_str("a GetStorageReport struct")
4615            }
4616            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
4617                GetStorageReport::internal_deserialize(map)
4618            }
4619        }
4620        deserializer.deserialize_struct("GetStorageReport", GET_STORAGE_REPORT_FIELDS, StructVisitor)
4621    }
4622}
4623
4624impl ::serde::ser::Serialize for GetStorageReport {
4625    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
4626        // struct serializer
4627        use serde::ser::SerializeStruct;
4628        let mut s = serializer.serialize_struct("GetStorageReport", 6)?;
4629        self.internal_serialize::<S>(&mut s)?;
4630        s.end()
4631    }
4632}
4633
4634// struct extends BaseDfbReport
4635impl From<GetStorageReport> for BaseDfbReport {
4636    fn from(subtype: GetStorageReport) -> Self {
4637        Self {
4638            start_date: subtype.start_date,
4639        }
4640    }
4641}
4642/// Role of a user in group.
4643#[derive(Debug, Clone, PartialEq, Eq)]
4644pub enum GroupAccessType {
4645    /// User is a member of the group, but has no special permissions.
4646    Member,
4647    /// User can rename the group, and add/remove members.
4648    Owner,
4649}
4650
4651impl<'de> ::serde::de::Deserialize<'de> for GroupAccessType {
4652    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4653        // union deserializer
4654        use serde::de::{self, MapAccess, Visitor};
4655        struct EnumVisitor;
4656        impl<'de> Visitor<'de> for EnumVisitor {
4657            type Value = GroupAccessType;
4658            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
4659                f.write_str("a GroupAccessType structure")
4660            }
4661            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
4662                let tag: &str = match map.next_key()? {
4663                    Some(".tag") => map.next_value()?,
4664                    _ => return Err(de::Error::missing_field(".tag"))
4665                };
4666                let value = match tag {
4667                    "member" => GroupAccessType::Member,
4668                    "owner" => GroupAccessType::Owner,
4669                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
4670                };
4671                crate::eat_json_fields(&mut map)?;
4672                Ok(value)
4673            }
4674        }
4675        const VARIANTS: &[&str] = &["member",
4676                                    "owner"];
4677        deserializer.deserialize_struct("GroupAccessType", VARIANTS, EnumVisitor)
4678    }
4679}
4680
4681impl ::serde::ser::Serialize for GroupAccessType {
4682    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
4683        // union serializer
4684        use serde::ser::SerializeStruct;
4685        match self {
4686            GroupAccessType::Member => {
4687                // unit
4688                let mut s = serializer.serialize_struct("GroupAccessType", 1)?;
4689                s.serialize_field(".tag", "member")?;
4690                s.end()
4691            }
4692            GroupAccessType::Owner => {
4693                // unit
4694                let mut s = serializer.serialize_struct("GroupAccessType", 1)?;
4695                s.serialize_field(".tag", "owner")?;
4696                s.end()
4697            }
4698        }
4699    }
4700}
4701
4702#[derive(Debug, Clone, PartialEq, Eq)]
4703#[non_exhaustive] // structs may have more fields added in the future.
4704pub struct GroupCreateArg {
4705    /// Group name.
4706    pub group_name: String,
4707    /// Automatically add the creator of the group.
4708    pub add_creator_as_owner: bool,
4709    /// The creator of a team can associate an arbitrary external ID to the group.
4710    pub group_external_id: Option<crate::types::team_common::GroupExternalId>,
4711    /// Whether the team can be managed by selected users, or only by team admins.
4712    pub group_management_type: Option<crate::types::team_common::GroupManagementType>,
4713}
4714
4715impl GroupCreateArg {
4716    pub fn new(group_name: String) -> Self {
4717        GroupCreateArg {
4718            group_name,
4719            add_creator_as_owner: false,
4720            group_external_id: None,
4721            group_management_type: None,
4722        }
4723    }
4724
4725    pub fn with_add_creator_as_owner(mut self, value: bool) -> Self {
4726        self.add_creator_as_owner = value;
4727        self
4728    }
4729
4730    pub fn with_group_external_id(
4731        mut self,
4732        value: crate::types::team_common::GroupExternalId,
4733    ) -> Self {
4734        self.group_external_id = Some(value);
4735        self
4736    }
4737
4738    pub fn with_group_management_type(
4739        mut self,
4740        value: crate::types::team_common::GroupManagementType,
4741    ) -> Self {
4742        self.group_management_type = Some(value);
4743        self
4744    }
4745}
4746
4747const GROUP_CREATE_ARG_FIELDS: &[&str] = &["group_name",
4748                                           "add_creator_as_owner",
4749                                           "group_external_id",
4750                                           "group_management_type"];
4751impl GroupCreateArg {
4752    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
4753        map: V,
4754    ) -> Result<GroupCreateArg, V::Error> {
4755        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
4756    }
4757
4758    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
4759        mut map: V,
4760        optional: bool,
4761    ) -> Result<Option<GroupCreateArg>, V::Error> {
4762        let mut field_group_name = None;
4763        let mut field_add_creator_as_owner = None;
4764        let mut field_group_external_id = None;
4765        let mut field_group_management_type = None;
4766        let mut nothing = true;
4767        while let Some(key) = map.next_key::<&str>()? {
4768            nothing = false;
4769            match key {
4770                "group_name" => {
4771                    if field_group_name.is_some() {
4772                        return Err(::serde::de::Error::duplicate_field("group_name"));
4773                    }
4774                    field_group_name = Some(map.next_value()?);
4775                }
4776                "add_creator_as_owner" => {
4777                    if field_add_creator_as_owner.is_some() {
4778                        return Err(::serde::de::Error::duplicate_field("add_creator_as_owner"));
4779                    }
4780                    field_add_creator_as_owner = Some(map.next_value()?);
4781                }
4782                "group_external_id" => {
4783                    if field_group_external_id.is_some() {
4784                        return Err(::serde::de::Error::duplicate_field("group_external_id"));
4785                    }
4786                    field_group_external_id = Some(map.next_value()?);
4787                }
4788                "group_management_type" => {
4789                    if field_group_management_type.is_some() {
4790                        return Err(::serde::de::Error::duplicate_field("group_management_type"));
4791                    }
4792                    field_group_management_type = Some(map.next_value()?);
4793                }
4794                _ => {
4795                    // unknown field allowed and ignored
4796                    map.next_value::<::serde_json::Value>()?;
4797                }
4798            }
4799        }
4800        if optional && nothing {
4801            return Ok(None);
4802        }
4803        let result = GroupCreateArg {
4804            group_name: field_group_name.ok_or_else(|| ::serde::de::Error::missing_field("group_name"))?,
4805            add_creator_as_owner: field_add_creator_as_owner.unwrap_or(false),
4806            group_external_id: field_group_external_id.and_then(Option::flatten),
4807            group_management_type: field_group_management_type.and_then(Option::flatten),
4808        };
4809        Ok(Some(result))
4810    }
4811
4812    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
4813        &self,
4814        s: &mut S::SerializeStruct,
4815    ) -> Result<(), S::Error> {
4816        use serde::ser::SerializeStruct;
4817        s.serialize_field("group_name", &self.group_name)?;
4818        if self.add_creator_as_owner {
4819            s.serialize_field("add_creator_as_owner", &self.add_creator_as_owner)?;
4820        }
4821        if let Some(val) = &self.group_external_id {
4822            s.serialize_field("group_external_id", val)?;
4823        }
4824        if let Some(val) = &self.group_management_type {
4825            s.serialize_field("group_management_type", val)?;
4826        }
4827        Ok(())
4828    }
4829}
4830
4831impl<'de> ::serde::de::Deserialize<'de> for GroupCreateArg {
4832    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4833        // struct deserializer
4834        use serde::de::{MapAccess, Visitor};
4835        struct StructVisitor;
4836        impl<'de> Visitor<'de> for StructVisitor {
4837            type Value = GroupCreateArg;
4838            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
4839                f.write_str("a GroupCreateArg struct")
4840            }
4841            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
4842                GroupCreateArg::internal_deserialize(map)
4843            }
4844        }
4845        deserializer.deserialize_struct("GroupCreateArg", GROUP_CREATE_ARG_FIELDS, StructVisitor)
4846    }
4847}
4848
4849impl ::serde::ser::Serialize for GroupCreateArg {
4850    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
4851        // struct serializer
4852        use serde::ser::SerializeStruct;
4853        let mut s = serializer.serialize_struct("GroupCreateArg", 4)?;
4854        self.internal_serialize::<S>(&mut s)?;
4855        s.end()
4856    }
4857}
4858
4859#[derive(Debug, Clone, PartialEq, Eq)]
4860#[non_exhaustive] // variants may be added in the future
4861pub enum GroupCreateError {
4862    /// The requested group name is already being used by another group.
4863    GroupNameAlreadyUsed,
4864    /// Group name is empty or has invalid characters.
4865    GroupNameInvalid,
4866    /// The requested external ID is already being used by another group.
4867    ExternalIdAlreadyInUse,
4868    /// System-managed group cannot be manually created.
4869    SystemManagedGroupDisallowed,
4870    /// Catch-all used for unrecognized values returned from the server. Encountering this value
4871    /// typically indicates that this SDK version is out of date.
4872    Other,
4873}
4874
4875impl<'de> ::serde::de::Deserialize<'de> for GroupCreateError {
4876    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4877        // union deserializer
4878        use serde::de::{self, MapAccess, Visitor};
4879        struct EnumVisitor;
4880        impl<'de> Visitor<'de> for EnumVisitor {
4881            type Value = GroupCreateError;
4882            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
4883                f.write_str("a GroupCreateError structure")
4884            }
4885            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
4886                let tag: &str = match map.next_key()? {
4887                    Some(".tag") => map.next_value()?,
4888                    _ => return Err(de::Error::missing_field(".tag"))
4889                };
4890                let value = match tag {
4891                    "group_name_already_used" => GroupCreateError::GroupNameAlreadyUsed,
4892                    "group_name_invalid" => GroupCreateError::GroupNameInvalid,
4893                    "external_id_already_in_use" => GroupCreateError::ExternalIdAlreadyInUse,
4894                    "system_managed_group_disallowed" => GroupCreateError::SystemManagedGroupDisallowed,
4895                    _ => GroupCreateError::Other,
4896                };
4897                crate::eat_json_fields(&mut map)?;
4898                Ok(value)
4899            }
4900        }
4901        const VARIANTS: &[&str] = &["group_name_already_used",
4902                                    "group_name_invalid",
4903                                    "external_id_already_in_use",
4904                                    "system_managed_group_disallowed",
4905                                    "other"];
4906        deserializer.deserialize_struct("GroupCreateError", VARIANTS, EnumVisitor)
4907    }
4908}
4909
4910impl ::serde::ser::Serialize for GroupCreateError {
4911    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
4912        // union serializer
4913        use serde::ser::SerializeStruct;
4914        match self {
4915            GroupCreateError::GroupNameAlreadyUsed => {
4916                // unit
4917                let mut s = serializer.serialize_struct("GroupCreateError", 1)?;
4918                s.serialize_field(".tag", "group_name_already_used")?;
4919                s.end()
4920            }
4921            GroupCreateError::GroupNameInvalid => {
4922                // unit
4923                let mut s = serializer.serialize_struct("GroupCreateError", 1)?;
4924                s.serialize_field(".tag", "group_name_invalid")?;
4925                s.end()
4926            }
4927            GroupCreateError::ExternalIdAlreadyInUse => {
4928                // unit
4929                let mut s = serializer.serialize_struct("GroupCreateError", 1)?;
4930                s.serialize_field(".tag", "external_id_already_in_use")?;
4931                s.end()
4932            }
4933            GroupCreateError::SystemManagedGroupDisallowed => {
4934                // unit
4935                let mut s = serializer.serialize_struct("GroupCreateError", 1)?;
4936                s.serialize_field(".tag", "system_managed_group_disallowed")?;
4937                s.end()
4938            }
4939            GroupCreateError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
4940        }
4941    }
4942}
4943
4944impl ::std::error::Error for GroupCreateError {
4945}
4946
4947impl ::std::fmt::Display for GroupCreateError {
4948    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
4949        match self {
4950            GroupCreateError::GroupNameAlreadyUsed => f.write_str("The requested group name is already being used by another group."),
4951            GroupCreateError::GroupNameInvalid => f.write_str("Group name is empty or has invalid characters."),
4952            GroupCreateError::ExternalIdAlreadyInUse => f.write_str("The requested external ID is already being used by another group."),
4953            GroupCreateError::SystemManagedGroupDisallowed => f.write_str("System-managed group cannot be manually created."),
4954            _ => write!(f, "{:?}", *self),
4955        }
4956    }
4957}
4958
4959#[derive(Debug, Clone, PartialEq, Eq)]
4960#[non_exhaustive] // variants may be added in the future
4961pub enum GroupDeleteError {
4962    /// No matching group found. No groups match the specified group ID.
4963    GroupNotFound,
4964    /// This operation is not supported on system-managed groups.
4965    SystemManagedGroupDisallowed,
4966    /// This group has already been deleted.
4967    GroupAlreadyDeleted,
4968    /// Catch-all used for unrecognized values returned from the server. Encountering this value
4969    /// typically indicates that this SDK version is out of date.
4970    Other,
4971}
4972
4973impl<'de> ::serde::de::Deserialize<'de> for GroupDeleteError {
4974    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4975        // union deserializer
4976        use serde::de::{self, MapAccess, Visitor};
4977        struct EnumVisitor;
4978        impl<'de> Visitor<'de> for EnumVisitor {
4979            type Value = GroupDeleteError;
4980            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
4981                f.write_str("a GroupDeleteError structure")
4982            }
4983            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
4984                let tag: &str = match map.next_key()? {
4985                    Some(".tag") => map.next_value()?,
4986                    _ => return Err(de::Error::missing_field(".tag"))
4987                };
4988                let value = match tag {
4989                    "group_not_found" => GroupDeleteError::GroupNotFound,
4990                    "system_managed_group_disallowed" => GroupDeleteError::SystemManagedGroupDisallowed,
4991                    "group_already_deleted" => GroupDeleteError::GroupAlreadyDeleted,
4992                    _ => GroupDeleteError::Other,
4993                };
4994                crate::eat_json_fields(&mut map)?;
4995                Ok(value)
4996            }
4997        }
4998        const VARIANTS: &[&str] = &["group_not_found",
4999                                    "other",
5000                                    "system_managed_group_disallowed",
5001                                    "group_already_deleted"];
5002        deserializer.deserialize_struct("GroupDeleteError", VARIANTS, EnumVisitor)
5003    }
5004}
5005
5006impl ::serde::ser::Serialize for GroupDeleteError {
5007    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
5008        // union serializer
5009        use serde::ser::SerializeStruct;
5010        match self {
5011            GroupDeleteError::GroupNotFound => {
5012                // unit
5013                let mut s = serializer.serialize_struct("GroupDeleteError", 1)?;
5014                s.serialize_field(".tag", "group_not_found")?;
5015                s.end()
5016            }
5017            GroupDeleteError::SystemManagedGroupDisallowed => {
5018                // unit
5019                let mut s = serializer.serialize_struct("GroupDeleteError", 1)?;
5020                s.serialize_field(".tag", "system_managed_group_disallowed")?;
5021                s.end()
5022            }
5023            GroupDeleteError::GroupAlreadyDeleted => {
5024                // unit
5025                let mut s = serializer.serialize_struct("GroupDeleteError", 1)?;
5026                s.serialize_field(".tag", "group_already_deleted")?;
5027                s.end()
5028            }
5029            GroupDeleteError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
5030        }
5031    }
5032}
5033
5034impl ::std::error::Error for GroupDeleteError {
5035}
5036
5037impl ::std::fmt::Display for GroupDeleteError {
5038    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
5039        match self {
5040            GroupDeleteError::GroupNotFound => f.write_str("No matching group found. No groups match the specified group ID."),
5041            GroupDeleteError::SystemManagedGroupDisallowed => f.write_str("This operation is not supported on system-managed groups."),
5042            GroupDeleteError::GroupAlreadyDeleted => f.write_str("This group has already been deleted."),
5043            _ => write!(f, "{:?}", *self),
5044        }
5045    }
5046}
5047
5048// union extends GroupSelectorWithTeamGroupError
5049impl From<GroupSelectorWithTeamGroupError> for GroupDeleteError {
5050    fn from(parent: GroupSelectorWithTeamGroupError) -> Self {
5051        match parent {
5052            GroupSelectorWithTeamGroupError::GroupNotFound => GroupDeleteError::GroupNotFound,
5053            GroupSelectorWithTeamGroupError::Other => GroupDeleteError::Other,
5054            GroupSelectorWithTeamGroupError::SystemManagedGroupDisallowed => GroupDeleteError::SystemManagedGroupDisallowed,
5055        }
5056    }
5057}
5058/// Full description of a group.
5059#[derive(Debug, Clone, PartialEq, Eq)]
5060#[non_exhaustive] // structs may have more fields added in the future.
5061pub struct GroupFullInfo {
5062    pub group_name: String,
5063    pub group_id: crate::types::team_common::GroupId,
5064    /// Who is allowed to manage the group.
5065    pub group_management_type: crate::types::team_common::GroupManagementType,
5066    /// The group creation time as a UTC timestamp in milliseconds since the Unix epoch.
5067    pub created: u64,
5068    /// External ID of group. This is an arbitrary ID that an admin can attach to a group.
5069    pub group_external_id: Option<crate::types::team_common::GroupExternalId>,
5070    /// The number of members in the group.
5071    pub member_count: Option<u32>,
5072    /// List of group members.
5073    pub members: Option<Vec<GroupMemberInfo>>,
5074}
5075
5076impl GroupFullInfo {
5077    pub fn new(
5078        group_name: String,
5079        group_id: crate::types::team_common::GroupId,
5080        group_management_type: crate::types::team_common::GroupManagementType,
5081        created: u64,
5082    ) -> Self {
5083        GroupFullInfo {
5084            group_name,
5085            group_id,
5086            group_management_type,
5087            created,
5088            group_external_id: None,
5089            member_count: None,
5090            members: None,
5091        }
5092    }
5093
5094    pub fn with_group_external_id(
5095        mut self,
5096        value: crate::types::team_common::GroupExternalId,
5097    ) -> Self {
5098        self.group_external_id = Some(value);
5099        self
5100    }
5101
5102    pub fn with_member_count(mut self, value: u32) -> Self {
5103        self.member_count = Some(value);
5104        self
5105    }
5106
5107    pub fn with_members(mut self, value: Vec<GroupMemberInfo>) -> Self {
5108        self.members = Some(value);
5109        self
5110    }
5111}
5112
5113const GROUP_FULL_INFO_FIELDS: &[&str] = &["group_name",
5114                                          "group_id",
5115                                          "group_management_type",
5116                                          "created",
5117                                          "group_external_id",
5118                                          "member_count",
5119                                          "members"];
5120impl GroupFullInfo {
5121    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
5122        map: V,
5123    ) -> Result<GroupFullInfo, V::Error> {
5124        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
5125    }
5126
5127    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
5128        mut map: V,
5129        optional: bool,
5130    ) -> Result<Option<GroupFullInfo>, V::Error> {
5131        let mut field_group_name = None;
5132        let mut field_group_id = None;
5133        let mut field_group_management_type = None;
5134        let mut field_created = None;
5135        let mut field_group_external_id = None;
5136        let mut field_member_count = None;
5137        let mut field_members = None;
5138        let mut nothing = true;
5139        while let Some(key) = map.next_key::<&str>()? {
5140            nothing = false;
5141            match key {
5142                "group_name" => {
5143                    if field_group_name.is_some() {
5144                        return Err(::serde::de::Error::duplicate_field("group_name"));
5145                    }
5146                    field_group_name = Some(map.next_value()?);
5147                }
5148                "group_id" => {
5149                    if field_group_id.is_some() {
5150                        return Err(::serde::de::Error::duplicate_field("group_id"));
5151                    }
5152                    field_group_id = Some(map.next_value()?);
5153                }
5154                "group_management_type" => {
5155                    if field_group_management_type.is_some() {
5156                        return Err(::serde::de::Error::duplicate_field("group_management_type"));
5157                    }
5158                    field_group_management_type = Some(map.next_value()?);
5159                }
5160                "created" => {
5161                    if field_created.is_some() {
5162                        return Err(::serde::de::Error::duplicate_field("created"));
5163                    }
5164                    field_created = Some(map.next_value()?);
5165                }
5166                "group_external_id" => {
5167                    if field_group_external_id.is_some() {
5168                        return Err(::serde::de::Error::duplicate_field("group_external_id"));
5169                    }
5170                    field_group_external_id = Some(map.next_value()?);
5171                }
5172                "member_count" => {
5173                    if field_member_count.is_some() {
5174                        return Err(::serde::de::Error::duplicate_field("member_count"));
5175                    }
5176                    field_member_count = Some(map.next_value()?);
5177                }
5178                "members" => {
5179                    if field_members.is_some() {
5180                        return Err(::serde::de::Error::duplicate_field("members"));
5181                    }
5182                    field_members = Some(map.next_value()?);
5183                }
5184                _ => {
5185                    // unknown field allowed and ignored
5186                    map.next_value::<::serde_json::Value>()?;
5187                }
5188            }
5189        }
5190        if optional && nothing {
5191            return Ok(None);
5192        }
5193        let result = GroupFullInfo {
5194            group_name: field_group_name.ok_or_else(|| ::serde::de::Error::missing_field("group_name"))?,
5195            group_id: field_group_id.ok_or_else(|| ::serde::de::Error::missing_field("group_id"))?,
5196            group_management_type: field_group_management_type.ok_or_else(|| ::serde::de::Error::missing_field("group_management_type"))?,
5197            created: field_created.ok_or_else(|| ::serde::de::Error::missing_field("created"))?,
5198            group_external_id: field_group_external_id.and_then(Option::flatten),
5199            member_count: field_member_count.and_then(Option::flatten),
5200            members: field_members.and_then(Option::flatten),
5201        };
5202        Ok(Some(result))
5203    }
5204
5205    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
5206        &self,
5207        s: &mut S::SerializeStruct,
5208    ) -> Result<(), S::Error> {
5209        use serde::ser::SerializeStruct;
5210        s.serialize_field("group_name", &self.group_name)?;
5211        s.serialize_field("group_id", &self.group_id)?;
5212        s.serialize_field("group_management_type", &self.group_management_type)?;
5213        s.serialize_field("created", &self.created)?;
5214        if let Some(val) = &self.group_external_id {
5215            s.serialize_field("group_external_id", val)?;
5216        }
5217        if let Some(val) = &self.member_count {
5218            s.serialize_field("member_count", val)?;
5219        }
5220        if let Some(val) = &self.members {
5221            s.serialize_field("members", val)?;
5222        }
5223        Ok(())
5224    }
5225}
5226
5227impl<'de> ::serde::de::Deserialize<'de> for GroupFullInfo {
5228    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
5229        // struct deserializer
5230        use serde::de::{MapAccess, Visitor};
5231        struct StructVisitor;
5232        impl<'de> Visitor<'de> for StructVisitor {
5233            type Value = GroupFullInfo;
5234            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
5235                f.write_str("a GroupFullInfo struct")
5236            }
5237            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
5238                GroupFullInfo::internal_deserialize(map)
5239            }
5240        }
5241        deserializer.deserialize_struct("GroupFullInfo", GROUP_FULL_INFO_FIELDS, StructVisitor)
5242    }
5243}
5244
5245impl ::serde::ser::Serialize for GroupFullInfo {
5246    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
5247        // struct serializer
5248        use serde::ser::SerializeStruct;
5249        let mut s = serializer.serialize_struct("GroupFullInfo", 7)?;
5250        self.internal_serialize::<S>(&mut s)?;
5251        s.end()
5252    }
5253}
5254
5255// struct extends crate::types::team_common::GroupSummary
5256impl From<GroupFullInfo> for crate::types::team_common::GroupSummary {
5257    fn from(subtype: GroupFullInfo) -> Self {
5258        Self {
5259            group_name: subtype.group_name,
5260            group_id: subtype.group_id,
5261            group_management_type: subtype.group_management_type,
5262            group_external_id: subtype.group_external_id,
5263            member_count: subtype.member_count,
5264        }
5265    }
5266}
5267/// Profile of group member, and role in group.
5268#[derive(Debug, Clone, PartialEq, Eq)]
5269#[non_exhaustive] // structs may have more fields added in the future.
5270pub struct GroupMemberInfo {
5271    /// Profile of group member.
5272    pub profile: MemberProfile,
5273    /// The role that the user has in the group.
5274    pub access_type: GroupAccessType,
5275}
5276
5277impl GroupMemberInfo {
5278    pub fn new(profile: MemberProfile, access_type: GroupAccessType) -> Self {
5279        GroupMemberInfo {
5280            profile,
5281            access_type,
5282        }
5283    }
5284}
5285
5286const GROUP_MEMBER_INFO_FIELDS: &[&str] = &["profile",
5287                                            "access_type"];
5288impl GroupMemberInfo {
5289    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
5290        map: V,
5291    ) -> Result<GroupMemberInfo, V::Error> {
5292        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
5293    }
5294
5295    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
5296        mut map: V,
5297        optional: bool,
5298    ) -> Result<Option<GroupMemberInfo>, V::Error> {
5299        let mut field_profile = None;
5300        let mut field_access_type = None;
5301        let mut nothing = true;
5302        while let Some(key) = map.next_key::<&str>()? {
5303            nothing = false;
5304            match key {
5305                "profile" => {
5306                    if field_profile.is_some() {
5307                        return Err(::serde::de::Error::duplicate_field("profile"));
5308                    }
5309                    field_profile = Some(map.next_value()?);
5310                }
5311                "access_type" => {
5312                    if field_access_type.is_some() {
5313                        return Err(::serde::de::Error::duplicate_field("access_type"));
5314                    }
5315                    field_access_type = Some(map.next_value()?);
5316                }
5317                _ => {
5318                    // unknown field allowed and ignored
5319                    map.next_value::<::serde_json::Value>()?;
5320                }
5321            }
5322        }
5323        if optional && nothing {
5324            return Ok(None);
5325        }
5326        let result = GroupMemberInfo {
5327            profile: field_profile.ok_or_else(|| ::serde::de::Error::missing_field("profile"))?,
5328            access_type: field_access_type.ok_or_else(|| ::serde::de::Error::missing_field("access_type"))?,
5329        };
5330        Ok(Some(result))
5331    }
5332
5333    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
5334        &self,
5335        s: &mut S::SerializeStruct,
5336    ) -> Result<(), S::Error> {
5337        use serde::ser::SerializeStruct;
5338        s.serialize_field("profile", &self.profile)?;
5339        s.serialize_field("access_type", &self.access_type)?;
5340        Ok(())
5341    }
5342}
5343
5344impl<'de> ::serde::de::Deserialize<'de> for GroupMemberInfo {
5345    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
5346        // struct deserializer
5347        use serde::de::{MapAccess, Visitor};
5348        struct StructVisitor;
5349        impl<'de> Visitor<'de> for StructVisitor {
5350            type Value = GroupMemberInfo;
5351            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
5352                f.write_str("a GroupMemberInfo struct")
5353            }
5354            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
5355                GroupMemberInfo::internal_deserialize(map)
5356            }
5357        }
5358        deserializer.deserialize_struct("GroupMemberInfo", GROUP_MEMBER_INFO_FIELDS, StructVisitor)
5359    }
5360}
5361
5362impl ::serde::ser::Serialize for GroupMemberInfo {
5363    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
5364        // struct serializer
5365        use serde::ser::SerializeStruct;
5366        let mut s = serializer.serialize_struct("GroupMemberInfo", 2)?;
5367        self.internal_serialize::<S>(&mut s)?;
5368        s.end()
5369    }
5370}
5371
5372/// Argument for selecting a group and a single user.
5373#[derive(Debug, Clone, PartialEq, Eq)]
5374#[non_exhaustive] // structs may have more fields added in the future.
5375pub struct GroupMemberSelector {
5376    /// Specify a group.
5377    pub group: GroupSelector,
5378    /// Identity of a user that is a member of `group`.
5379    pub user: UserSelectorArg,
5380}
5381
5382impl GroupMemberSelector {
5383    pub fn new(group: GroupSelector, user: UserSelectorArg) -> Self {
5384        GroupMemberSelector {
5385            group,
5386            user,
5387        }
5388    }
5389}
5390
5391const GROUP_MEMBER_SELECTOR_FIELDS: &[&str] = &["group",
5392                                                "user"];
5393impl GroupMemberSelector {
5394    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
5395        map: V,
5396    ) -> Result<GroupMemberSelector, V::Error> {
5397        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
5398    }
5399
5400    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
5401        mut map: V,
5402        optional: bool,
5403    ) -> Result<Option<GroupMemberSelector>, V::Error> {
5404        let mut field_group = None;
5405        let mut field_user = None;
5406        let mut nothing = true;
5407        while let Some(key) = map.next_key::<&str>()? {
5408            nothing = false;
5409            match key {
5410                "group" => {
5411                    if field_group.is_some() {
5412                        return Err(::serde::de::Error::duplicate_field("group"));
5413                    }
5414                    field_group = Some(map.next_value()?);
5415                }
5416                "user" => {
5417                    if field_user.is_some() {
5418                        return Err(::serde::de::Error::duplicate_field("user"));
5419                    }
5420                    field_user = Some(map.next_value()?);
5421                }
5422                _ => {
5423                    // unknown field allowed and ignored
5424                    map.next_value::<::serde_json::Value>()?;
5425                }
5426            }
5427        }
5428        if optional && nothing {
5429            return Ok(None);
5430        }
5431        let result = GroupMemberSelector {
5432            group: field_group.ok_or_else(|| ::serde::de::Error::missing_field("group"))?,
5433            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
5434        };
5435        Ok(Some(result))
5436    }
5437
5438    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
5439        &self,
5440        s: &mut S::SerializeStruct,
5441    ) -> Result<(), S::Error> {
5442        use serde::ser::SerializeStruct;
5443        s.serialize_field("group", &self.group)?;
5444        s.serialize_field("user", &self.user)?;
5445        Ok(())
5446    }
5447}
5448
5449impl<'de> ::serde::de::Deserialize<'de> for GroupMemberSelector {
5450    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
5451        // struct deserializer
5452        use serde::de::{MapAccess, Visitor};
5453        struct StructVisitor;
5454        impl<'de> Visitor<'de> for StructVisitor {
5455            type Value = GroupMemberSelector;
5456            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
5457                f.write_str("a GroupMemberSelector struct")
5458            }
5459            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
5460                GroupMemberSelector::internal_deserialize(map)
5461            }
5462        }
5463        deserializer.deserialize_struct("GroupMemberSelector", GROUP_MEMBER_SELECTOR_FIELDS, StructVisitor)
5464    }
5465}
5466
5467impl ::serde::ser::Serialize for GroupMemberSelector {
5468    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
5469        // struct serializer
5470        use serde::ser::SerializeStruct;
5471        let mut s = serializer.serialize_struct("GroupMemberSelector", 2)?;
5472        self.internal_serialize::<S>(&mut s)?;
5473        s.end()
5474    }
5475}
5476
5477/// Error that can be raised when [`GroupMemberSelector`] is used, and the user is required to be a
5478/// member of the specified group.
5479#[derive(Debug, Clone, PartialEq, Eq)]
5480#[non_exhaustive] // variants may be added in the future
5481pub enum GroupMemberSelectorError {
5482    /// No matching group found. No groups match the specified group ID.
5483    GroupNotFound,
5484    /// This operation is not supported on system-managed groups.
5485    SystemManagedGroupDisallowed,
5486    /// The specified user is not a member of this group.
5487    MemberNotInGroup,
5488    /// Catch-all used for unrecognized values returned from the server. Encountering this value
5489    /// typically indicates that this SDK version is out of date.
5490    Other,
5491}
5492
5493impl<'de> ::serde::de::Deserialize<'de> for GroupMemberSelectorError {
5494    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
5495        // union deserializer
5496        use serde::de::{self, MapAccess, Visitor};
5497        struct EnumVisitor;
5498        impl<'de> Visitor<'de> for EnumVisitor {
5499            type Value = GroupMemberSelectorError;
5500            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
5501                f.write_str("a GroupMemberSelectorError structure")
5502            }
5503            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
5504                let tag: &str = match map.next_key()? {
5505                    Some(".tag") => map.next_value()?,
5506                    _ => return Err(de::Error::missing_field(".tag"))
5507                };
5508                let value = match tag {
5509                    "group_not_found" => GroupMemberSelectorError::GroupNotFound,
5510                    "system_managed_group_disallowed" => GroupMemberSelectorError::SystemManagedGroupDisallowed,
5511                    "member_not_in_group" => GroupMemberSelectorError::MemberNotInGroup,
5512                    _ => GroupMemberSelectorError::Other,
5513                };
5514                crate::eat_json_fields(&mut map)?;
5515                Ok(value)
5516            }
5517        }
5518        const VARIANTS: &[&str] = &["group_not_found",
5519                                    "other",
5520                                    "system_managed_group_disallowed",
5521                                    "member_not_in_group"];
5522        deserializer.deserialize_struct("GroupMemberSelectorError", VARIANTS, EnumVisitor)
5523    }
5524}
5525
5526impl ::serde::ser::Serialize for GroupMemberSelectorError {
5527    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
5528        // union serializer
5529        use serde::ser::SerializeStruct;
5530        match self {
5531            GroupMemberSelectorError::GroupNotFound => {
5532                // unit
5533                let mut s = serializer.serialize_struct("GroupMemberSelectorError", 1)?;
5534                s.serialize_field(".tag", "group_not_found")?;
5535                s.end()
5536            }
5537            GroupMemberSelectorError::SystemManagedGroupDisallowed => {
5538                // unit
5539                let mut s = serializer.serialize_struct("GroupMemberSelectorError", 1)?;
5540                s.serialize_field(".tag", "system_managed_group_disallowed")?;
5541                s.end()
5542            }
5543            GroupMemberSelectorError::MemberNotInGroup => {
5544                // unit
5545                let mut s = serializer.serialize_struct("GroupMemberSelectorError", 1)?;
5546                s.serialize_field(".tag", "member_not_in_group")?;
5547                s.end()
5548            }
5549            GroupMemberSelectorError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
5550        }
5551    }
5552}
5553
5554impl ::std::error::Error for GroupMemberSelectorError {
5555}
5556
5557impl ::std::fmt::Display for GroupMemberSelectorError {
5558    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
5559        match self {
5560            GroupMemberSelectorError::GroupNotFound => f.write_str("No matching group found. No groups match the specified group ID."),
5561            GroupMemberSelectorError::SystemManagedGroupDisallowed => f.write_str("This operation is not supported on system-managed groups."),
5562            GroupMemberSelectorError::MemberNotInGroup => f.write_str("The specified user is not a member of this group."),
5563            _ => write!(f, "{:?}", *self),
5564        }
5565    }
5566}
5567
5568// union extends GroupSelectorWithTeamGroupError
5569impl From<GroupSelectorWithTeamGroupError> for GroupMemberSelectorError {
5570    fn from(parent: GroupSelectorWithTeamGroupError) -> Self {
5571        match parent {
5572            GroupSelectorWithTeamGroupError::GroupNotFound => GroupMemberSelectorError::GroupNotFound,
5573            GroupSelectorWithTeamGroupError::Other => GroupMemberSelectorError::Other,
5574            GroupSelectorWithTeamGroupError::SystemManagedGroupDisallowed => GroupMemberSelectorError::SystemManagedGroupDisallowed,
5575        }
5576    }
5577}
5578#[derive(Debug, Clone, PartialEq, Eq)]
5579#[non_exhaustive] // variants may be added in the future
5580pub enum GroupMemberSetAccessTypeError {
5581    /// No matching group found. No groups match the specified group ID.
5582    GroupNotFound,
5583    /// This operation is not supported on system-managed groups.
5584    SystemManagedGroupDisallowed,
5585    /// The specified user is not a member of this group.
5586    MemberNotInGroup,
5587    /// A company managed group cannot be managed by a user.
5588    UserCannotBeManagerOfCompanyManagedGroup,
5589    /// Catch-all used for unrecognized values returned from the server. Encountering this value
5590    /// typically indicates that this SDK version is out of date.
5591    Other,
5592}
5593
5594impl<'de> ::serde::de::Deserialize<'de> for GroupMemberSetAccessTypeError {
5595    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
5596        // union deserializer
5597        use serde::de::{self, MapAccess, Visitor};
5598        struct EnumVisitor;
5599        impl<'de> Visitor<'de> for EnumVisitor {
5600            type Value = GroupMemberSetAccessTypeError;
5601            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
5602                f.write_str("a GroupMemberSetAccessTypeError structure")
5603            }
5604            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
5605                let tag: &str = match map.next_key()? {
5606                    Some(".tag") => map.next_value()?,
5607                    _ => return Err(de::Error::missing_field(".tag"))
5608                };
5609                let value = match tag {
5610                    "group_not_found" => GroupMemberSetAccessTypeError::GroupNotFound,
5611                    "system_managed_group_disallowed" => GroupMemberSetAccessTypeError::SystemManagedGroupDisallowed,
5612                    "member_not_in_group" => GroupMemberSetAccessTypeError::MemberNotInGroup,
5613                    "user_cannot_be_manager_of_company_managed_group" => GroupMemberSetAccessTypeError::UserCannotBeManagerOfCompanyManagedGroup,
5614                    _ => GroupMemberSetAccessTypeError::Other,
5615                };
5616                crate::eat_json_fields(&mut map)?;
5617                Ok(value)
5618            }
5619        }
5620        const VARIANTS: &[&str] = &["group_not_found",
5621                                    "other",
5622                                    "system_managed_group_disallowed",
5623                                    "member_not_in_group",
5624                                    "user_cannot_be_manager_of_company_managed_group"];
5625        deserializer.deserialize_struct("GroupMemberSetAccessTypeError", VARIANTS, EnumVisitor)
5626    }
5627}
5628
5629impl ::serde::ser::Serialize for GroupMemberSetAccessTypeError {
5630    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
5631        // union serializer
5632        use serde::ser::SerializeStruct;
5633        match self {
5634            GroupMemberSetAccessTypeError::GroupNotFound => {
5635                // unit
5636                let mut s = serializer.serialize_struct("GroupMemberSetAccessTypeError", 1)?;
5637                s.serialize_field(".tag", "group_not_found")?;
5638                s.end()
5639            }
5640            GroupMemberSetAccessTypeError::SystemManagedGroupDisallowed => {
5641                // unit
5642                let mut s = serializer.serialize_struct("GroupMemberSetAccessTypeError", 1)?;
5643                s.serialize_field(".tag", "system_managed_group_disallowed")?;
5644                s.end()
5645            }
5646            GroupMemberSetAccessTypeError::MemberNotInGroup => {
5647                // unit
5648                let mut s = serializer.serialize_struct("GroupMemberSetAccessTypeError", 1)?;
5649                s.serialize_field(".tag", "member_not_in_group")?;
5650                s.end()
5651            }
5652            GroupMemberSetAccessTypeError::UserCannotBeManagerOfCompanyManagedGroup => {
5653                // unit
5654                let mut s = serializer.serialize_struct("GroupMemberSetAccessTypeError", 1)?;
5655                s.serialize_field(".tag", "user_cannot_be_manager_of_company_managed_group")?;
5656                s.end()
5657            }
5658            GroupMemberSetAccessTypeError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
5659        }
5660    }
5661}
5662
5663impl ::std::error::Error for GroupMemberSetAccessTypeError {
5664}
5665
5666impl ::std::fmt::Display for GroupMemberSetAccessTypeError {
5667    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
5668        match self {
5669            GroupMemberSetAccessTypeError::GroupNotFound => f.write_str("No matching group found. No groups match the specified group ID."),
5670            GroupMemberSetAccessTypeError::SystemManagedGroupDisallowed => f.write_str("This operation is not supported on system-managed groups."),
5671            GroupMemberSetAccessTypeError::MemberNotInGroup => f.write_str("The specified user is not a member of this group."),
5672            GroupMemberSetAccessTypeError::UserCannotBeManagerOfCompanyManagedGroup => f.write_str("A company managed group cannot be managed by a user."),
5673            _ => write!(f, "{:?}", *self),
5674        }
5675    }
5676}
5677
5678// union extends GroupMemberSelectorError
5679impl From<GroupMemberSelectorError> for GroupMemberSetAccessTypeError {
5680    fn from(parent: GroupMemberSelectorError) -> Self {
5681        match parent {
5682            GroupMemberSelectorError::GroupNotFound => GroupMemberSetAccessTypeError::GroupNotFound,
5683            GroupMemberSelectorError::Other => GroupMemberSetAccessTypeError::Other,
5684            GroupMemberSelectorError::SystemManagedGroupDisallowed => GroupMemberSetAccessTypeError::SystemManagedGroupDisallowed,
5685            GroupMemberSelectorError::MemberNotInGroup => GroupMemberSetAccessTypeError::MemberNotInGroup,
5686        }
5687    }
5688}
5689#[derive(Debug, Clone, PartialEq, Eq)]
5690#[non_exhaustive] // structs may have more fields added in the future.
5691pub struct GroupMembersAddArg {
5692    /// Group to which users will be added.
5693    pub group: GroupSelector,
5694    /// List of users to be added to the group.
5695    pub members: Vec<MemberAccess>,
5696    /// Whether to return the list of members in the group.  Note that the default value will cause
5697    /// all the group members  to be returned in the response. This may take a long time for large
5698    /// groups.
5699    pub return_members: bool,
5700}
5701
5702impl GroupMembersAddArg {
5703    pub fn new(group: GroupSelector, members: Vec<MemberAccess>) -> Self {
5704        GroupMembersAddArg {
5705            group,
5706            members,
5707            return_members: true,
5708        }
5709    }
5710
5711    pub fn with_return_members(mut self, value: bool) -> Self {
5712        self.return_members = value;
5713        self
5714    }
5715}
5716
5717const GROUP_MEMBERS_ADD_ARG_FIELDS: &[&str] = &["group",
5718                                                "members",
5719                                                "return_members"];
5720impl GroupMembersAddArg {
5721    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
5722        map: V,
5723    ) -> Result<GroupMembersAddArg, V::Error> {
5724        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
5725    }
5726
5727    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
5728        mut map: V,
5729        optional: bool,
5730    ) -> Result<Option<GroupMembersAddArg>, V::Error> {
5731        let mut field_group = None;
5732        let mut field_members = None;
5733        let mut field_return_members = None;
5734        let mut nothing = true;
5735        while let Some(key) = map.next_key::<&str>()? {
5736            nothing = false;
5737            match key {
5738                "group" => {
5739                    if field_group.is_some() {
5740                        return Err(::serde::de::Error::duplicate_field("group"));
5741                    }
5742                    field_group = Some(map.next_value()?);
5743                }
5744                "members" => {
5745                    if field_members.is_some() {
5746                        return Err(::serde::de::Error::duplicate_field("members"));
5747                    }
5748                    field_members = Some(map.next_value()?);
5749                }
5750                "return_members" => {
5751                    if field_return_members.is_some() {
5752                        return Err(::serde::de::Error::duplicate_field("return_members"));
5753                    }
5754                    field_return_members = Some(map.next_value()?);
5755                }
5756                _ => {
5757                    // unknown field allowed and ignored
5758                    map.next_value::<::serde_json::Value>()?;
5759                }
5760            }
5761        }
5762        if optional && nothing {
5763            return Ok(None);
5764        }
5765        let result = GroupMembersAddArg {
5766            group: field_group.ok_or_else(|| ::serde::de::Error::missing_field("group"))?,
5767            members: field_members.ok_or_else(|| ::serde::de::Error::missing_field("members"))?,
5768            return_members: field_return_members.unwrap_or(true),
5769        };
5770        Ok(Some(result))
5771    }
5772
5773    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
5774        &self,
5775        s: &mut S::SerializeStruct,
5776    ) -> Result<(), S::Error> {
5777        use serde::ser::SerializeStruct;
5778        s.serialize_field("group", &self.group)?;
5779        s.serialize_field("members", &self.members)?;
5780        if !self.return_members {
5781            s.serialize_field("return_members", &self.return_members)?;
5782        }
5783        Ok(())
5784    }
5785}
5786
5787impl<'de> ::serde::de::Deserialize<'de> for GroupMembersAddArg {
5788    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
5789        // struct deserializer
5790        use serde::de::{MapAccess, Visitor};
5791        struct StructVisitor;
5792        impl<'de> Visitor<'de> for StructVisitor {
5793            type Value = GroupMembersAddArg;
5794            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
5795                f.write_str("a GroupMembersAddArg struct")
5796            }
5797            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
5798                GroupMembersAddArg::internal_deserialize(map)
5799            }
5800        }
5801        deserializer.deserialize_struct("GroupMembersAddArg", GROUP_MEMBERS_ADD_ARG_FIELDS, StructVisitor)
5802    }
5803}
5804
5805impl ::serde::ser::Serialize for GroupMembersAddArg {
5806    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
5807        // struct serializer
5808        use serde::ser::SerializeStruct;
5809        let mut s = serializer.serialize_struct("GroupMembersAddArg", 3)?;
5810        self.internal_serialize::<S>(&mut s)?;
5811        s.end()
5812    }
5813}
5814
5815// struct extends IncludeMembersArg
5816impl From<GroupMembersAddArg> for IncludeMembersArg {
5817    fn from(subtype: GroupMembersAddArg) -> Self {
5818        Self {
5819            return_members: subtype.return_members,
5820        }
5821    }
5822}
5823#[derive(Debug, Clone, PartialEq, Eq)]
5824#[non_exhaustive] // variants may be added in the future
5825pub enum GroupMembersAddError {
5826    /// No matching group found. No groups match the specified group ID.
5827    GroupNotFound,
5828    /// This operation is not supported on system-managed groups.
5829    SystemManagedGroupDisallowed,
5830    /// You cannot add duplicate users. One or more of the members you are trying to add is already
5831    /// a member of the group.
5832    DuplicateUser,
5833    /// Group is not in this team. You cannot add members to a group that is outside of your team.
5834    GroupNotInTeam,
5835    /// These members are not part of your team. Currently, you cannot add members to a group if
5836    /// they are not part of your team, though this may change in a subsequent version. To add new
5837    /// members to your Dropbox Business team, use the [`members_add()`](crate::team::members_add)
5838    /// endpoint.
5839    MembersNotInTeam(Vec<String>),
5840    /// These users were not found in Dropbox.
5841    UsersNotFound(Vec<String>),
5842    /// A suspended user cannot be added to a group as [`GroupAccessType::Owner`].
5843    UserMustBeActiveToBeOwner,
5844    /// A company-managed group cannot be managed by a user.
5845    UserCannotBeManagerOfCompanyManagedGroup(Vec<String>),
5846    /// Catch-all used for unrecognized values returned from the server. Encountering this value
5847    /// typically indicates that this SDK version is out of date.
5848    Other,
5849}
5850
5851impl<'de> ::serde::de::Deserialize<'de> for GroupMembersAddError {
5852    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
5853        // union deserializer
5854        use serde::de::{self, MapAccess, Visitor};
5855        struct EnumVisitor;
5856        impl<'de> Visitor<'de> for EnumVisitor {
5857            type Value = GroupMembersAddError;
5858            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
5859                f.write_str("a GroupMembersAddError structure")
5860            }
5861            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
5862                let tag: &str = match map.next_key()? {
5863                    Some(".tag") => map.next_value()?,
5864                    _ => return Err(de::Error::missing_field(".tag"))
5865                };
5866                let value = match tag {
5867                    "group_not_found" => GroupMembersAddError::GroupNotFound,
5868                    "system_managed_group_disallowed" => GroupMembersAddError::SystemManagedGroupDisallowed,
5869                    "duplicate_user" => GroupMembersAddError::DuplicateUser,
5870                    "group_not_in_team" => GroupMembersAddError::GroupNotInTeam,
5871                    "members_not_in_team" => {
5872                        match map.next_key()? {
5873                            Some("members_not_in_team") => GroupMembersAddError::MembersNotInTeam(map.next_value()?),
5874                            None => return Err(de::Error::missing_field("members_not_in_team")),
5875                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
5876                        }
5877                    }
5878                    "users_not_found" => {
5879                        match map.next_key()? {
5880                            Some("users_not_found") => GroupMembersAddError::UsersNotFound(map.next_value()?),
5881                            None => return Err(de::Error::missing_field("users_not_found")),
5882                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
5883                        }
5884                    }
5885                    "user_must_be_active_to_be_owner" => GroupMembersAddError::UserMustBeActiveToBeOwner,
5886                    "user_cannot_be_manager_of_company_managed_group" => {
5887                        match map.next_key()? {
5888                            Some("user_cannot_be_manager_of_company_managed_group") => GroupMembersAddError::UserCannotBeManagerOfCompanyManagedGroup(map.next_value()?),
5889                            None => return Err(de::Error::missing_field("user_cannot_be_manager_of_company_managed_group")),
5890                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
5891                        }
5892                    }
5893                    _ => GroupMembersAddError::Other,
5894                };
5895                crate::eat_json_fields(&mut map)?;
5896                Ok(value)
5897            }
5898        }
5899        const VARIANTS: &[&str] = &["group_not_found",
5900                                    "other",
5901                                    "system_managed_group_disallowed",
5902                                    "duplicate_user",
5903                                    "group_not_in_team",
5904                                    "members_not_in_team",
5905                                    "users_not_found",
5906                                    "user_must_be_active_to_be_owner",
5907                                    "user_cannot_be_manager_of_company_managed_group"];
5908        deserializer.deserialize_struct("GroupMembersAddError", VARIANTS, EnumVisitor)
5909    }
5910}
5911
5912impl ::serde::ser::Serialize for GroupMembersAddError {
5913    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
5914        // union serializer
5915        use serde::ser::SerializeStruct;
5916        match self {
5917            GroupMembersAddError::GroupNotFound => {
5918                // unit
5919                let mut s = serializer.serialize_struct("GroupMembersAddError", 1)?;
5920                s.serialize_field(".tag", "group_not_found")?;
5921                s.end()
5922            }
5923            GroupMembersAddError::SystemManagedGroupDisallowed => {
5924                // unit
5925                let mut s = serializer.serialize_struct("GroupMembersAddError", 1)?;
5926                s.serialize_field(".tag", "system_managed_group_disallowed")?;
5927                s.end()
5928            }
5929            GroupMembersAddError::DuplicateUser => {
5930                // unit
5931                let mut s = serializer.serialize_struct("GroupMembersAddError", 1)?;
5932                s.serialize_field(".tag", "duplicate_user")?;
5933                s.end()
5934            }
5935            GroupMembersAddError::GroupNotInTeam => {
5936                // unit
5937                let mut s = serializer.serialize_struct("GroupMembersAddError", 1)?;
5938                s.serialize_field(".tag", "group_not_in_team")?;
5939                s.end()
5940            }
5941            GroupMembersAddError::MembersNotInTeam(x) => {
5942                // primitive
5943                let mut s = serializer.serialize_struct("GroupMembersAddError", 2)?;
5944                s.serialize_field(".tag", "members_not_in_team")?;
5945                s.serialize_field("members_not_in_team", x)?;
5946                s.end()
5947            }
5948            GroupMembersAddError::UsersNotFound(x) => {
5949                // primitive
5950                let mut s = serializer.serialize_struct("GroupMembersAddError", 2)?;
5951                s.serialize_field(".tag", "users_not_found")?;
5952                s.serialize_field("users_not_found", x)?;
5953                s.end()
5954            }
5955            GroupMembersAddError::UserMustBeActiveToBeOwner => {
5956                // unit
5957                let mut s = serializer.serialize_struct("GroupMembersAddError", 1)?;
5958                s.serialize_field(".tag", "user_must_be_active_to_be_owner")?;
5959                s.end()
5960            }
5961            GroupMembersAddError::UserCannotBeManagerOfCompanyManagedGroup(x) => {
5962                // primitive
5963                let mut s = serializer.serialize_struct("GroupMembersAddError", 2)?;
5964                s.serialize_field(".tag", "user_cannot_be_manager_of_company_managed_group")?;
5965                s.serialize_field("user_cannot_be_manager_of_company_managed_group", x)?;
5966                s.end()
5967            }
5968            GroupMembersAddError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
5969        }
5970    }
5971}
5972
5973impl ::std::error::Error for GroupMembersAddError {
5974}
5975
5976impl ::std::fmt::Display for GroupMembersAddError {
5977    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
5978        match self {
5979            GroupMembersAddError::GroupNotFound => f.write_str("No matching group found. No groups match the specified group ID."),
5980            GroupMembersAddError::SystemManagedGroupDisallowed => f.write_str("This operation is not supported on system-managed groups."),
5981            GroupMembersAddError::DuplicateUser => f.write_str("You cannot add duplicate users. One or more of the members you are trying to add is already a member of the group."),
5982            GroupMembersAddError::GroupNotInTeam => f.write_str("Group is not in this team. You cannot add members to a group that is outside of your team."),
5983            GroupMembersAddError::MembersNotInTeam(inner) => write!(f, "members_not_in_team: {:?}", inner),
5984            GroupMembersAddError::UsersNotFound(inner) => write!(f, "These users were not found in Dropbox: {:?}", inner),
5985            GroupMembersAddError::UserCannotBeManagerOfCompanyManagedGroup(inner) => write!(f, "A company-managed group cannot be managed by a user: {:?}", inner),
5986            _ => write!(f, "{:?}", *self),
5987        }
5988    }
5989}
5990
5991// union extends GroupSelectorWithTeamGroupError
5992impl From<GroupSelectorWithTeamGroupError> for GroupMembersAddError {
5993    fn from(parent: GroupSelectorWithTeamGroupError) -> Self {
5994        match parent {
5995            GroupSelectorWithTeamGroupError::GroupNotFound => GroupMembersAddError::GroupNotFound,
5996            GroupSelectorWithTeamGroupError::Other => GroupMembersAddError::Other,
5997            GroupSelectorWithTeamGroupError::SystemManagedGroupDisallowed => GroupMembersAddError::SystemManagedGroupDisallowed,
5998        }
5999    }
6000}
6001/// Result returned by [`groups_members_add()`](crate::team::groups_members_add) and
6002/// [`groups_members_remove()`](crate::team::groups_members_remove).
6003#[derive(Debug, Clone, PartialEq, Eq)]
6004#[non_exhaustive] // structs may have more fields added in the future.
6005pub struct GroupMembersChangeResult {
6006    /// The group info after member change operation has been performed.
6007    pub group_info: GroupFullInfo,
6008    /// For legacy purposes async_job_id will always return one space ' '. Formerly, it was an ID
6009    /// that was used to obtain the status of granting/revoking group-owned resources. It's no
6010    /// longer necessary because the async processing now happens automatically.
6011    pub async_job_id: crate::types::dbx_async::AsyncJobId,
6012}
6013
6014impl GroupMembersChangeResult {
6015    pub fn new(
6016        group_info: GroupFullInfo,
6017        async_job_id: crate::types::dbx_async::AsyncJobId,
6018    ) -> Self {
6019        GroupMembersChangeResult {
6020            group_info,
6021            async_job_id,
6022        }
6023    }
6024}
6025
6026const GROUP_MEMBERS_CHANGE_RESULT_FIELDS: &[&str] = &["group_info",
6027                                                      "async_job_id"];
6028impl GroupMembersChangeResult {
6029    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
6030        map: V,
6031    ) -> Result<GroupMembersChangeResult, V::Error> {
6032        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
6033    }
6034
6035    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
6036        mut map: V,
6037        optional: bool,
6038    ) -> Result<Option<GroupMembersChangeResult>, V::Error> {
6039        let mut field_group_info = None;
6040        let mut field_async_job_id = None;
6041        let mut nothing = true;
6042        while let Some(key) = map.next_key::<&str>()? {
6043            nothing = false;
6044            match key {
6045                "group_info" => {
6046                    if field_group_info.is_some() {
6047                        return Err(::serde::de::Error::duplicate_field("group_info"));
6048                    }
6049                    field_group_info = Some(map.next_value()?);
6050                }
6051                "async_job_id" => {
6052                    if field_async_job_id.is_some() {
6053                        return Err(::serde::de::Error::duplicate_field("async_job_id"));
6054                    }
6055                    field_async_job_id = Some(map.next_value()?);
6056                }
6057                _ => {
6058                    // unknown field allowed and ignored
6059                    map.next_value::<::serde_json::Value>()?;
6060                }
6061            }
6062        }
6063        if optional && nothing {
6064            return Ok(None);
6065        }
6066        let result = GroupMembersChangeResult {
6067            group_info: field_group_info.ok_or_else(|| ::serde::de::Error::missing_field("group_info"))?,
6068            async_job_id: field_async_job_id.ok_or_else(|| ::serde::de::Error::missing_field("async_job_id"))?,
6069        };
6070        Ok(Some(result))
6071    }
6072
6073    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
6074        &self,
6075        s: &mut S::SerializeStruct,
6076    ) -> Result<(), S::Error> {
6077        use serde::ser::SerializeStruct;
6078        s.serialize_field("group_info", &self.group_info)?;
6079        s.serialize_field("async_job_id", &self.async_job_id)?;
6080        Ok(())
6081    }
6082}
6083
6084impl<'de> ::serde::de::Deserialize<'de> for GroupMembersChangeResult {
6085    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
6086        // struct deserializer
6087        use serde::de::{MapAccess, Visitor};
6088        struct StructVisitor;
6089        impl<'de> Visitor<'de> for StructVisitor {
6090            type Value = GroupMembersChangeResult;
6091            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
6092                f.write_str("a GroupMembersChangeResult struct")
6093            }
6094            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
6095                GroupMembersChangeResult::internal_deserialize(map)
6096            }
6097        }
6098        deserializer.deserialize_struct("GroupMembersChangeResult", GROUP_MEMBERS_CHANGE_RESULT_FIELDS, StructVisitor)
6099    }
6100}
6101
6102impl ::serde::ser::Serialize for GroupMembersChangeResult {
6103    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
6104        // struct serializer
6105        use serde::ser::SerializeStruct;
6106        let mut s = serializer.serialize_struct("GroupMembersChangeResult", 2)?;
6107        self.internal_serialize::<S>(&mut s)?;
6108        s.end()
6109    }
6110}
6111
6112#[derive(Debug, Clone, PartialEq, Eq)]
6113#[non_exhaustive] // structs may have more fields added in the future.
6114pub struct GroupMembersRemoveArg {
6115    /// Group from which users will be removed.
6116    pub group: GroupSelector,
6117    /// List of users to be removed from the group.
6118    pub users: Vec<UserSelectorArg>,
6119    /// Whether to return the list of members in the group.  Note that the default value will cause
6120    /// all the group members  to be returned in the response. This may take a long time for large
6121    /// groups.
6122    pub return_members: bool,
6123}
6124
6125impl GroupMembersRemoveArg {
6126    pub fn new(group: GroupSelector, users: Vec<UserSelectorArg>) -> Self {
6127        GroupMembersRemoveArg {
6128            group,
6129            users,
6130            return_members: true,
6131        }
6132    }
6133
6134    pub fn with_return_members(mut self, value: bool) -> Self {
6135        self.return_members = value;
6136        self
6137    }
6138}
6139
6140const GROUP_MEMBERS_REMOVE_ARG_FIELDS: &[&str] = &["group",
6141                                                   "users",
6142                                                   "return_members"];
6143impl GroupMembersRemoveArg {
6144    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
6145        map: V,
6146    ) -> Result<GroupMembersRemoveArg, V::Error> {
6147        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
6148    }
6149
6150    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
6151        mut map: V,
6152        optional: bool,
6153    ) -> Result<Option<GroupMembersRemoveArg>, V::Error> {
6154        let mut field_group = None;
6155        let mut field_users = None;
6156        let mut field_return_members = None;
6157        let mut nothing = true;
6158        while let Some(key) = map.next_key::<&str>()? {
6159            nothing = false;
6160            match key {
6161                "group" => {
6162                    if field_group.is_some() {
6163                        return Err(::serde::de::Error::duplicate_field("group"));
6164                    }
6165                    field_group = Some(map.next_value()?);
6166                }
6167                "users" => {
6168                    if field_users.is_some() {
6169                        return Err(::serde::de::Error::duplicate_field("users"));
6170                    }
6171                    field_users = Some(map.next_value()?);
6172                }
6173                "return_members" => {
6174                    if field_return_members.is_some() {
6175                        return Err(::serde::de::Error::duplicate_field("return_members"));
6176                    }
6177                    field_return_members = Some(map.next_value()?);
6178                }
6179                _ => {
6180                    // unknown field allowed and ignored
6181                    map.next_value::<::serde_json::Value>()?;
6182                }
6183            }
6184        }
6185        if optional && nothing {
6186            return Ok(None);
6187        }
6188        let result = GroupMembersRemoveArg {
6189            group: field_group.ok_or_else(|| ::serde::de::Error::missing_field("group"))?,
6190            users: field_users.ok_or_else(|| ::serde::de::Error::missing_field("users"))?,
6191            return_members: field_return_members.unwrap_or(true),
6192        };
6193        Ok(Some(result))
6194    }
6195
6196    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
6197        &self,
6198        s: &mut S::SerializeStruct,
6199    ) -> Result<(), S::Error> {
6200        use serde::ser::SerializeStruct;
6201        s.serialize_field("group", &self.group)?;
6202        s.serialize_field("users", &self.users)?;
6203        if !self.return_members {
6204            s.serialize_field("return_members", &self.return_members)?;
6205        }
6206        Ok(())
6207    }
6208}
6209
6210impl<'de> ::serde::de::Deserialize<'de> for GroupMembersRemoveArg {
6211    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
6212        // struct deserializer
6213        use serde::de::{MapAccess, Visitor};
6214        struct StructVisitor;
6215        impl<'de> Visitor<'de> for StructVisitor {
6216            type Value = GroupMembersRemoveArg;
6217            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
6218                f.write_str("a GroupMembersRemoveArg struct")
6219            }
6220            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
6221                GroupMembersRemoveArg::internal_deserialize(map)
6222            }
6223        }
6224        deserializer.deserialize_struct("GroupMembersRemoveArg", GROUP_MEMBERS_REMOVE_ARG_FIELDS, StructVisitor)
6225    }
6226}
6227
6228impl ::serde::ser::Serialize for GroupMembersRemoveArg {
6229    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
6230        // struct serializer
6231        use serde::ser::SerializeStruct;
6232        let mut s = serializer.serialize_struct("GroupMembersRemoveArg", 3)?;
6233        self.internal_serialize::<S>(&mut s)?;
6234        s.end()
6235    }
6236}
6237
6238// struct extends IncludeMembersArg
6239impl From<GroupMembersRemoveArg> for IncludeMembersArg {
6240    fn from(subtype: GroupMembersRemoveArg) -> Self {
6241        Self {
6242            return_members: subtype.return_members,
6243        }
6244    }
6245}
6246#[derive(Debug, Clone, PartialEq, Eq)]
6247#[non_exhaustive] // variants may be added in the future
6248pub enum GroupMembersRemoveError {
6249    /// No matching group found. No groups match the specified group ID.
6250    GroupNotFound,
6251    /// This operation is not supported on system-managed groups.
6252    SystemManagedGroupDisallowed,
6253    /// At least one of the specified users is not a member of the group.
6254    MemberNotInGroup,
6255    /// Group is not in this team. You cannot remove members from a group that is outside of your
6256    /// team.
6257    GroupNotInTeam,
6258    /// These members are not part of your team.
6259    MembersNotInTeam(Vec<String>),
6260    /// These users were not found in Dropbox.
6261    UsersNotFound(Vec<String>),
6262    /// Catch-all used for unrecognized values returned from the server. Encountering this value
6263    /// typically indicates that this SDK version is out of date.
6264    Other,
6265}
6266
6267impl<'de> ::serde::de::Deserialize<'de> for GroupMembersRemoveError {
6268    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
6269        // union deserializer
6270        use serde::de::{self, MapAccess, Visitor};
6271        struct EnumVisitor;
6272        impl<'de> Visitor<'de> for EnumVisitor {
6273            type Value = GroupMembersRemoveError;
6274            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
6275                f.write_str("a GroupMembersRemoveError structure")
6276            }
6277            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
6278                let tag: &str = match map.next_key()? {
6279                    Some(".tag") => map.next_value()?,
6280                    _ => return Err(de::Error::missing_field(".tag"))
6281                };
6282                let value = match tag {
6283                    "group_not_found" => GroupMembersRemoveError::GroupNotFound,
6284                    "system_managed_group_disallowed" => GroupMembersRemoveError::SystemManagedGroupDisallowed,
6285                    "member_not_in_group" => GroupMembersRemoveError::MemberNotInGroup,
6286                    "group_not_in_team" => GroupMembersRemoveError::GroupNotInTeam,
6287                    "members_not_in_team" => {
6288                        match map.next_key()? {
6289                            Some("members_not_in_team") => GroupMembersRemoveError::MembersNotInTeam(map.next_value()?),
6290                            None => return Err(de::Error::missing_field("members_not_in_team")),
6291                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
6292                        }
6293                    }
6294                    "users_not_found" => {
6295                        match map.next_key()? {
6296                            Some("users_not_found") => GroupMembersRemoveError::UsersNotFound(map.next_value()?),
6297                            None => return Err(de::Error::missing_field("users_not_found")),
6298                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
6299                        }
6300                    }
6301                    _ => GroupMembersRemoveError::Other,
6302                };
6303                crate::eat_json_fields(&mut map)?;
6304                Ok(value)
6305            }
6306        }
6307        const VARIANTS: &[&str] = &["group_not_found",
6308                                    "other",
6309                                    "system_managed_group_disallowed",
6310                                    "member_not_in_group",
6311                                    "group_not_in_team",
6312                                    "members_not_in_team",
6313                                    "users_not_found"];
6314        deserializer.deserialize_struct("GroupMembersRemoveError", VARIANTS, EnumVisitor)
6315    }
6316}
6317
6318impl ::serde::ser::Serialize for GroupMembersRemoveError {
6319    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
6320        // union serializer
6321        use serde::ser::SerializeStruct;
6322        match self {
6323            GroupMembersRemoveError::GroupNotFound => {
6324                // unit
6325                let mut s = serializer.serialize_struct("GroupMembersRemoveError", 1)?;
6326                s.serialize_field(".tag", "group_not_found")?;
6327                s.end()
6328            }
6329            GroupMembersRemoveError::SystemManagedGroupDisallowed => {
6330                // unit
6331                let mut s = serializer.serialize_struct("GroupMembersRemoveError", 1)?;
6332                s.serialize_field(".tag", "system_managed_group_disallowed")?;
6333                s.end()
6334            }
6335            GroupMembersRemoveError::MemberNotInGroup => {
6336                // unit
6337                let mut s = serializer.serialize_struct("GroupMembersRemoveError", 1)?;
6338                s.serialize_field(".tag", "member_not_in_group")?;
6339                s.end()
6340            }
6341            GroupMembersRemoveError::GroupNotInTeam => {
6342                // unit
6343                let mut s = serializer.serialize_struct("GroupMembersRemoveError", 1)?;
6344                s.serialize_field(".tag", "group_not_in_team")?;
6345                s.end()
6346            }
6347            GroupMembersRemoveError::MembersNotInTeam(x) => {
6348                // primitive
6349                let mut s = serializer.serialize_struct("GroupMembersRemoveError", 2)?;
6350                s.serialize_field(".tag", "members_not_in_team")?;
6351                s.serialize_field("members_not_in_team", x)?;
6352                s.end()
6353            }
6354            GroupMembersRemoveError::UsersNotFound(x) => {
6355                // primitive
6356                let mut s = serializer.serialize_struct("GroupMembersRemoveError", 2)?;
6357                s.serialize_field(".tag", "users_not_found")?;
6358                s.serialize_field("users_not_found", x)?;
6359                s.end()
6360            }
6361            GroupMembersRemoveError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
6362        }
6363    }
6364}
6365
6366impl ::std::error::Error for GroupMembersRemoveError {
6367}
6368
6369impl ::std::fmt::Display for GroupMembersRemoveError {
6370    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
6371        match self {
6372            GroupMembersRemoveError::GroupNotFound => f.write_str("No matching group found. No groups match the specified group ID."),
6373            GroupMembersRemoveError::SystemManagedGroupDisallowed => f.write_str("This operation is not supported on system-managed groups."),
6374            GroupMembersRemoveError::MemberNotInGroup => f.write_str("At least one of the specified users is not a member of the group."),
6375            GroupMembersRemoveError::GroupNotInTeam => f.write_str("Group is not in this team. You cannot remove members from a group that is outside of your team."),
6376            GroupMembersRemoveError::MembersNotInTeam(inner) => write!(f, "These members are not part of your team: {:?}", inner),
6377            GroupMembersRemoveError::UsersNotFound(inner) => write!(f, "These users were not found in Dropbox: {:?}", inner),
6378            _ => write!(f, "{:?}", *self),
6379        }
6380    }
6381}
6382
6383// union extends GroupMembersSelectorError
6384impl From<GroupMembersSelectorError> for GroupMembersRemoveError {
6385    fn from(parent: GroupMembersSelectorError) -> Self {
6386        match parent {
6387            GroupMembersSelectorError::GroupNotFound => GroupMembersRemoveError::GroupNotFound,
6388            GroupMembersSelectorError::Other => GroupMembersRemoveError::Other,
6389            GroupMembersSelectorError::SystemManagedGroupDisallowed => GroupMembersRemoveError::SystemManagedGroupDisallowed,
6390            GroupMembersSelectorError::MemberNotInGroup => GroupMembersRemoveError::MemberNotInGroup,
6391        }
6392    }
6393}
6394/// Argument for selecting a group and a list of users.
6395#[derive(Debug, Clone, PartialEq, Eq)]
6396#[non_exhaustive] // structs may have more fields added in the future.
6397pub struct GroupMembersSelector {
6398    /// Specify a group.
6399    pub group: GroupSelector,
6400    /// A list of users that are members of `group`.
6401    pub users: UsersSelectorArg,
6402}
6403
6404impl GroupMembersSelector {
6405    pub fn new(group: GroupSelector, users: UsersSelectorArg) -> Self {
6406        GroupMembersSelector {
6407            group,
6408            users,
6409        }
6410    }
6411}
6412
6413const GROUP_MEMBERS_SELECTOR_FIELDS: &[&str] = &["group",
6414                                                 "users"];
6415impl GroupMembersSelector {
6416    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
6417        map: V,
6418    ) -> Result<GroupMembersSelector, V::Error> {
6419        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
6420    }
6421
6422    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
6423        mut map: V,
6424        optional: bool,
6425    ) -> Result<Option<GroupMembersSelector>, V::Error> {
6426        let mut field_group = None;
6427        let mut field_users = None;
6428        let mut nothing = true;
6429        while let Some(key) = map.next_key::<&str>()? {
6430            nothing = false;
6431            match key {
6432                "group" => {
6433                    if field_group.is_some() {
6434                        return Err(::serde::de::Error::duplicate_field("group"));
6435                    }
6436                    field_group = Some(map.next_value()?);
6437                }
6438                "users" => {
6439                    if field_users.is_some() {
6440                        return Err(::serde::de::Error::duplicate_field("users"));
6441                    }
6442                    field_users = Some(map.next_value()?);
6443                }
6444                _ => {
6445                    // unknown field allowed and ignored
6446                    map.next_value::<::serde_json::Value>()?;
6447                }
6448            }
6449        }
6450        if optional && nothing {
6451            return Ok(None);
6452        }
6453        let result = GroupMembersSelector {
6454            group: field_group.ok_or_else(|| ::serde::de::Error::missing_field("group"))?,
6455            users: field_users.ok_or_else(|| ::serde::de::Error::missing_field("users"))?,
6456        };
6457        Ok(Some(result))
6458    }
6459
6460    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
6461        &self,
6462        s: &mut S::SerializeStruct,
6463    ) -> Result<(), S::Error> {
6464        use serde::ser::SerializeStruct;
6465        s.serialize_field("group", &self.group)?;
6466        s.serialize_field("users", &self.users)?;
6467        Ok(())
6468    }
6469}
6470
6471impl<'de> ::serde::de::Deserialize<'de> for GroupMembersSelector {
6472    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
6473        // struct deserializer
6474        use serde::de::{MapAccess, Visitor};
6475        struct StructVisitor;
6476        impl<'de> Visitor<'de> for StructVisitor {
6477            type Value = GroupMembersSelector;
6478            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
6479                f.write_str("a GroupMembersSelector struct")
6480            }
6481            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
6482                GroupMembersSelector::internal_deserialize(map)
6483            }
6484        }
6485        deserializer.deserialize_struct("GroupMembersSelector", GROUP_MEMBERS_SELECTOR_FIELDS, StructVisitor)
6486    }
6487}
6488
6489impl ::serde::ser::Serialize for GroupMembersSelector {
6490    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
6491        // struct serializer
6492        use serde::ser::SerializeStruct;
6493        let mut s = serializer.serialize_struct("GroupMembersSelector", 2)?;
6494        self.internal_serialize::<S>(&mut s)?;
6495        s.end()
6496    }
6497}
6498
6499/// Error that can be raised when [`GroupMembersSelector`] is used, and the users are required to be
6500/// members of the specified group.
6501#[derive(Debug, Clone, PartialEq, Eq)]
6502#[non_exhaustive] // variants may be added in the future
6503pub enum GroupMembersSelectorError {
6504    /// No matching group found. No groups match the specified group ID.
6505    GroupNotFound,
6506    /// This operation is not supported on system-managed groups.
6507    SystemManagedGroupDisallowed,
6508    /// At least one of the specified users is not a member of the group.
6509    MemberNotInGroup,
6510    /// Catch-all used for unrecognized values returned from the server. Encountering this value
6511    /// typically indicates that this SDK version is out of date.
6512    Other,
6513}
6514
6515impl<'de> ::serde::de::Deserialize<'de> for GroupMembersSelectorError {
6516    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
6517        // union deserializer
6518        use serde::de::{self, MapAccess, Visitor};
6519        struct EnumVisitor;
6520        impl<'de> Visitor<'de> for EnumVisitor {
6521            type Value = GroupMembersSelectorError;
6522            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
6523                f.write_str("a GroupMembersSelectorError structure")
6524            }
6525            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
6526                let tag: &str = match map.next_key()? {
6527                    Some(".tag") => map.next_value()?,
6528                    _ => return Err(de::Error::missing_field(".tag"))
6529                };
6530                let value = match tag {
6531                    "group_not_found" => GroupMembersSelectorError::GroupNotFound,
6532                    "system_managed_group_disallowed" => GroupMembersSelectorError::SystemManagedGroupDisallowed,
6533                    "member_not_in_group" => GroupMembersSelectorError::MemberNotInGroup,
6534                    _ => GroupMembersSelectorError::Other,
6535                };
6536                crate::eat_json_fields(&mut map)?;
6537                Ok(value)
6538            }
6539        }
6540        const VARIANTS: &[&str] = &["group_not_found",
6541                                    "other",
6542                                    "system_managed_group_disallowed",
6543                                    "member_not_in_group"];
6544        deserializer.deserialize_struct("GroupMembersSelectorError", VARIANTS, EnumVisitor)
6545    }
6546}
6547
6548impl ::serde::ser::Serialize for GroupMembersSelectorError {
6549    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
6550        // union serializer
6551        use serde::ser::SerializeStruct;
6552        match self {
6553            GroupMembersSelectorError::GroupNotFound => {
6554                // unit
6555                let mut s = serializer.serialize_struct("GroupMembersSelectorError", 1)?;
6556                s.serialize_field(".tag", "group_not_found")?;
6557                s.end()
6558            }
6559            GroupMembersSelectorError::SystemManagedGroupDisallowed => {
6560                // unit
6561                let mut s = serializer.serialize_struct("GroupMembersSelectorError", 1)?;
6562                s.serialize_field(".tag", "system_managed_group_disallowed")?;
6563                s.end()
6564            }
6565            GroupMembersSelectorError::MemberNotInGroup => {
6566                // unit
6567                let mut s = serializer.serialize_struct("GroupMembersSelectorError", 1)?;
6568                s.serialize_field(".tag", "member_not_in_group")?;
6569                s.end()
6570            }
6571            GroupMembersSelectorError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
6572        }
6573    }
6574}
6575
6576impl ::std::error::Error for GroupMembersSelectorError {
6577}
6578
6579impl ::std::fmt::Display for GroupMembersSelectorError {
6580    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
6581        match self {
6582            GroupMembersSelectorError::GroupNotFound => f.write_str("No matching group found. No groups match the specified group ID."),
6583            GroupMembersSelectorError::SystemManagedGroupDisallowed => f.write_str("This operation is not supported on system-managed groups."),
6584            GroupMembersSelectorError::MemberNotInGroup => f.write_str("At least one of the specified users is not a member of the group."),
6585            _ => write!(f, "{:?}", *self),
6586        }
6587    }
6588}
6589
6590// union extends GroupSelectorWithTeamGroupError
6591impl From<GroupSelectorWithTeamGroupError> for GroupMembersSelectorError {
6592    fn from(parent: GroupSelectorWithTeamGroupError) -> Self {
6593        match parent {
6594            GroupSelectorWithTeamGroupError::GroupNotFound => GroupMembersSelectorError::GroupNotFound,
6595            GroupSelectorWithTeamGroupError::Other => GroupMembersSelectorError::Other,
6596            GroupSelectorWithTeamGroupError::SystemManagedGroupDisallowed => GroupMembersSelectorError::SystemManagedGroupDisallowed,
6597        }
6598    }
6599}
6600#[derive(Debug, Clone, PartialEq, Eq)]
6601#[non_exhaustive] // structs may have more fields added in the future.
6602pub struct GroupMembersSetAccessTypeArg {
6603    /// Specify a group.
6604    pub group: GroupSelector,
6605    /// Identity of a user that is a member of `group`.
6606    pub user: UserSelectorArg,
6607    /// New group access type the user will have.
6608    pub access_type: GroupAccessType,
6609    /// Whether to return the list of members in the group.  Note that the default value will cause
6610    /// all the group members  to be returned in the response. This may take a long time for large
6611    /// groups.
6612    pub return_members: bool,
6613}
6614
6615impl GroupMembersSetAccessTypeArg {
6616    pub fn new(group: GroupSelector, user: UserSelectorArg, access_type: GroupAccessType) -> Self {
6617        GroupMembersSetAccessTypeArg {
6618            group,
6619            user,
6620            access_type,
6621            return_members: true,
6622        }
6623    }
6624
6625    pub fn with_return_members(mut self, value: bool) -> Self {
6626        self.return_members = value;
6627        self
6628    }
6629}
6630
6631const GROUP_MEMBERS_SET_ACCESS_TYPE_ARG_FIELDS: &[&str] = &["group",
6632                                                            "user",
6633                                                            "access_type",
6634                                                            "return_members"];
6635impl GroupMembersSetAccessTypeArg {
6636    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
6637        map: V,
6638    ) -> Result<GroupMembersSetAccessTypeArg, V::Error> {
6639        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
6640    }
6641
6642    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
6643        mut map: V,
6644        optional: bool,
6645    ) -> Result<Option<GroupMembersSetAccessTypeArg>, V::Error> {
6646        let mut field_group = None;
6647        let mut field_user = None;
6648        let mut field_access_type = None;
6649        let mut field_return_members = None;
6650        let mut nothing = true;
6651        while let Some(key) = map.next_key::<&str>()? {
6652            nothing = false;
6653            match key {
6654                "group" => {
6655                    if field_group.is_some() {
6656                        return Err(::serde::de::Error::duplicate_field("group"));
6657                    }
6658                    field_group = Some(map.next_value()?);
6659                }
6660                "user" => {
6661                    if field_user.is_some() {
6662                        return Err(::serde::de::Error::duplicate_field("user"));
6663                    }
6664                    field_user = Some(map.next_value()?);
6665                }
6666                "access_type" => {
6667                    if field_access_type.is_some() {
6668                        return Err(::serde::de::Error::duplicate_field("access_type"));
6669                    }
6670                    field_access_type = Some(map.next_value()?);
6671                }
6672                "return_members" => {
6673                    if field_return_members.is_some() {
6674                        return Err(::serde::de::Error::duplicate_field("return_members"));
6675                    }
6676                    field_return_members = Some(map.next_value()?);
6677                }
6678                _ => {
6679                    // unknown field allowed and ignored
6680                    map.next_value::<::serde_json::Value>()?;
6681                }
6682            }
6683        }
6684        if optional && nothing {
6685            return Ok(None);
6686        }
6687        let result = GroupMembersSetAccessTypeArg {
6688            group: field_group.ok_or_else(|| ::serde::de::Error::missing_field("group"))?,
6689            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
6690            access_type: field_access_type.ok_or_else(|| ::serde::de::Error::missing_field("access_type"))?,
6691            return_members: field_return_members.unwrap_or(true),
6692        };
6693        Ok(Some(result))
6694    }
6695
6696    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
6697        &self,
6698        s: &mut S::SerializeStruct,
6699    ) -> Result<(), S::Error> {
6700        use serde::ser::SerializeStruct;
6701        s.serialize_field("group", &self.group)?;
6702        s.serialize_field("user", &self.user)?;
6703        s.serialize_field("access_type", &self.access_type)?;
6704        if !self.return_members {
6705            s.serialize_field("return_members", &self.return_members)?;
6706        }
6707        Ok(())
6708    }
6709}
6710
6711impl<'de> ::serde::de::Deserialize<'de> for GroupMembersSetAccessTypeArg {
6712    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
6713        // struct deserializer
6714        use serde::de::{MapAccess, Visitor};
6715        struct StructVisitor;
6716        impl<'de> Visitor<'de> for StructVisitor {
6717            type Value = GroupMembersSetAccessTypeArg;
6718            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
6719                f.write_str("a GroupMembersSetAccessTypeArg struct")
6720            }
6721            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
6722                GroupMembersSetAccessTypeArg::internal_deserialize(map)
6723            }
6724        }
6725        deserializer.deserialize_struct("GroupMembersSetAccessTypeArg", GROUP_MEMBERS_SET_ACCESS_TYPE_ARG_FIELDS, StructVisitor)
6726    }
6727}
6728
6729impl ::serde::ser::Serialize for GroupMembersSetAccessTypeArg {
6730    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
6731        // struct serializer
6732        use serde::ser::SerializeStruct;
6733        let mut s = serializer.serialize_struct("GroupMembersSetAccessTypeArg", 4)?;
6734        self.internal_serialize::<S>(&mut s)?;
6735        s.end()
6736    }
6737}
6738
6739// struct extends GroupMemberSelector
6740impl From<GroupMembersSetAccessTypeArg> for GroupMemberSelector {
6741    fn from(subtype: GroupMembersSetAccessTypeArg) -> Self {
6742        Self {
6743            group: subtype.group,
6744            user: subtype.user,
6745        }
6746    }
6747}
6748/// Argument for selecting a single group, either by group_id or by external group ID.
6749#[derive(Debug, Clone, PartialEq, Eq)]
6750pub enum GroupSelector {
6751    /// Group ID.
6752    GroupId(crate::types::team_common::GroupId),
6753    /// External ID of the group.
6754    GroupExternalId(crate::types::team_common::GroupExternalId),
6755}
6756
6757impl<'de> ::serde::de::Deserialize<'de> for GroupSelector {
6758    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
6759        // union deserializer
6760        use serde::de::{self, MapAccess, Visitor};
6761        struct EnumVisitor;
6762        impl<'de> Visitor<'de> for EnumVisitor {
6763            type Value = GroupSelector;
6764            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
6765                f.write_str("a GroupSelector structure")
6766            }
6767            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
6768                let tag: &str = match map.next_key()? {
6769                    Some(".tag") => map.next_value()?,
6770                    _ => return Err(de::Error::missing_field(".tag"))
6771                };
6772                let value = match tag {
6773                    "group_id" => {
6774                        match map.next_key()? {
6775                            Some("group_id") => GroupSelector::GroupId(map.next_value()?),
6776                            None => return Err(de::Error::missing_field("group_id")),
6777                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
6778                        }
6779                    }
6780                    "group_external_id" => {
6781                        match map.next_key()? {
6782                            Some("group_external_id") => GroupSelector::GroupExternalId(map.next_value()?),
6783                            None => return Err(de::Error::missing_field("group_external_id")),
6784                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
6785                        }
6786                    }
6787                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
6788                };
6789                crate::eat_json_fields(&mut map)?;
6790                Ok(value)
6791            }
6792        }
6793        const VARIANTS: &[&str] = &["group_id",
6794                                    "group_external_id"];
6795        deserializer.deserialize_struct("GroupSelector", VARIANTS, EnumVisitor)
6796    }
6797}
6798
6799impl ::serde::ser::Serialize for GroupSelector {
6800    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
6801        // union serializer
6802        use serde::ser::SerializeStruct;
6803        match self {
6804            GroupSelector::GroupId(x) => {
6805                // primitive
6806                let mut s = serializer.serialize_struct("GroupSelector", 2)?;
6807                s.serialize_field(".tag", "group_id")?;
6808                s.serialize_field("group_id", x)?;
6809                s.end()
6810            }
6811            GroupSelector::GroupExternalId(x) => {
6812                // primitive
6813                let mut s = serializer.serialize_struct("GroupSelector", 2)?;
6814                s.serialize_field(".tag", "group_external_id")?;
6815                s.serialize_field("group_external_id", x)?;
6816                s.end()
6817            }
6818        }
6819    }
6820}
6821
6822/// Error that can be raised when [`GroupSelector`] is used.
6823#[derive(Debug, Clone, PartialEq, Eq)]
6824#[non_exhaustive] // variants may be added in the future
6825pub enum GroupSelectorError {
6826    /// No matching group found. No groups match the specified group ID.
6827    GroupNotFound,
6828    /// Catch-all used for unrecognized values returned from the server. Encountering this value
6829    /// typically indicates that this SDK version is out of date.
6830    Other,
6831}
6832
6833impl<'de> ::serde::de::Deserialize<'de> for GroupSelectorError {
6834    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
6835        // union deserializer
6836        use serde::de::{self, MapAccess, Visitor};
6837        struct EnumVisitor;
6838        impl<'de> Visitor<'de> for EnumVisitor {
6839            type Value = GroupSelectorError;
6840            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
6841                f.write_str("a GroupSelectorError structure")
6842            }
6843            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
6844                let tag: &str = match map.next_key()? {
6845                    Some(".tag") => map.next_value()?,
6846                    _ => return Err(de::Error::missing_field(".tag"))
6847                };
6848                let value = match tag {
6849                    "group_not_found" => GroupSelectorError::GroupNotFound,
6850                    _ => GroupSelectorError::Other,
6851                };
6852                crate::eat_json_fields(&mut map)?;
6853                Ok(value)
6854            }
6855        }
6856        const VARIANTS: &[&str] = &["group_not_found",
6857                                    "other"];
6858        deserializer.deserialize_struct("GroupSelectorError", VARIANTS, EnumVisitor)
6859    }
6860}
6861
6862impl ::serde::ser::Serialize for GroupSelectorError {
6863    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
6864        // union serializer
6865        use serde::ser::SerializeStruct;
6866        match self {
6867            GroupSelectorError::GroupNotFound => {
6868                // unit
6869                let mut s = serializer.serialize_struct("GroupSelectorError", 1)?;
6870                s.serialize_field(".tag", "group_not_found")?;
6871                s.end()
6872            }
6873            GroupSelectorError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
6874        }
6875    }
6876}
6877
6878impl ::std::error::Error for GroupSelectorError {
6879}
6880
6881impl ::std::fmt::Display for GroupSelectorError {
6882    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
6883        match self {
6884            GroupSelectorError::GroupNotFound => f.write_str("No matching group found. No groups match the specified group ID."),
6885            _ => write!(f, "{:?}", *self),
6886        }
6887    }
6888}
6889
6890/// Error that can be raised when [`GroupSelector`] is used and team groups are disallowed from
6891/// being used.
6892#[derive(Debug, Clone, PartialEq, Eq)]
6893#[non_exhaustive] // variants may be added in the future
6894pub enum GroupSelectorWithTeamGroupError {
6895    /// No matching group found. No groups match the specified group ID.
6896    GroupNotFound,
6897    /// This operation is not supported on system-managed groups.
6898    SystemManagedGroupDisallowed,
6899    /// Catch-all used for unrecognized values returned from the server. Encountering this value
6900    /// typically indicates that this SDK version is out of date.
6901    Other,
6902}
6903
6904impl<'de> ::serde::de::Deserialize<'de> for GroupSelectorWithTeamGroupError {
6905    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
6906        // union deserializer
6907        use serde::de::{self, MapAccess, Visitor};
6908        struct EnumVisitor;
6909        impl<'de> Visitor<'de> for EnumVisitor {
6910            type Value = GroupSelectorWithTeamGroupError;
6911            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
6912                f.write_str("a GroupSelectorWithTeamGroupError structure")
6913            }
6914            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
6915                let tag: &str = match map.next_key()? {
6916                    Some(".tag") => map.next_value()?,
6917                    _ => return Err(de::Error::missing_field(".tag"))
6918                };
6919                let value = match tag {
6920                    "group_not_found" => GroupSelectorWithTeamGroupError::GroupNotFound,
6921                    "system_managed_group_disallowed" => GroupSelectorWithTeamGroupError::SystemManagedGroupDisallowed,
6922                    _ => GroupSelectorWithTeamGroupError::Other,
6923                };
6924                crate::eat_json_fields(&mut map)?;
6925                Ok(value)
6926            }
6927        }
6928        const VARIANTS: &[&str] = &["group_not_found",
6929                                    "other",
6930                                    "system_managed_group_disallowed"];
6931        deserializer.deserialize_struct("GroupSelectorWithTeamGroupError", VARIANTS, EnumVisitor)
6932    }
6933}
6934
6935impl ::serde::ser::Serialize for GroupSelectorWithTeamGroupError {
6936    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
6937        // union serializer
6938        use serde::ser::SerializeStruct;
6939        match self {
6940            GroupSelectorWithTeamGroupError::GroupNotFound => {
6941                // unit
6942                let mut s = serializer.serialize_struct("GroupSelectorWithTeamGroupError", 1)?;
6943                s.serialize_field(".tag", "group_not_found")?;
6944                s.end()
6945            }
6946            GroupSelectorWithTeamGroupError::SystemManagedGroupDisallowed => {
6947                // unit
6948                let mut s = serializer.serialize_struct("GroupSelectorWithTeamGroupError", 1)?;
6949                s.serialize_field(".tag", "system_managed_group_disallowed")?;
6950                s.end()
6951            }
6952            GroupSelectorWithTeamGroupError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
6953        }
6954    }
6955}
6956
6957impl ::std::error::Error for GroupSelectorWithTeamGroupError {
6958}
6959
6960impl ::std::fmt::Display for GroupSelectorWithTeamGroupError {
6961    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
6962        match self {
6963            GroupSelectorWithTeamGroupError::GroupNotFound => f.write_str("No matching group found. No groups match the specified group ID."),
6964            GroupSelectorWithTeamGroupError::SystemManagedGroupDisallowed => f.write_str("This operation is not supported on system-managed groups."),
6965            _ => write!(f, "{:?}", *self),
6966        }
6967    }
6968}
6969
6970// union extends GroupSelectorError
6971impl From<GroupSelectorError> for GroupSelectorWithTeamGroupError {
6972    fn from(parent: GroupSelectorError) -> Self {
6973        match parent {
6974            GroupSelectorError::GroupNotFound => GroupSelectorWithTeamGroupError::GroupNotFound,
6975            GroupSelectorError::Other => GroupSelectorWithTeamGroupError::Other,
6976        }
6977    }
6978}
6979#[derive(Debug, Clone, PartialEq, Eq)]
6980#[non_exhaustive] // structs may have more fields added in the future.
6981pub struct GroupUpdateArgs {
6982    /// Specify a group.
6983    pub group: GroupSelector,
6984    /// Whether to return the list of members in the group.  Note that the default value will cause
6985    /// all the group members  to be returned in the response. This may take a long time for large
6986    /// groups.
6987    pub return_members: bool,
6988    /// Optional argument. Set group name to this if provided.
6989    pub new_group_name: Option<String>,
6990    /// Optional argument. New group external ID. If the argument is None, the group's external_id
6991    /// won't be updated. If the argument is empty string, the group's external id will be cleared.
6992    pub new_group_external_id: Option<crate::types::team_common::GroupExternalId>,
6993    /// Set new group management type, if provided.
6994    pub new_group_management_type: Option<crate::types::team_common::GroupManagementType>,
6995}
6996
6997impl GroupUpdateArgs {
6998    pub fn new(group: GroupSelector) -> Self {
6999        GroupUpdateArgs {
7000            group,
7001            return_members: true,
7002            new_group_name: None,
7003            new_group_external_id: None,
7004            new_group_management_type: None,
7005        }
7006    }
7007
7008    pub fn with_return_members(mut self, value: bool) -> Self {
7009        self.return_members = value;
7010        self
7011    }
7012
7013    pub fn with_new_group_name(mut self, value: String) -> Self {
7014        self.new_group_name = Some(value);
7015        self
7016    }
7017
7018    pub fn with_new_group_external_id(
7019        mut self,
7020        value: crate::types::team_common::GroupExternalId,
7021    ) -> Self {
7022        self.new_group_external_id = Some(value);
7023        self
7024    }
7025
7026    pub fn with_new_group_management_type(
7027        mut self,
7028        value: crate::types::team_common::GroupManagementType,
7029    ) -> Self {
7030        self.new_group_management_type = Some(value);
7031        self
7032    }
7033}
7034
7035const GROUP_UPDATE_ARGS_FIELDS: &[&str] = &["group",
7036                                            "return_members",
7037                                            "new_group_name",
7038                                            "new_group_external_id",
7039                                            "new_group_management_type"];
7040impl GroupUpdateArgs {
7041    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
7042        map: V,
7043    ) -> Result<GroupUpdateArgs, V::Error> {
7044        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
7045    }
7046
7047    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
7048        mut map: V,
7049        optional: bool,
7050    ) -> Result<Option<GroupUpdateArgs>, V::Error> {
7051        let mut field_group = None;
7052        let mut field_return_members = None;
7053        let mut field_new_group_name = None;
7054        let mut field_new_group_external_id = None;
7055        let mut field_new_group_management_type = None;
7056        let mut nothing = true;
7057        while let Some(key) = map.next_key::<&str>()? {
7058            nothing = false;
7059            match key {
7060                "group" => {
7061                    if field_group.is_some() {
7062                        return Err(::serde::de::Error::duplicate_field("group"));
7063                    }
7064                    field_group = Some(map.next_value()?);
7065                }
7066                "return_members" => {
7067                    if field_return_members.is_some() {
7068                        return Err(::serde::de::Error::duplicate_field("return_members"));
7069                    }
7070                    field_return_members = Some(map.next_value()?);
7071                }
7072                "new_group_name" => {
7073                    if field_new_group_name.is_some() {
7074                        return Err(::serde::de::Error::duplicate_field("new_group_name"));
7075                    }
7076                    field_new_group_name = Some(map.next_value()?);
7077                }
7078                "new_group_external_id" => {
7079                    if field_new_group_external_id.is_some() {
7080                        return Err(::serde::de::Error::duplicate_field("new_group_external_id"));
7081                    }
7082                    field_new_group_external_id = Some(map.next_value()?);
7083                }
7084                "new_group_management_type" => {
7085                    if field_new_group_management_type.is_some() {
7086                        return Err(::serde::de::Error::duplicate_field("new_group_management_type"));
7087                    }
7088                    field_new_group_management_type = Some(map.next_value()?);
7089                }
7090                _ => {
7091                    // unknown field allowed and ignored
7092                    map.next_value::<::serde_json::Value>()?;
7093                }
7094            }
7095        }
7096        if optional && nothing {
7097            return Ok(None);
7098        }
7099        let result = GroupUpdateArgs {
7100            group: field_group.ok_or_else(|| ::serde::de::Error::missing_field("group"))?,
7101            return_members: field_return_members.unwrap_or(true),
7102            new_group_name: field_new_group_name.and_then(Option::flatten),
7103            new_group_external_id: field_new_group_external_id.and_then(Option::flatten),
7104            new_group_management_type: field_new_group_management_type.and_then(Option::flatten),
7105        };
7106        Ok(Some(result))
7107    }
7108
7109    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
7110        &self,
7111        s: &mut S::SerializeStruct,
7112    ) -> Result<(), S::Error> {
7113        use serde::ser::SerializeStruct;
7114        s.serialize_field("group", &self.group)?;
7115        if !self.return_members {
7116            s.serialize_field("return_members", &self.return_members)?;
7117        }
7118        if let Some(val) = &self.new_group_name {
7119            s.serialize_field("new_group_name", val)?;
7120        }
7121        if let Some(val) = &self.new_group_external_id {
7122            s.serialize_field("new_group_external_id", val)?;
7123        }
7124        if let Some(val) = &self.new_group_management_type {
7125            s.serialize_field("new_group_management_type", val)?;
7126        }
7127        Ok(())
7128    }
7129}
7130
7131impl<'de> ::serde::de::Deserialize<'de> for GroupUpdateArgs {
7132    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
7133        // struct deserializer
7134        use serde::de::{MapAccess, Visitor};
7135        struct StructVisitor;
7136        impl<'de> Visitor<'de> for StructVisitor {
7137            type Value = GroupUpdateArgs;
7138            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
7139                f.write_str("a GroupUpdateArgs struct")
7140            }
7141            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
7142                GroupUpdateArgs::internal_deserialize(map)
7143            }
7144        }
7145        deserializer.deserialize_struct("GroupUpdateArgs", GROUP_UPDATE_ARGS_FIELDS, StructVisitor)
7146    }
7147}
7148
7149impl ::serde::ser::Serialize for GroupUpdateArgs {
7150    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
7151        // struct serializer
7152        use serde::ser::SerializeStruct;
7153        let mut s = serializer.serialize_struct("GroupUpdateArgs", 5)?;
7154        self.internal_serialize::<S>(&mut s)?;
7155        s.end()
7156    }
7157}
7158
7159// struct extends IncludeMembersArg
7160impl From<GroupUpdateArgs> for IncludeMembersArg {
7161    fn from(subtype: GroupUpdateArgs) -> Self {
7162        Self {
7163            return_members: subtype.return_members,
7164        }
7165    }
7166}
7167#[derive(Debug, Clone, PartialEq, Eq)]
7168#[non_exhaustive] // variants may be added in the future
7169pub enum GroupUpdateError {
7170    /// No matching group found. No groups match the specified group ID.
7171    GroupNotFound,
7172    /// This operation is not supported on system-managed groups.
7173    SystemManagedGroupDisallowed,
7174    /// The requested group name is already being used by another group.
7175    GroupNameAlreadyUsed,
7176    /// Group name is empty or has invalid characters.
7177    GroupNameInvalid,
7178    /// The requested external ID is already being used by another group.
7179    ExternalIdAlreadyInUse,
7180    /// Catch-all used for unrecognized values returned from the server. Encountering this value
7181    /// typically indicates that this SDK version is out of date.
7182    Other,
7183}
7184
7185impl<'de> ::serde::de::Deserialize<'de> for GroupUpdateError {
7186    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
7187        // union deserializer
7188        use serde::de::{self, MapAccess, Visitor};
7189        struct EnumVisitor;
7190        impl<'de> Visitor<'de> for EnumVisitor {
7191            type Value = GroupUpdateError;
7192            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
7193                f.write_str("a GroupUpdateError structure")
7194            }
7195            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
7196                let tag: &str = match map.next_key()? {
7197                    Some(".tag") => map.next_value()?,
7198                    _ => return Err(de::Error::missing_field(".tag"))
7199                };
7200                let value = match tag {
7201                    "group_not_found" => GroupUpdateError::GroupNotFound,
7202                    "system_managed_group_disallowed" => GroupUpdateError::SystemManagedGroupDisallowed,
7203                    "group_name_already_used" => GroupUpdateError::GroupNameAlreadyUsed,
7204                    "group_name_invalid" => GroupUpdateError::GroupNameInvalid,
7205                    "external_id_already_in_use" => GroupUpdateError::ExternalIdAlreadyInUse,
7206                    _ => GroupUpdateError::Other,
7207                };
7208                crate::eat_json_fields(&mut map)?;
7209                Ok(value)
7210            }
7211        }
7212        const VARIANTS: &[&str] = &["group_not_found",
7213                                    "other",
7214                                    "system_managed_group_disallowed",
7215                                    "group_name_already_used",
7216                                    "group_name_invalid",
7217                                    "external_id_already_in_use"];
7218        deserializer.deserialize_struct("GroupUpdateError", VARIANTS, EnumVisitor)
7219    }
7220}
7221
7222impl ::serde::ser::Serialize for GroupUpdateError {
7223    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
7224        // union serializer
7225        use serde::ser::SerializeStruct;
7226        match self {
7227            GroupUpdateError::GroupNotFound => {
7228                // unit
7229                let mut s = serializer.serialize_struct("GroupUpdateError", 1)?;
7230                s.serialize_field(".tag", "group_not_found")?;
7231                s.end()
7232            }
7233            GroupUpdateError::SystemManagedGroupDisallowed => {
7234                // unit
7235                let mut s = serializer.serialize_struct("GroupUpdateError", 1)?;
7236                s.serialize_field(".tag", "system_managed_group_disallowed")?;
7237                s.end()
7238            }
7239            GroupUpdateError::GroupNameAlreadyUsed => {
7240                // unit
7241                let mut s = serializer.serialize_struct("GroupUpdateError", 1)?;
7242                s.serialize_field(".tag", "group_name_already_used")?;
7243                s.end()
7244            }
7245            GroupUpdateError::GroupNameInvalid => {
7246                // unit
7247                let mut s = serializer.serialize_struct("GroupUpdateError", 1)?;
7248                s.serialize_field(".tag", "group_name_invalid")?;
7249                s.end()
7250            }
7251            GroupUpdateError::ExternalIdAlreadyInUse => {
7252                // unit
7253                let mut s = serializer.serialize_struct("GroupUpdateError", 1)?;
7254                s.serialize_field(".tag", "external_id_already_in_use")?;
7255                s.end()
7256            }
7257            GroupUpdateError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
7258        }
7259    }
7260}
7261
7262impl ::std::error::Error for GroupUpdateError {
7263}
7264
7265impl ::std::fmt::Display for GroupUpdateError {
7266    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
7267        match self {
7268            GroupUpdateError::GroupNotFound => f.write_str("No matching group found. No groups match the specified group ID."),
7269            GroupUpdateError::SystemManagedGroupDisallowed => f.write_str("This operation is not supported on system-managed groups."),
7270            GroupUpdateError::GroupNameAlreadyUsed => f.write_str("The requested group name is already being used by another group."),
7271            GroupUpdateError::GroupNameInvalid => f.write_str("Group name is empty or has invalid characters."),
7272            GroupUpdateError::ExternalIdAlreadyInUse => f.write_str("The requested external ID is already being used by another group."),
7273            _ => write!(f, "{:?}", *self),
7274        }
7275    }
7276}
7277
7278// union extends GroupSelectorWithTeamGroupError
7279impl From<GroupSelectorWithTeamGroupError> for GroupUpdateError {
7280    fn from(parent: GroupSelectorWithTeamGroupError) -> Self {
7281        match parent {
7282            GroupSelectorWithTeamGroupError::GroupNotFound => GroupUpdateError::GroupNotFound,
7283            GroupSelectorWithTeamGroupError::Other => GroupUpdateError::Other,
7284            GroupSelectorWithTeamGroupError::SystemManagedGroupDisallowed => GroupUpdateError::SystemManagedGroupDisallowed,
7285        }
7286    }
7287}
7288#[derive(Debug, Clone, PartialEq, Eq)]
7289#[non_exhaustive] // variants may be added in the future
7290pub enum GroupsGetInfoError {
7291    /// The group is not on your team.
7292    GroupNotOnTeam,
7293    /// Catch-all used for unrecognized values returned from the server. Encountering this value
7294    /// typically indicates that this SDK version is out of date.
7295    Other,
7296}
7297
7298impl<'de> ::serde::de::Deserialize<'de> for GroupsGetInfoError {
7299    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
7300        // union deserializer
7301        use serde::de::{self, MapAccess, Visitor};
7302        struct EnumVisitor;
7303        impl<'de> Visitor<'de> for EnumVisitor {
7304            type Value = GroupsGetInfoError;
7305            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
7306                f.write_str("a GroupsGetInfoError structure")
7307            }
7308            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
7309                let tag: &str = match map.next_key()? {
7310                    Some(".tag") => map.next_value()?,
7311                    _ => return Err(de::Error::missing_field(".tag"))
7312                };
7313                let value = match tag {
7314                    "group_not_on_team" => GroupsGetInfoError::GroupNotOnTeam,
7315                    _ => GroupsGetInfoError::Other,
7316                };
7317                crate::eat_json_fields(&mut map)?;
7318                Ok(value)
7319            }
7320        }
7321        const VARIANTS: &[&str] = &["group_not_on_team",
7322                                    "other"];
7323        deserializer.deserialize_struct("GroupsGetInfoError", VARIANTS, EnumVisitor)
7324    }
7325}
7326
7327impl ::serde::ser::Serialize for GroupsGetInfoError {
7328    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
7329        // union serializer
7330        use serde::ser::SerializeStruct;
7331        match self {
7332            GroupsGetInfoError::GroupNotOnTeam => {
7333                // unit
7334                let mut s = serializer.serialize_struct("GroupsGetInfoError", 1)?;
7335                s.serialize_field(".tag", "group_not_on_team")?;
7336                s.end()
7337            }
7338            GroupsGetInfoError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
7339        }
7340    }
7341}
7342
7343impl ::std::error::Error for GroupsGetInfoError {
7344}
7345
7346impl ::std::fmt::Display for GroupsGetInfoError {
7347    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
7348        match self {
7349            GroupsGetInfoError::GroupNotOnTeam => f.write_str("The group is not on your team."),
7350            _ => write!(f, "{:?}", *self),
7351        }
7352    }
7353}
7354
7355#[derive(Debug, Clone, PartialEq, Eq)]
7356pub enum GroupsGetInfoItem {
7357    /// An ID that was provided as a parameter to
7358    /// [`groups_get_info()`](crate::team::groups_get_info), and did not match a corresponding
7359    /// group. The ID can be a group ID, or an external ID, depending on how the method was called.
7360    IdNotFound(String),
7361    /// Info about a group.
7362    GroupInfo(GroupFullInfo),
7363}
7364
7365impl<'de> ::serde::de::Deserialize<'de> for GroupsGetInfoItem {
7366    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
7367        // union deserializer
7368        use serde::de::{self, MapAccess, Visitor};
7369        struct EnumVisitor;
7370        impl<'de> Visitor<'de> for EnumVisitor {
7371            type Value = GroupsGetInfoItem;
7372            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
7373                f.write_str("a GroupsGetInfoItem structure")
7374            }
7375            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
7376                let tag: &str = match map.next_key()? {
7377                    Some(".tag") => map.next_value()?,
7378                    _ => return Err(de::Error::missing_field(".tag"))
7379                };
7380                let value = match tag {
7381                    "id_not_found" => {
7382                        match map.next_key()? {
7383                            Some("id_not_found") => GroupsGetInfoItem::IdNotFound(map.next_value()?),
7384                            None => return Err(de::Error::missing_field("id_not_found")),
7385                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
7386                        }
7387                    }
7388                    "group_info" => GroupsGetInfoItem::GroupInfo(GroupFullInfo::internal_deserialize(&mut map)?),
7389                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
7390                };
7391                crate::eat_json_fields(&mut map)?;
7392                Ok(value)
7393            }
7394        }
7395        const VARIANTS: &[&str] = &["id_not_found",
7396                                    "group_info"];
7397        deserializer.deserialize_struct("GroupsGetInfoItem", VARIANTS, EnumVisitor)
7398    }
7399}
7400
7401impl ::serde::ser::Serialize for GroupsGetInfoItem {
7402    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
7403        // union serializer
7404        use serde::ser::SerializeStruct;
7405        match self {
7406            GroupsGetInfoItem::IdNotFound(x) => {
7407                // primitive
7408                let mut s = serializer.serialize_struct("GroupsGetInfoItem", 2)?;
7409                s.serialize_field(".tag", "id_not_found")?;
7410                s.serialize_field("id_not_found", x)?;
7411                s.end()
7412            }
7413            GroupsGetInfoItem::GroupInfo(x) => {
7414                // struct
7415                let mut s = serializer.serialize_struct("GroupsGetInfoItem", 8)?;
7416                s.serialize_field(".tag", "group_info")?;
7417                x.internal_serialize::<S>(&mut s)?;
7418                s.end()
7419            }
7420        }
7421    }
7422}
7423
7424#[derive(Debug, Clone, PartialEq, Eq)]
7425#[non_exhaustive] // structs may have more fields added in the future.
7426pub struct GroupsListArg {
7427    /// Number of results to return per call.
7428    pub limit: u32,
7429}
7430
7431impl Default for GroupsListArg {
7432    fn default() -> Self {
7433        GroupsListArg {
7434            limit: 1000,
7435        }
7436    }
7437}
7438
7439impl GroupsListArg {
7440    pub fn with_limit(mut self, value: u32) -> Self {
7441        self.limit = value;
7442        self
7443    }
7444}
7445
7446const GROUPS_LIST_ARG_FIELDS: &[&str] = &["limit"];
7447impl GroupsListArg {
7448    // no _opt deserializer
7449    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
7450        mut map: V,
7451    ) -> Result<GroupsListArg, V::Error> {
7452        let mut field_limit = None;
7453        while let Some(key) = map.next_key::<&str>()? {
7454            match key {
7455                "limit" => {
7456                    if field_limit.is_some() {
7457                        return Err(::serde::de::Error::duplicate_field("limit"));
7458                    }
7459                    field_limit = Some(map.next_value()?);
7460                }
7461                _ => {
7462                    // unknown field allowed and ignored
7463                    map.next_value::<::serde_json::Value>()?;
7464                }
7465            }
7466        }
7467        let result = GroupsListArg {
7468            limit: field_limit.unwrap_or(1000),
7469        };
7470        Ok(result)
7471    }
7472
7473    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
7474        &self,
7475        s: &mut S::SerializeStruct,
7476    ) -> Result<(), S::Error> {
7477        use serde::ser::SerializeStruct;
7478        if self.limit != 1000 {
7479            s.serialize_field("limit", &self.limit)?;
7480        }
7481        Ok(())
7482    }
7483}
7484
7485impl<'de> ::serde::de::Deserialize<'de> for GroupsListArg {
7486    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
7487        // struct deserializer
7488        use serde::de::{MapAccess, Visitor};
7489        struct StructVisitor;
7490        impl<'de> Visitor<'de> for StructVisitor {
7491            type Value = GroupsListArg;
7492            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
7493                f.write_str("a GroupsListArg struct")
7494            }
7495            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
7496                GroupsListArg::internal_deserialize(map)
7497            }
7498        }
7499        deserializer.deserialize_struct("GroupsListArg", GROUPS_LIST_ARG_FIELDS, StructVisitor)
7500    }
7501}
7502
7503impl ::serde::ser::Serialize for GroupsListArg {
7504    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
7505        // struct serializer
7506        use serde::ser::SerializeStruct;
7507        let mut s = serializer.serialize_struct("GroupsListArg", 1)?;
7508        self.internal_serialize::<S>(&mut s)?;
7509        s.end()
7510    }
7511}
7512
7513#[derive(Debug, Clone, PartialEq, Eq)]
7514#[non_exhaustive] // structs may have more fields added in the future.
7515pub struct GroupsListContinueArg {
7516    /// Indicates from what point to get the next set of groups.
7517    pub cursor: String,
7518}
7519
7520impl GroupsListContinueArg {
7521    pub fn new(cursor: String) -> Self {
7522        GroupsListContinueArg {
7523            cursor,
7524        }
7525    }
7526}
7527
7528const GROUPS_LIST_CONTINUE_ARG_FIELDS: &[&str] = &["cursor"];
7529impl GroupsListContinueArg {
7530    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
7531        map: V,
7532    ) -> Result<GroupsListContinueArg, V::Error> {
7533        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
7534    }
7535
7536    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
7537        mut map: V,
7538        optional: bool,
7539    ) -> Result<Option<GroupsListContinueArg>, V::Error> {
7540        let mut field_cursor = None;
7541        let mut nothing = true;
7542        while let Some(key) = map.next_key::<&str>()? {
7543            nothing = false;
7544            match key {
7545                "cursor" => {
7546                    if field_cursor.is_some() {
7547                        return Err(::serde::de::Error::duplicate_field("cursor"));
7548                    }
7549                    field_cursor = Some(map.next_value()?);
7550                }
7551                _ => {
7552                    // unknown field allowed and ignored
7553                    map.next_value::<::serde_json::Value>()?;
7554                }
7555            }
7556        }
7557        if optional && nothing {
7558            return Ok(None);
7559        }
7560        let result = GroupsListContinueArg {
7561            cursor: field_cursor.ok_or_else(|| ::serde::de::Error::missing_field("cursor"))?,
7562        };
7563        Ok(Some(result))
7564    }
7565
7566    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
7567        &self,
7568        s: &mut S::SerializeStruct,
7569    ) -> Result<(), S::Error> {
7570        use serde::ser::SerializeStruct;
7571        s.serialize_field("cursor", &self.cursor)?;
7572        Ok(())
7573    }
7574}
7575
7576impl<'de> ::serde::de::Deserialize<'de> for GroupsListContinueArg {
7577    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
7578        // struct deserializer
7579        use serde::de::{MapAccess, Visitor};
7580        struct StructVisitor;
7581        impl<'de> Visitor<'de> for StructVisitor {
7582            type Value = GroupsListContinueArg;
7583            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
7584                f.write_str("a GroupsListContinueArg struct")
7585            }
7586            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
7587                GroupsListContinueArg::internal_deserialize(map)
7588            }
7589        }
7590        deserializer.deserialize_struct("GroupsListContinueArg", GROUPS_LIST_CONTINUE_ARG_FIELDS, StructVisitor)
7591    }
7592}
7593
7594impl ::serde::ser::Serialize for GroupsListContinueArg {
7595    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
7596        // struct serializer
7597        use serde::ser::SerializeStruct;
7598        let mut s = serializer.serialize_struct("GroupsListContinueArg", 1)?;
7599        self.internal_serialize::<S>(&mut s)?;
7600        s.end()
7601    }
7602}
7603
7604#[derive(Debug, Clone, PartialEq, Eq)]
7605#[non_exhaustive] // variants may be added in the future
7606pub enum GroupsListContinueError {
7607    /// The cursor is invalid.
7608    InvalidCursor,
7609    /// Catch-all used for unrecognized values returned from the server. Encountering this value
7610    /// typically indicates that this SDK version is out of date.
7611    Other,
7612}
7613
7614impl<'de> ::serde::de::Deserialize<'de> for GroupsListContinueError {
7615    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
7616        // union deserializer
7617        use serde::de::{self, MapAccess, Visitor};
7618        struct EnumVisitor;
7619        impl<'de> Visitor<'de> for EnumVisitor {
7620            type Value = GroupsListContinueError;
7621            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
7622                f.write_str("a GroupsListContinueError structure")
7623            }
7624            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
7625                let tag: &str = match map.next_key()? {
7626                    Some(".tag") => map.next_value()?,
7627                    _ => return Err(de::Error::missing_field(".tag"))
7628                };
7629                let value = match tag {
7630                    "invalid_cursor" => GroupsListContinueError::InvalidCursor,
7631                    _ => GroupsListContinueError::Other,
7632                };
7633                crate::eat_json_fields(&mut map)?;
7634                Ok(value)
7635            }
7636        }
7637        const VARIANTS: &[&str] = &["invalid_cursor",
7638                                    "other"];
7639        deserializer.deserialize_struct("GroupsListContinueError", VARIANTS, EnumVisitor)
7640    }
7641}
7642
7643impl ::serde::ser::Serialize for GroupsListContinueError {
7644    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
7645        // union serializer
7646        use serde::ser::SerializeStruct;
7647        match self {
7648            GroupsListContinueError::InvalidCursor => {
7649                // unit
7650                let mut s = serializer.serialize_struct("GroupsListContinueError", 1)?;
7651                s.serialize_field(".tag", "invalid_cursor")?;
7652                s.end()
7653            }
7654            GroupsListContinueError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
7655        }
7656    }
7657}
7658
7659impl ::std::error::Error for GroupsListContinueError {
7660}
7661
7662impl ::std::fmt::Display for GroupsListContinueError {
7663    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
7664        match self {
7665            GroupsListContinueError::InvalidCursor => f.write_str("The cursor is invalid."),
7666            _ => write!(f, "{:?}", *self),
7667        }
7668    }
7669}
7670
7671#[derive(Debug, Clone, PartialEq, Eq)]
7672#[non_exhaustive] // structs may have more fields added in the future.
7673pub struct GroupsListResult {
7674    pub groups: Vec<crate::types::team_common::GroupSummary>,
7675    /// Pass the cursor into [`groups_list_continue()`](crate::team::groups_list_continue) to obtain
7676    /// the additional groups.
7677    pub cursor: String,
7678    /// Is true if there are additional groups that have not been returned yet. An additional call
7679    /// to [`groups_list_continue()`](crate::team::groups_list_continue) can retrieve them.
7680    pub has_more: bool,
7681}
7682
7683impl GroupsListResult {
7684    pub fn new(
7685        groups: Vec<crate::types::team_common::GroupSummary>,
7686        cursor: String,
7687        has_more: bool,
7688    ) -> Self {
7689        GroupsListResult {
7690            groups,
7691            cursor,
7692            has_more,
7693        }
7694    }
7695}
7696
7697const GROUPS_LIST_RESULT_FIELDS: &[&str] = &["groups",
7698                                             "cursor",
7699                                             "has_more"];
7700impl GroupsListResult {
7701    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
7702        map: V,
7703    ) -> Result<GroupsListResult, V::Error> {
7704        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
7705    }
7706
7707    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
7708        mut map: V,
7709        optional: bool,
7710    ) -> Result<Option<GroupsListResult>, V::Error> {
7711        let mut field_groups = None;
7712        let mut field_cursor = None;
7713        let mut field_has_more = None;
7714        let mut nothing = true;
7715        while let Some(key) = map.next_key::<&str>()? {
7716            nothing = false;
7717            match key {
7718                "groups" => {
7719                    if field_groups.is_some() {
7720                        return Err(::serde::de::Error::duplicate_field("groups"));
7721                    }
7722                    field_groups = Some(map.next_value()?);
7723                }
7724                "cursor" => {
7725                    if field_cursor.is_some() {
7726                        return Err(::serde::de::Error::duplicate_field("cursor"));
7727                    }
7728                    field_cursor = Some(map.next_value()?);
7729                }
7730                "has_more" => {
7731                    if field_has_more.is_some() {
7732                        return Err(::serde::de::Error::duplicate_field("has_more"));
7733                    }
7734                    field_has_more = Some(map.next_value()?);
7735                }
7736                _ => {
7737                    // unknown field allowed and ignored
7738                    map.next_value::<::serde_json::Value>()?;
7739                }
7740            }
7741        }
7742        if optional && nothing {
7743            return Ok(None);
7744        }
7745        let result = GroupsListResult {
7746            groups: field_groups.ok_or_else(|| ::serde::de::Error::missing_field("groups"))?,
7747            cursor: field_cursor.ok_or_else(|| ::serde::de::Error::missing_field("cursor"))?,
7748            has_more: field_has_more.ok_or_else(|| ::serde::de::Error::missing_field("has_more"))?,
7749        };
7750        Ok(Some(result))
7751    }
7752
7753    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
7754        &self,
7755        s: &mut S::SerializeStruct,
7756    ) -> Result<(), S::Error> {
7757        use serde::ser::SerializeStruct;
7758        s.serialize_field("groups", &self.groups)?;
7759        s.serialize_field("cursor", &self.cursor)?;
7760        s.serialize_field("has_more", &self.has_more)?;
7761        Ok(())
7762    }
7763}
7764
7765impl<'de> ::serde::de::Deserialize<'de> for GroupsListResult {
7766    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
7767        // struct deserializer
7768        use serde::de::{MapAccess, Visitor};
7769        struct StructVisitor;
7770        impl<'de> Visitor<'de> for StructVisitor {
7771            type Value = GroupsListResult;
7772            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
7773                f.write_str("a GroupsListResult struct")
7774            }
7775            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
7776                GroupsListResult::internal_deserialize(map)
7777            }
7778        }
7779        deserializer.deserialize_struct("GroupsListResult", GROUPS_LIST_RESULT_FIELDS, StructVisitor)
7780    }
7781}
7782
7783impl ::serde::ser::Serialize for GroupsListResult {
7784    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
7785        // struct serializer
7786        use serde::ser::SerializeStruct;
7787        let mut s = serializer.serialize_struct("GroupsListResult", 3)?;
7788        self.internal_serialize::<S>(&mut s)?;
7789        s.end()
7790    }
7791}
7792
7793#[derive(Debug, Clone, PartialEq, Eq)]
7794#[non_exhaustive] // structs may have more fields added in the future.
7795pub struct GroupsMembersListArg {
7796    /// The group whose members are to be listed.
7797    pub group: GroupSelector,
7798    /// Number of results to return per call.
7799    pub limit: u32,
7800}
7801
7802impl GroupsMembersListArg {
7803    pub fn new(group: GroupSelector) -> Self {
7804        GroupsMembersListArg {
7805            group,
7806            limit: 1000,
7807        }
7808    }
7809
7810    pub fn with_limit(mut self, value: u32) -> Self {
7811        self.limit = value;
7812        self
7813    }
7814}
7815
7816const GROUPS_MEMBERS_LIST_ARG_FIELDS: &[&str] = &["group",
7817                                                  "limit"];
7818impl GroupsMembersListArg {
7819    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
7820        map: V,
7821    ) -> Result<GroupsMembersListArg, V::Error> {
7822        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
7823    }
7824
7825    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
7826        mut map: V,
7827        optional: bool,
7828    ) -> Result<Option<GroupsMembersListArg>, V::Error> {
7829        let mut field_group = None;
7830        let mut field_limit = None;
7831        let mut nothing = true;
7832        while let Some(key) = map.next_key::<&str>()? {
7833            nothing = false;
7834            match key {
7835                "group" => {
7836                    if field_group.is_some() {
7837                        return Err(::serde::de::Error::duplicate_field("group"));
7838                    }
7839                    field_group = Some(map.next_value()?);
7840                }
7841                "limit" => {
7842                    if field_limit.is_some() {
7843                        return Err(::serde::de::Error::duplicate_field("limit"));
7844                    }
7845                    field_limit = Some(map.next_value()?);
7846                }
7847                _ => {
7848                    // unknown field allowed and ignored
7849                    map.next_value::<::serde_json::Value>()?;
7850                }
7851            }
7852        }
7853        if optional && nothing {
7854            return Ok(None);
7855        }
7856        let result = GroupsMembersListArg {
7857            group: field_group.ok_or_else(|| ::serde::de::Error::missing_field("group"))?,
7858            limit: field_limit.unwrap_or(1000),
7859        };
7860        Ok(Some(result))
7861    }
7862
7863    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
7864        &self,
7865        s: &mut S::SerializeStruct,
7866    ) -> Result<(), S::Error> {
7867        use serde::ser::SerializeStruct;
7868        s.serialize_field("group", &self.group)?;
7869        if self.limit != 1000 {
7870            s.serialize_field("limit", &self.limit)?;
7871        }
7872        Ok(())
7873    }
7874}
7875
7876impl<'de> ::serde::de::Deserialize<'de> for GroupsMembersListArg {
7877    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
7878        // struct deserializer
7879        use serde::de::{MapAccess, Visitor};
7880        struct StructVisitor;
7881        impl<'de> Visitor<'de> for StructVisitor {
7882            type Value = GroupsMembersListArg;
7883            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
7884                f.write_str("a GroupsMembersListArg struct")
7885            }
7886            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
7887                GroupsMembersListArg::internal_deserialize(map)
7888            }
7889        }
7890        deserializer.deserialize_struct("GroupsMembersListArg", GROUPS_MEMBERS_LIST_ARG_FIELDS, StructVisitor)
7891    }
7892}
7893
7894impl ::serde::ser::Serialize for GroupsMembersListArg {
7895    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
7896        // struct serializer
7897        use serde::ser::SerializeStruct;
7898        let mut s = serializer.serialize_struct("GroupsMembersListArg", 2)?;
7899        self.internal_serialize::<S>(&mut s)?;
7900        s.end()
7901    }
7902}
7903
7904#[derive(Debug, Clone, PartialEq, Eq)]
7905#[non_exhaustive] // structs may have more fields added in the future.
7906pub struct GroupsMembersListContinueArg {
7907    /// Indicates from what point to get the next set of groups.
7908    pub cursor: String,
7909}
7910
7911impl GroupsMembersListContinueArg {
7912    pub fn new(cursor: String) -> Self {
7913        GroupsMembersListContinueArg {
7914            cursor,
7915        }
7916    }
7917}
7918
7919const GROUPS_MEMBERS_LIST_CONTINUE_ARG_FIELDS: &[&str] = &["cursor"];
7920impl GroupsMembersListContinueArg {
7921    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
7922        map: V,
7923    ) -> Result<GroupsMembersListContinueArg, V::Error> {
7924        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
7925    }
7926
7927    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
7928        mut map: V,
7929        optional: bool,
7930    ) -> Result<Option<GroupsMembersListContinueArg>, V::Error> {
7931        let mut field_cursor = None;
7932        let mut nothing = true;
7933        while let Some(key) = map.next_key::<&str>()? {
7934            nothing = false;
7935            match key {
7936                "cursor" => {
7937                    if field_cursor.is_some() {
7938                        return Err(::serde::de::Error::duplicate_field("cursor"));
7939                    }
7940                    field_cursor = Some(map.next_value()?);
7941                }
7942                _ => {
7943                    // unknown field allowed and ignored
7944                    map.next_value::<::serde_json::Value>()?;
7945                }
7946            }
7947        }
7948        if optional && nothing {
7949            return Ok(None);
7950        }
7951        let result = GroupsMembersListContinueArg {
7952            cursor: field_cursor.ok_or_else(|| ::serde::de::Error::missing_field("cursor"))?,
7953        };
7954        Ok(Some(result))
7955    }
7956
7957    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
7958        &self,
7959        s: &mut S::SerializeStruct,
7960    ) -> Result<(), S::Error> {
7961        use serde::ser::SerializeStruct;
7962        s.serialize_field("cursor", &self.cursor)?;
7963        Ok(())
7964    }
7965}
7966
7967impl<'de> ::serde::de::Deserialize<'de> for GroupsMembersListContinueArg {
7968    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
7969        // struct deserializer
7970        use serde::de::{MapAccess, Visitor};
7971        struct StructVisitor;
7972        impl<'de> Visitor<'de> for StructVisitor {
7973            type Value = GroupsMembersListContinueArg;
7974            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
7975                f.write_str("a GroupsMembersListContinueArg struct")
7976            }
7977            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
7978                GroupsMembersListContinueArg::internal_deserialize(map)
7979            }
7980        }
7981        deserializer.deserialize_struct("GroupsMembersListContinueArg", GROUPS_MEMBERS_LIST_CONTINUE_ARG_FIELDS, StructVisitor)
7982    }
7983}
7984
7985impl ::serde::ser::Serialize for GroupsMembersListContinueArg {
7986    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
7987        // struct serializer
7988        use serde::ser::SerializeStruct;
7989        let mut s = serializer.serialize_struct("GroupsMembersListContinueArg", 1)?;
7990        self.internal_serialize::<S>(&mut s)?;
7991        s.end()
7992    }
7993}
7994
7995#[derive(Debug, Clone, PartialEq, Eq)]
7996#[non_exhaustive] // variants may be added in the future
7997pub enum GroupsMembersListContinueError {
7998    /// The cursor is invalid.
7999    InvalidCursor,
8000    /// Catch-all used for unrecognized values returned from the server. Encountering this value
8001    /// typically indicates that this SDK version is out of date.
8002    Other,
8003}
8004
8005impl<'de> ::serde::de::Deserialize<'de> for GroupsMembersListContinueError {
8006    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
8007        // union deserializer
8008        use serde::de::{self, MapAccess, Visitor};
8009        struct EnumVisitor;
8010        impl<'de> Visitor<'de> for EnumVisitor {
8011            type Value = GroupsMembersListContinueError;
8012            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
8013                f.write_str("a GroupsMembersListContinueError structure")
8014            }
8015            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
8016                let tag: &str = match map.next_key()? {
8017                    Some(".tag") => map.next_value()?,
8018                    _ => return Err(de::Error::missing_field(".tag"))
8019                };
8020                let value = match tag {
8021                    "invalid_cursor" => GroupsMembersListContinueError::InvalidCursor,
8022                    _ => GroupsMembersListContinueError::Other,
8023                };
8024                crate::eat_json_fields(&mut map)?;
8025                Ok(value)
8026            }
8027        }
8028        const VARIANTS: &[&str] = &["invalid_cursor",
8029                                    "other"];
8030        deserializer.deserialize_struct("GroupsMembersListContinueError", VARIANTS, EnumVisitor)
8031    }
8032}
8033
8034impl ::serde::ser::Serialize for GroupsMembersListContinueError {
8035    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
8036        // union serializer
8037        use serde::ser::SerializeStruct;
8038        match self {
8039            GroupsMembersListContinueError::InvalidCursor => {
8040                // unit
8041                let mut s = serializer.serialize_struct("GroupsMembersListContinueError", 1)?;
8042                s.serialize_field(".tag", "invalid_cursor")?;
8043                s.end()
8044            }
8045            GroupsMembersListContinueError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
8046        }
8047    }
8048}
8049
8050impl ::std::error::Error for GroupsMembersListContinueError {
8051}
8052
8053impl ::std::fmt::Display for GroupsMembersListContinueError {
8054    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
8055        match self {
8056            GroupsMembersListContinueError::InvalidCursor => f.write_str("The cursor is invalid."),
8057            _ => write!(f, "{:?}", *self),
8058        }
8059    }
8060}
8061
8062#[derive(Debug, Clone, PartialEq, Eq)]
8063#[non_exhaustive] // structs may have more fields added in the future.
8064pub struct GroupsMembersListResult {
8065    pub members: Vec<GroupMemberInfo>,
8066    /// Pass the cursor into
8067    /// [`groups_members_list_continue()`](crate::team::groups_members_list_continue) to obtain
8068    /// additional group members.
8069    pub cursor: String,
8070    /// Is true if there are additional group members that have not been returned yet. An additional
8071    /// call to [`groups_members_list_continue()`](crate::team::groups_members_list_continue) can
8072    /// retrieve them.
8073    pub has_more: bool,
8074}
8075
8076impl GroupsMembersListResult {
8077    pub fn new(members: Vec<GroupMemberInfo>, cursor: String, has_more: bool) -> Self {
8078        GroupsMembersListResult {
8079            members,
8080            cursor,
8081            has_more,
8082        }
8083    }
8084}
8085
8086const GROUPS_MEMBERS_LIST_RESULT_FIELDS: &[&str] = &["members",
8087                                                     "cursor",
8088                                                     "has_more"];
8089impl GroupsMembersListResult {
8090    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
8091        map: V,
8092    ) -> Result<GroupsMembersListResult, V::Error> {
8093        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
8094    }
8095
8096    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
8097        mut map: V,
8098        optional: bool,
8099    ) -> Result<Option<GroupsMembersListResult>, V::Error> {
8100        let mut field_members = None;
8101        let mut field_cursor = None;
8102        let mut field_has_more = None;
8103        let mut nothing = true;
8104        while let Some(key) = map.next_key::<&str>()? {
8105            nothing = false;
8106            match key {
8107                "members" => {
8108                    if field_members.is_some() {
8109                        return Err(::serde::de::Error::duplicate_field("members"));
8110                    }
8111                    field_members = Some(map.next_value()?);
8112                }
8113                "cursor" => {
8114                    if field_cursor.is_some() {
8115                        return Err(::serde::de::Error::duplicate_field("cursor"));
8116                    }
8117                    field_cursor = Some(map.next_value()?);
8118                }
8119                "has_more" => {
8120                    if field_has_more.is_some() {
8121                        return Err(::serde::de::Error::duplicate_field("has_more"));
8122                    }
8123                    field_has_more = Some(map.next_value()?);
8124                }
8125                _ => {
8126                    // unknown field allowed and ignored
8127                    map.next_value::<::serde_json::Value>()?;
8128                }
8129            }
8130        }
8131        if optional && nothing {
8132            return Ok(None);
8133        }
8134        let result = GroupsMembersListResult {
8135            members: field_members.ok_or_else(|| ::serde::de::Error::missing_field("members"))?,
8136            cursor: field_cursor.ok_or_else(|| ::serde::de::Error::missing_field("cursor"))?,
8137            has_more: field_has_more.ok_or_else(|| ::serde::de::Error::missing_field("has_more"))?,
8138        };
8139        Ok(Some(result))
8140    }
8141
8142    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
8143        &self,
8144        s: &mut S::SerializeStruct,
8145    ) -> Result<(), S::Error> {
8146        use serde::ser::SerializeStruct;
8147        s.serialize_field("members", &self.members)?;
8148        s.serialize_field("cursor", &self.cursor)?;
8149        s.serialize_field("has_more", &self.has_more)?;
8150        Ok(())
8151    }
8152}
8153
8154impl<'de> ::serde::de::Deserialize<'de> for GroupsMembersListResult {
8155    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
8156        // struct deserializer
8157        use serde::de::{MapAccess, Visitor};
8158        struct StructVisitor;
8159        impl<'de> Visitor<'de> for StructVisitor {
8160            type Value = GroupsMembersListResult;
8161            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
8162                f.write_str("a GroupsMembersListResult struct")
8163            }
8164            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
8165                GroupsMembersListResult::internal_deserialize(map)
8166            }
8167        }
8168        deserializer.deserialize_struct("GroupsMembersListResult", GROUPS_MEMBERS_LIST_RESULT_FIELDS, StructVisitor)
8169    }
8170}
8171
8172impl ::serde::ser::Serialize for GroupsMembersListResult {
8173    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
8174        // struct serializer
8175        use serde::ser::SerializeStruct;
8176        let mut s = serializer.serialize_struct("GroupsMembersListResult", 3)?;
8177        self.internal_serialize::<S>(&mut s)?;
8178        s.end()
8179    }
8180}
8181
8182#[derive(Debug, Clone, PartialEq, Eq)]
8183#[non_exhaustive] // variants may be added in the future
8184pub enum GroupsPollError {
8185    /// The job ID is invalid.
8186    InvalidAsyncJobId,
8187    /// Something went wrong with the job on Dropbox's end. You'll need to verify that the action
8188    /// you were taking succeeded, and if not, try again. This should happen very rarely.
8189    InternalError,
8190    /// You are not allowed to poll this job.
8191    AccessDenied,
8192    /// Catch-all used for unrecognized values returned from the server. Encountering this value
8193    /// typically indicates that this SDK version is out of date.
8194    Other,
8195}
8196
8197impl<'de> ::serde::de::Deserialize<'de> for GroupsPollError {
8198    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
8199        // union deserializer
8200        use serde::de::{self, MapAccess, Visitor};
8201        struct EnumVisitor;
8202        impl<'de> Visitor<'de> for EnumVisitor {
8203            type Value = GroupsPollError;
8204            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
8205                f.write_str("a GroupsPollError structure")
8206            }
8207            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
8208                let tag: &str = match map.next_key()? {
8209                    Some(".tag") => map.next_value()?,
8210                    _ => return Err(de::Error::missing_field(".tag"))
8211                };
8212                let value = match tag {
8213                    "invalid_async_job_id" => GroupsPollError::InvalidAsyncJobId,
8214                    "internal_error" => GroupsPollError::InternalError,
8215                    "access_denied" => GroupsPollError::AccessDenied,
8216                    _ => GroupsPollError::Other,
8217                };
8218                crate::eat_json_fields(&mut map)?;
8219                Ok(value)
8220            }
8221        }
8222        const VARIANTS: &[&str] = &["invalid_async_job_id",
8223                                    "internal_error",
8224                                    "other",
8225                                    "access_denied"];
8226        deserializer.deserialize_struct("GroupsPollError", VARIANTS, EnumVisitor)
8227    }
8228}
8229
8230impl ::serde::ser::Serialize for GroupsPollError {
8231    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
8232        // union serializer
8233        use serde::ser::SerializeStruct;
8234        match self {
8235            GroupsPollError::InvalidAsyncJobId => {
8236                // unit
8237                let mut s = serializer.serialize_struct("GroupsPollError", 1)?;
8238                s.serialize_field(".tag", "invalid_async_job_id")?;
8239                s.end()
8240            }
8241            GroupsPollError::InternalError => {
8242                // unit
8243                let mut s = serializer.serialize_struct("GroupsPollError", 1)?;
8244                s.serialize_field(".tag", "internal_error")?;
8245                s.end()
8246            }
8247            GroupsPollError::AccessDenied => {
8248                // unit
8249                let mut s = serializer.serialize_struct("GroupsPollError", 1)?;
8250                s.serialize_field(".tag", "access_denied")?;
8251                s.end()
8252            }
8253            GroupsPollError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
8254        }
8255    }
8256}
8257
8258impl ::std::error::Error for GroupsPollError {
8259}
8260
8261impl ::std::fmt::Display for GroupsPollError {
8262    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
8263        match self {
8264            GroupsPollError::InvalidAsyncJobId => f.write_str("The job ID is invalid."),
8265            GroupsPollError::InternalError => f.write_str("Something went wrong with the job on Dropbox's end. You'll need to verify that the action you were taking succeeded, and if not, try again. This should happen very rarely."),
8266            GroupsPollError::AccessDenied => f.write_str("You are not allowed to poll this job."),
8267            _ => write!(f, "{:?}", *self),
8268        }
8269    }
8270}
8271
8272// union extends crate::types::dbx_async::PollError
8273impl From<crate::types::dbx_async::PollError> for GroupsPollError {
8274    fn from(parent: crate::types::dbx_async::PollError) -> Self {
8275        match parent {
8276            crate::types::dbx_async::PollError::InvalidAsyncJobId => GroupsPollError::InvalidAsyncJobId,
8277            crate::types::dbx_async::PollError::InternalError => GroupsPollError::InternalError,
8278            crate::types::dbx_async::PollError::Other => GroupsPollError::Other,
8279        }
8280    }
8281}
8282/// Argument for selecting a list of groups, either by group_ids, or external group IDs.
8283#[derive(Debug, Clone, PartialEq, Eq)]
8284pub enum GroupsSelector {
8285    /// List of group IDs.
8286    GroupIds(Vec<crate::types::team_common::GroupId>),
8287    /// List of external IDs of groups.
8288    GroupExternalIds(Vec<String>),
8289}
8290
8291impl<'de> ::serde::de::Deserialize<'de> for GroupsSelector {
8292    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
8293        // union deserializer
8294        use serde::de::{self, MapAccess, Visitor};
8295        struct EnumVisitor;
8296        impl<'de> Visitor<'de> for EnumVisitor {
8297            type Value = GroupsSelector;
8298            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
8299                f.write_str("a GroupsSelector structure")
8300            }
8301            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
8302                let tag: &str = match map.next_key()? {
8303                    Some(".tag") => map.next_value()?,
8304                    _ => return Err(de::Error::missing_field(".tag"))
8305                };
8306                let value = match tag {
8307                    "group_ids" => {
8308                        match map.next_key()? {
8309                            Some("group_ids") => GroupsSelector::GroupIds(map.next_value()?),
8310                            None => return Err(de::Error::missing_field("group_ids")),
8311                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
8312                        }
8313                    }
8314                    "group_external_ids" => {
8315                        match map.next_key()? {
8316                            Some("group_external_ids") => GroupsSelector::GroupExternalIds(map.next_value()?),
8317                            None => return Err(de::Error::missing_field("group_external_ids")),
8318                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
8319                        }
8320                    }
8321                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
8322                };
8323                crate::eat_json_fields(&mut map)?;
8324                Ok(value)
8325            }
8326        }
8327        const VARIANTS: &[&str] = &["group_ids",
8328                                    "group_external_ids"];
8329        deserializer.deserialize_struct("GroupsSelector", VARIANTS, EnumVisitor)
8330    }
8331}
8332
8333impl ::serde::ser::Serialize for GroupsSelector {
8334    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
8335        // union serializer
8336        use serde::ser::SerializeStruct;
8337        match self {
8338            GroupsSelector::GroupIds(x) => {
8339                // primitive
8340                let mut s = serializer.serialize_struct("GroupsSelector", 2)?;
8341                s.serialize_field(".tag", "group_ids")?;
8342                s.serialize_field("group_ids", x)?;
8343                s.end()
8344            }
8345            GroupsSelector::GroupExternalIds(x) => {
8346                // primitive
8347                let mut s = serializer.serialize_struct("GroupsSelector", 2)?;
8348                s.serialize_field(".tag", "group_external_ids")?;
8349                s.serialize_field("group_external_ids", x)?;
8350                s.end()
8351            }
8352        }
8353    }
8354}
8355
8356/// The value for [`Feature::HasTeamFileEvents`].
8357#[derive(Debug, Clone, PartialEq, Eq)]
8358#[non_exhaustive] // variants may be added in the future
8359pub enum HasTeamFileEventsValue {
8360    /// Does this team have file events.
8361    Enabled(bool),
8362    /// Catch-all used for unrecognized values returned from the server. Encountering this value
8363    /// typically indicates that this SDK version is out of date.
8364    Other,
8365}
8366
8367impl<'de> ::serde::de::Deserialize<'de> for HasTeamFileEventsValue {
8368    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
8369        // union deserializer
8370        use serde::de::{self, MapAccess, Visitor};
8371        struct EnumVisitor;
8372        impl<'de> Visitor<'de> for EnumVisitor {
8373            type Value = HasTeamFileEventsValue;
8374            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
8375                f.write_str("a HasTeamFileEventsValue structure")
8376            }
8377            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
8378                let tag: &str = match map.next_key()? {
8379                    Some(".tag") => map.next_value()?,
8380                    _ => return Err(de::Error::missing_field(".tag"))
8381                };
8382                let value = match tag {
8383                    "enabled" => {
8384                        match map.next_key()? {
8385                            Some("enabled") => HasTeamFileEventsValue::Enabled(map.next_value()?),
8386                            None => return Err(de::Error::missing_field("enabled")),
8387                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
8388                        }
8389                    }
8390                    _ => HasTeamFileEventsValue::Other,
8391                };
8392                crate::eat_json_fields(&mut map)?;
8393                Ok(value)
8394            }
8395        }
8396        const VARIANTS: &[&str] = &["enabled",
8397                                    "other"];
8398        deserializer.deserialize_struct("HasTeamFileEventsValue", VARIANTS, EnumVisitor)
8399    }
8400}
8401
8402impl ::serde::ser::Serialize for HasTeamFileEventsValue {
8403    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
8404        // union serializer
8405        use serde::ser::SerializeStruct;
8406        match self {
8407            HasTeamFileEventsValue::Enabled(x) => {
8408                // primitive
8409                let mut s = serializer.serialize_struct("HasTeamFileEventsValue", 2)?;
8410                s.serialize_field(".tag", "enabled")?;
8411                s.serialize_field("enabled", x)?;
8412                s.end()
8413            }
8414            HasTeamFileEventsValue::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
8415        }
8416    }
8417}
8418
8419/// The value for [`Feature::HasTeamSelectiveSync`].
8420#[derive(Debug, Clone, PartialEq, Eq)]
8421#[non_exhaustive] // variants may be added in the future
8422pub enum HasTeamSelectiveSyncValue {
8423    /// Does this team have team selective sync enabled.
8424    HasTeamSelectiveSync(bool),
8425    /// Catch-all used for unrecognized values returned from the server. Encountering this value
8426    /// typically indicates that this SDK version is out of date.
8427    Other,
8428}
8429
8430impl<'de> ::serde::de::Deserialize<'de> for HasTeamSelectiveSyncValue {
8431    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
8432        // union deserializer
8433        use serde::de::{self, MapAccess, Visitor};
8434        struct EnumVisitor;
8435        impl<'de> Visitor<'de> for EnumVisitor {
8436            type Value = HasTeamSelectiveSyncValue;
8437            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
8438                f.write_str("a HasTeamSelectiveSyncValue structure")
8439            }
8440            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
8441                let tag: &str = match map.next_key()? {
8442                    Some(".tag") => map.next_value()?,
8443                    _ => return Err(de::Error::missing_field(".tag"))
8444                };
8445                let value = match tag {
8446                    "has_team_selective_sync" => {
8447                        match map.next_key()? {
8448                            Some("has_team_selective_sync") => HasTeamSelectiveSyncValue::HasTeamSelectiveSync(map.next_value()?),
8449                            None => return Err(de::Error::missing_field("has_team_selective_sync")),
8450                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
8451                        }
8452                    }
8453                    _ => HasTeamSelectiveSyncValue::Other,
8454                };
8455                crate::eat_json_fields(&mut map)?;
8456                Ok(value)
8457            }
8458        }
8459        const VARIANTS: &[&str] = &["has_team_selective_sync",
8460                                    "other"];
8461        deserializer.deserialize_struct("HasTeamSelectiveSyncValue", VARIANTS, EnumVisitor)
8462    }
8463}
8464
8465impl ::serde::ser::Serialize for HasTeamSelectiveSyncValue {
8466    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
8467        // union serializer
8468        use serde::ser::SerializeStruct;
8469        match self {
8470            HasTeamSelectiveSyncValue::HasTeamSelectiveSync(x) => {
8471                // primitive
8472                let mut s = serializer.serialize_struct("HasTeamSelectiveSyncValue", 2)?;
8473                s.serialize_field(".tag", "has_team_selective_sync")?;
8474                s.serialize_field("has_team_selective_sync", x)?;
8475                s.end()
8476            }
8477            HasTeamSelectiveSyncValue::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
8478        }
8479    }
8480}
8481
8482/// The value for [`Feature::HasTeamSharedDropbox`].
8483#[derive(Debug, Clone, PartialEq, Eq)]
8484#[non_exhaustive] // variants may be added in the future
8485pub enum HasTeamSharedDropboxValue {
8486    /// Does this team have a shared team root.
8487    HasTeamSharedDropbox(bool),
8488    /// Catch-all used for unrecognized values returned from the server. Encountering this value
8489    /// typically indicates that this SDK version is out of date.
8490    Other,
8491}
8492
8493impl<'de> ::serde::de::Deserialize<'de> for HasTeamSharedDropboxValue {
8494    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
8495        // union deserializer
8496        use serde::de::{self, MapAccess, Visitor};
8497        struct EnumVisitor;
8498        impl<'de> Visitor<'de> for EnumVisitor {
8499            type Value = HasTeamSharedDropboxValue;
8500            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
8501                f.write_str("a HasTeamSharedDropboxValue structure")
8502            }
8503            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
8504                let tag: &str = match map.next_key()? {
8505                    Some(".tag") => map.next_value()?,
8506                    _ => return Err(de::Error::missing_field(".tag"))
8507                };
8508                let value = match tag {
8509                    "has_team_shared_dropbox" => {
8510                        match map.next_key()? {
8511                            Some("has_team_shared_dropbox") => HasTeamSharedDropboxValue::HasTeamSharedDropbox(map.next_value()?),
8512                            None => return Err(de::Error::missing_field("has_team_shared_dropbox")),
8513                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
8514                        }
8515                    }
8516                    _ => HasTeamSharedDropboxValue::Other,
8517                };
8518                crate::eat_json_fields(&mut map)?;
8519                Ok(value)
8520            }
8521        }
8522        const VARIANTS: &[&str] = &["has_team_shared_dropbox",
8523                                    "other"];
8524        deserializer.deserialize_struct("HasTeamSharedDropboxValue", VARIANTS, EnumVisitor)
8525    }
8526}
8527
8528impl ::serde::ser::Serialize for HasTeamSharedDropboxValue {
8529    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
8530        // union serializer
8531        use serde::ser::SerializeStruct;
8532        match self {
8533            HasTeamSharedDropboxValue::HasTeamSharedDropbox(x) => {
8534                // primitive
8535                let mut s = serializer.serialize_struct("HasTeamSharedDropboxValue", 2)?;
8536                s.serialize_field(".tag", "has_team_shared_dropbox")?;
8537                s.serialize_field("has_team_shared_dropbox", x)?;
8538                s.end()
8539            }
8540            HasTeamSharedDropboxValue::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
8541        }
8542    }
8543}
8544
8545#[derive(Debug, Clone, PartialEq, Eq)]
8546#[non_exhaustive] // structs may have more fields added in the future.
8547pub struct IncludeMembersArg {
8548    /// Whether to return the list of members in the group.  Note that the default value will cause
8549    /// all the group members  to be returned in the response. This may take a long time for large
8550    /// groups.
8551    pub return_members: bool,
8552}
8553
8554impl Default for IncludeMembersArg {
8555    fn default() -> Self {
8556        IncludeMembersArg {
8557            return_members: true,
8558        }
8559    }
8560}
8561
8562impl IncludeMembersArg {
8563    pub fn with_return_members(mut self, value: bool) -> Self {
8564        self.return_members = value;
8565        self
8566    }
8567}
8568
8569const INCLUDE_MEMBERS_ARG_FIELDS: &[&str] = &["return_members"];
8570impl IncludeMembersArg {
8571    // no _opt deserializer
8572    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
8573        mut map: V,
8574    ) -> Result<IncludeMembersArg, V::Error> {
8575        let mut field_return_members = None;
8576        while let Some(key) = map.next_key::<&str>()? {
8577            match key {
8578                "return_members" => {
8579                    if field_return_members.is_some() {
8580                        return Err(::serde::de::Error::duplicate_field("return_members"));
8581                    }
8582                    field_return_members = Some(map.next_value()?);
8583                }
8584                _ => {
8585                    // unknown field allowed and ignored
8586                    map.next_value::<::serde_json::Value>()?;
8587                }
8588            }
8589        }
8590        let result = IncludeMembersArg {
8591            return_members: field_return_members.unwrap_or(true),
8592        };
8593        Ok(result)
8594    }
8595
8596    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
8597        &self,
8598        s: &mut S::SerializeStruct,
8599    ) -> Result<(), S::Error> {
8600        use serde::ser::SerializeStruct;
8601        if !self.return_members {
8602            s.serialize_field("return_members", &self.return_members)?;
8603        }
8604        Ok(())
8605    }
8606}
8607
8608impl<'de> ::serde::de::Deserialize<'de> for IncludeMembersArg {
8609    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
8610        // struct deserializer
8611        use serde::de::{MapAccess, Visitor};
8612        struct StructVisitor;
8613        impl<'de> Visitor<'de> for StructVisitor {
8614            type Value = IncludeMembersArg;
8615            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
8616                f.write_str("a IncludeMembersArg struct")
8617            }
8618            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
8619                IncludeMembersArg::internal_deserialize(map)
8620            }
8621        }
8622        deserializer.deserialize_struct("IncludeMembersArg", INCLUDE_MEMBERS_ARG_FIELDS, StructVisitor)
8623    }
8624}
8625
8626impl ::serde::ser::Serialize for IncludeMembersArg {
8627    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
8628        // struct serializer
8629        use serde::ser::SerializeStruct;
8630        let mut s = serializer.serialize_struct("IncludeMembersArg", 1)?;
8631        self.internal_serialize::<S>(&mut s)?;
8632        s.end()
8633    }
8634}
8635
8636#[derive(Debug, Clone, PartialEq, Eq)]
8637#[non_exhaustive] // structs may have more fields added in the future.
8638pub struct LegalHoldHeldRevisionMetadata {
8639    /// The held revision filename.
8640    pub new_filename: String,
8641    /// The id of the held revision.
8642    pub original_revision_id: crate::types::files::Rev,
8643    /// The original path of the held revision.
8644    pub original_file_path: Path,
8645    /// The last time the file was modified on Dropbox.
8646    pub server_modified: crate::types::common::DropboxTimestamp,
8647    /// The member id of the revision's author.
8648    pub author_member_id: crate::types::team_common::TeamMemberId,
8649    /// The member status of the revision's author.
8650    pub author_member_status: TeamMemberStatus,
8651    /// The email address of the held revision author.
8652    pub author_email: crate::types::common::EmailAddress,
8653    /// The type of the held revision's file.
8654    pub file_type: String,
8655    /// The file size in bytes.
8656    pub size: u64,
8657    /// A hash of the file content. This field can be used to verify data integrity. For more
8658    /// information see our [Content
8659    /// hash](https://www.dropbox.com/developers/reference/content-hash) page.
8660    pub content_hash: crate::types::files::Sha256HexHash,
8661}
8662
8663impl LegalHoldHeldRevisionMetadata {
8664    pub fn new(
8665        new_filename: String,
8666        original_revision_id: crate::types::files::Rev,
8667        original_file_path: Path,
8668        server_modified: crate::types::common::DropboxTimestamp,
8669        author_member_id: crate::types::team_common::TeamMemberId,
8670        author_member_status: TeamMemberStatus,
8671        author_email: crate::types::common::EmailAddress,
8672        file_type: String,
8673        size: u64,
8674        content_hash: crate::types::files::Sha256HexHash,
8675    ) -> Self {
8676        LegalHoldHeldRevisionMetadata {
8677            new_filename,
8678            original_revision_id,
8679            original_file_path,
8680            server_modified,
8681            author_member_id,
8682            author_member_status,
8683            author_email,
8684            file_type,
8685            size,
8686            content_hash,
8687        }
8688    }
8689}
8690
8691const LEGAL_HOLD_HELD_REVISION_METADATA_FIELDS: &[&str] = &["new_filename",
8692                                                            "original_revision_id",
8693                                                            "original_file_path",
8694                                                            "server_modified",
8695                                                            "author_member_id",
8696                                                            "author_member_status",
8697                                                            "author_email",
8698                                                            "file_type",
8699                                                            "size",
8700                                                            "content_hash"];
8701impl LegalHoldHeldRevisionMetadata {
8702    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
8703        map: V,
8704    ) -> Result<LegalHoldHeldRevisionMetadata, V::Error> {
8705        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
8706    }
8707
8708    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
8709        mut map: V,
8710        optional: bool,
8711    ) -> Result<Option<LegalHoldHeldRevisionMetadata>, V::Error> {
8712        let mut field_new_filename = None;
8713        let mut field_original_revision_id = None;
8714        let mut field_original_file_path = None;
8715        let mut field_server_modified = None;
8716        let mut field_author_member_id = None;
8717        let mut field_author_member_status = None;
8718        let mut field_author_email = None;
8719        let mut field_file_type = None;
8720        let mut field_size = None;
8721        let mut field_content_hash = None;
8722        let mut nothing = true;
8723        while let Some(key) = map.next_key::<&str>()? {
8724            nothing = false;
8725            match key {
8726                "new_filename" => {
8727                    if field_new_filename.is_some() {
8728                        return Err(::serde::de::Error::duplicate_field("new_filename"));
8729                    }
8730                    field_new_filename = Some(map.next_value()?);
8731                }
8732                "original_revision_id" => {
8733                    if field_original_revision_id.is_some() {
8734                        return Err(::serde::de::Error::duplicate_field("original_revision_id"));
8735                    }
8736                    field_original_revision_id = Some(map.next_value()?);
8737                }
8738                "original_file_path" => {
8739                    if field_original_file_path.is_some() {
8740                        return Err(::serde::de::Error::duplicate_field("original_file_path"));
8741                    }
8742                    field_original_file_path = Some(map.next_value()?);
8743                }
8744                "server_modified" => {
8745                    if field_server_modified.is_some() {
8746                        return Err(::serde::de::Error::duplicate_field("server_modified"));
8747                    }
8748                    field_server_modified = Some(map.next_value()?);
8749                }
8750                "author_member_id" => {
8751                    if field_author_member_id.is_some() {
8752                        return Err(::serde::de::Error::duplicate_field("author_member_id"));
8753                    }
8754                    field_author_member_id = Some(map.next_value()?);
8755                }
8756                "author_member_status" => {
8757                    if field_author_member_status.is_some() {
8758                        return Err(::serde::de::Error::duplicate_field("author_member_status"));
8759                    }
8760                    field_author_member_status = Some(map.next_value()?);
8761                }
8762                "author_email" => {
8763                    if field_author_email.is_some() {
8764                        return Err(::serde::de::Error::duplicate_field("author_email"));
8765                    }
8766                    field_author_email = Some(map.next_value()?);
8767                }
8768                "file_type" => {
8769                    if field_file_type.is_some() {
8770                        return Err(::serde::de::Error::duplicate_field("file_type"));
8771                    }
8772                    field_file_type = Some(map.next_value()?);
8773                }
8774                "size" => {
8775                    if field_size.is_some() {
8776                        return Err(::serde::de::Error::duplicate_field("size"));
8777                    }
8778                    field_size = Some(map.next_value()?);
8779                }
8780                "content_hash" => {
8781                    if field_content_hash.is_some() {
8782                        return Err(::serde::de::Error::duplicate_field("content_hash"));
8783                    }
8784                    field_content_hash = Some(map.next_value()?);
8785                }
8786                _ => {
8787                    // unknown field allowed and ignored
8788                    map.next_value::<::serde_json::Value>()?;
8789                }
8790            }
8791        }
8792        if optional && nothing {
8793            return Ok(None);
8794        }
8795        let result = LegalHoldHeldRevisionMetadata {
8796            new_filename: field_new_filename.ok_or_else(|| ::serde::de::Error::missing_field("new_filename"))?,
8797            original_revision_id: field_original_revision_id.ok_or_else(|| ::serde::de::Error::missing_field("original_revision_id"))?,
8798            original_file_path: field_original_file_path.ok_or_else(|| ::serde::de::Error::missing_field("original_file_path"))?,
8799            server_modified: field_server_modified.ok_or_else(|| ::serde::de::Error::missing_field("server_modified"))?,
8800            author_member_id: field_author_member_id.ok_or_else(|| ::serde::de::Error::missing_field("author_member_id"))?,
8801            author_member_status: field_author_member_status.ok_or_else(|| ::serde::de::Error::missing_field("author_member_status"))?,
8802            author_email: field_author_email.ok_or_else(|| ::serde::de::Error::missing_field("author_email"))?,
8803            file_type: field_file_type.ok_or_else(|| ::serde::de::Error::missing_field("file_type"))?,
8804            size: field_size.ok_or_else(|| ::serde::de::Error::missing_field("size"))?,
8805            content_hash: field_content_hash.ok_or_else(|| ::serde::de::Error::missing_field("content_hash"))?,
8806        };
8807        Ok(Some(result))
8808    }
8809
8810    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
8811        &self,
8812        s: &mut S::SerializeStruct,
8813    ) -> Result<(), S::Error> {
8814        use serde::ser::SerializeStruct;
8815        s.serialize_field("new_filename", &self.new_filename)?;
8816        s.serialize_field("original_revision_id", &self.original_revision_id)?;
8817        s.serialize_field("original_file_path", &self.original_file_path)?;
8818        s.serialize_field("server_modified", &self.server_modified)?;
8819        s.serialize_field("author_member_id", &self.author_member_id)?;
8820        s.serialize_field("author_member_status", &self.author_member_status)?;
8821        s.serialize_field("author_email", &self.author_email)?;
8822        s.serialize_field("file_type", &self.file_type)?;
8823        s.serialize_field("size", &self.size)?;
8824        s.serialize_field("content_hash", &self.content_hash)?;
8825        Ok(())
8826    }
8827}
8828
8829impl<'de> ::serde::de::Deserialize<'de> for LegalHoldHeldRevisionMetadata {
8830    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
8831        // struct deserializer
8832        use serde::de::{MapAccess, Visitor};
8833        struct StructVisitor;
8834        impl<'de> Visitor<'de> for StructVisitor {
8835            type Value = LegalHoldHeldRevisionMetadata;
8836            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
8837                f.write_str("a LegalHoldHeldRevisionMetadata struct")
8838            }
8839            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
8840                LegalHoldHeldRevisionMetadata::internal_deserialize(map)
8841            }
8842        }
8843        deserializer.deserialize_struct("LegalHoldHeldRevisionMetadata", LEGAL_HOLD_HELD_REVISION_METADATA_FIELDS, StructVisitor)
8844    }
8845}
8846
8847impl ::serde::ser::Serialize for LegalHoldHeldRevisionMetadata {
8848    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
8849        // struct serializer
8850        use serde::ser::SerializeStruct;
8851        let mut s = serializer.serialize_struct("LegalHoldHeldRevisionMetadata", 10)?;
8852        self.internal_serialize::<S>(&mut s)?;
8853        s.end()
8854    }
8855}
8856
8857#[derive(Debug, Clone, PartialEq, Eq)]
8858#[non_exhaustive] // structs may have more fields added in the future.
8859pub struct LegalHoldPolicy {
8860    /// The legal hold id.
8861    pub id: LegalHoldId,
8862    /// Policy name.
8863    pub name: LegalHoldPolicyName,
8864    /// Team members IDs and number of permanently deleted members under hold.
8865    pub members: MembersInfo,
8866    /// The current state of the hold.
8867    pub status: LegalHoldStatus,
8868    /// Start date of the legal hold policy.
8869    pub start_date: crate::types::common::DropboxTimestamp,
8870    /// A description of the legal hold policy.
8871    pub description: Option<LegalHoldPolicyDescription>,
8872    /// The time at which the legal hold was activated.
8873    pub activation_time: Option<crate::types::common::DropboxTimestamp>,
8874    /// End date of the legal hold policy.
8875    pub end_date: Option<crate::types::common::DropboxTimestamp>,
8876}
8877
8878impl LegalHoldPolicy {
8879    pub fn new(
8880        id: LegalHoldId,
8881        name: LegalHoldPolicyName,
8882        members: MembersInfo,
8883        status: LegalHoldStatus,
8884        start_date: crate::types::common::DropboxTimestamp,
8885    ) -> Self {
8886        LegalHoldPolicy {
8887            id,
8888            name,
8889            members,
8890            status,
8891            start_date,
8892            description: None,
8893            activation_time: None,
8894            end_date: None,
8895        }
8896    }
8897
8898    pub fn with_description(mut self, value: LegalHoldPolicyDescription) -> Self {
8899        self.description = Some(value);
8900        self
8901    }
8902
8903    pub fn with_activation_time(mut self, value: crate::types::common::DropboxTimestamp) -> Self {
8904        self.activation_time = Some(value);
8905        self
8906    }
8907
8908    pub fn with_end_date(mut self, value: crate::types::common::DropboxTimestamp) -> Self {
8909        self.end_date = Some(value);
8910        self
8911    }
8912}
8913
8914const LEGAL_HOLD_POLICY_FIELDS: &[&str] = &["id",
8915                                            "name",
8916                                            "members",
8917                                            "status",
8918                                            "start_date",
8919                                            "description",
8920                                            "activation_time",
8921                                            "end_date"];
8922impl LegalHoldPolicy {
8923    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
8924        map: V,
8925    ) -> Result<LegalHoldPolicy, V::Error> {
8926        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
8927    }
8928
8929    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
8930        mut map: V,
8931        optional: bool,
8932    ) -> Result<Option<LegalHoldPolicy>, V::Error> {
8933        let mut field_id = None;
8934        let mut field_name = None;
8935        let mut field_members = None;
8936        let mut field_status = None;
8937        let mut field_start_date = None;
8938        let mut field_description = None;
8939        let mut field_activation_time = None;
8940        let mut field_end_date = None;
8941        let mut nothing = true;
8942        while let Some(key) = map.next_key::<&str>()? {
8943            nothing = false;
8944            match key {
8945                "id" => {
8946                    if field_id.is_some() {
8947                        return Err(::serde::de::Error::duplicate_field("id"));
8948                    }
8949                    field_id = Some(map.next_value()?);
8950                }
8951                "name" => {
8952                    if field_name.is_some() {
8953                        return Err(::serde::de::Error::duplicate_field("name"));
8954                    }
8955                    field_name = Some(map.next_value()?);
8956                }
8957                "members" => {
8958                    if field_members.is_some() {
8959                        return Err(::serde::de::Error::duplicate_field("members"));
8960                    }
8961                    field_members = Some(map.next_value()?);
8962                }
8963                "status" => {
8964                    if field_status.is_some() {
8965                        return Err(::serde::de::Error::duplicate_field("status"));
8966                    }
8967                    field_status = Some(map.next_value()?);
8968                }
8969                "start_date" => {
8970                    if field_start_date.is_some() {
8971                        return Err(::serde::de::Error::duplicate_field("start_date"));
8972                    }
8973                    field_start_date = Some(map.next_value()?);
8974                }
8975                "description" => {
8976                    if field_description.is_some() {
8977                        return Err(::serde::de::Error::duplicate_field("description"));
8978                    }
8979                    field_description = Some(map.next_value()?);
8980                }
8981                "activation_time" => {
8982                    if field_activation_time.is_some() {
8983                        return Err(::serde::de::Error::duplicate_field("activation_time"));
8984                    }
8985                    field_activation_time = Some(map.next_value()?);
8986                }
8987                "end_date" => {
8988                    if field_end_date.is_some() {
8989                        return Err(::serde::de::Error::duplicate_field("end_date"));
8990                    }
8991                    field_end_date = Some(map.next_value()?);
8992                }
8993                _ => {
8994                    // unknown field allowed and ignored
8995                    map.next_value::<::serde_json::Value>()?;
8996                }
8997            }
8998        }
8999        if optional && nothing {
9000            return Ok(None);
9001        }
9002        let result = LegalHoldPolicy {
9003            id: field_id.ok_or_else(|| ::serde::de::Error::missing_field("id"))?,
9004            name: field_name.ok_or_else(|| ::serde::de::Error::missing_field("name"))?,
9005            members: field_members.ok_or_else(|| ::serde::de::Error::missing_field("members"))?,
9006            status: field_status.ok_or_else(|| ::serde::de::Error::missing_field("status"))?,
9007            start_date: field_start_date.ok_or_else(|| ::serde::de::Error::missing_field("start_date"))?,
9008            description: field_description.and_then(Option::flatten),
9009            activation_time: field_activation_time.and_then(Option::flatten),
9010            end_date: field_end_date.and_then(Option::flatten),
9011        };
9012        Ok(Some(result))
9013    }
9014
9015    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
9016        &self,
9017        s: &mut S::SerializeStruct,
9018    ) -> Result<(), S::Error> {
9019        use serde::ser::SerializeStruct;
9020        s.serialize_field("id", &self.id)?;
9021        s.serialize_field("name", &self.name)?;
9022        s.serialize_field("members", &self.members)?;
9023        s.serialize_field("status", &self.status)?;
9024        s.serialize_field("start_date", &self.start_date)?;
9025        if let Some(val) = &self.description {
9026            s.serialize_field("description", val)?;
9027        }
9028        if let Some(val) = &self.activation_time {
9029            s.serialize_field("activation_time", val)?;
9030        }
9031        if let Some(val) = &self.end_date {
9032            s.serialize_field("end_date", val)?;
9033        }
9034        Ok(())
9035    }
9036}
9037
9038impl<'de> ::serde::de::Deserialize<'de> for LegalHoldPolicy {
9039    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
9040        // struct deserializer
9041        use serde::de::{MapAccess, Visitor};
9042        struct StructVisitor;
9043        impl<'de> Visitor<'de> for StructVisitor {
9044            type Value = LegalHoldPolicy;
9045            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
9046                f.write_str("a LegalHoldPolicy struct")
9047            }
9048            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
9049                LegalHoldPolicy::internal_deserialize(map)
9050            }
9051        }
9052        deserializer.deserialize_struct("LegalHoldPolicy", LEGAL_HOLD_POLICY_FIELDS, StructVisitor)
9053    }
9054}
9055
9056impl ::serde::ser::Serialize for LegalHoldPolicy {
9057    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
9058        // struct serializer
9059        use serde::ser::SerializeStruct;
9060        let mut s = serializer.serialize_struct("LegalHoldPolicy", 8)?;
9061        self.internal_serialize::<S>(&mut s)?;
9062        s.end()
9063    }
9064}
9065
9066#[derive(Debug, Clone, PartialEq, Eq)]
9067#[non_exhaustive] // variants may be added in the future
9068pub enum LegalHoldStatus {
9069    /// The legal hold policy is active.
9070    Active,
9071    /// The legal hold policy was released.
9072    Released,
9073    /// The legal hold policy is activating.
9074    Activating,
9075    /// The legal hold policy is updating.
9076    Updating,
9077    /// The legal hold policy is exporting.
9078    Exporting,
9079    /// The legal hold policy is releasing.
9080    Releasing,
9081    /// Catch-all used for unrecognized values returned from the server. Encountering this value
9082    /// typically indicates that this SDK version is out of date.
9083    Other,
9084}
9085
9086impl<'de> ::serde::de::Deserialize<'de> for LegalHoldStatus {
9087    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
9088        // union deserializer
9089        use serde::de::{self, MapAccess, Visitor};
9090        struct EnumVisitor;
9091        impl<'de> Visitor<'de> for EnumVisitor {
9092            type Value = LegalHoldStatus;
9093            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
9094                f.write_str("a LegalHoldStatus structure")
9095            }
9096            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
9097                let tag: &str = match map.next_key()? {
9098                    Some(".tag") => map.next_value()?,
9099                    _ => return Err(de::Error::missing_field(".tag"))
9100                };
9101                let value = match tag {
9102                    "active" => LegalHoldStatus::Active,
9103                    "released" => LegalHoldStatus::Released,
9104                    "activating" => LegalHoldStatus::Activating,
9105                    "updating" => LegalHoldStatus::Updating,
9106                    "exporting" => LegalHoldStatus::Exporting,
9107                    "releasing" => LegalHoldStatus::Releasing,
9108                    _ => LegalHoldStatus::Other,
9109                };
9110                crate::eat_json_fields(&mut map)?;
9111                Ok(value)
9112            }
9113        }
9114        const VARIANTS: &[&str] = &["active",
9115                                    "released",
9116                                    "activating",
9117                                    "updating",
9118                                    "exporting",
9119                                    "releasing",
9120                                    "other"];
9121        deserializer.deserialize_struct("LegalHoldStatus", VARIANTS, EnumVisitor)
9122    }
9123}
9124
9125impl ::serde::ser::Serialize for LegalHoldStatus {
9126    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
9127        // union serializer
9128        use serde::ser::SerializeStruct;
9129        match self {
9130            LegalHoldStatus::Active => {
9131                // unit
9132                let mut s = serializer.serialize_struct("LegalHoldStatus", 1)?;
9133                s.serialize_field(".tag", "active")?;
9134                s.end()
9135            }
9136            LegalHoldStatus::Released => {
9137                // unit
9138                let mut s = serializer.serialize_struct("LegalHoldStatus", 1)?;
9139                s.serialize_field(".tag", "released")?;
9140                s.end()
9141            }
9142            LegalHoldStatus::Activating => {
9143                // unit
9144                let mut s = serializer.serialize_struct("LegalHoldStatus", 1)?;
9145                s.serialize_field(".tag", "activating")?;
9146                s.end()
9147            }
9148            LegalHoldStatus::Updating => {
9149                // unit
9150                let mut s = serializer.serialize_struct("LegalHoldStatus", 1)?;
9151                s.serialize_field(".tag", "updating")?;
9152                s.end()
9153            }
9154            LegalHoldStatus::Exporting => {
9155                // unit
9156                let mut s = serializer.serialize_struct("LegalHoldStatus", 1)?;
9157                s.serialize_field(".tag", "exporting")?;
9158                s.end()
9159            }
9160            LegalHoldStatus::Releasing => {
9161                // unit
9162                let mut s = serializer.serialize_struct("LegalHoldStatus", 1)?;
9163                s.serialize_field(".tag", "releasing")?;
9164                s.end()
9165            }
9166            LegalHoldStatus::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
9167        }
9168    }
9169}
9170
9171#[derive(Debug, Clone, PartialEq, Eq)]
9172#[non_exhaustive] // variants may be added in the future
9173pub enum LegalHoldsError {
9174    /// There has been an unknown legal hold error.
9175    UnknownLegalHoldError,
9176    /// You don't have permissions to perform this action.
9177    InsufficientPermissions,
9178    /// Catch-all used for unrecognized values returned from the server. Encountering this value
9179    /// typically indicates that this SDK version is out of date.
9180    Other,
9181}
9182
9183impl<'de> ::serde::de::Deserialize<'de> for LegalHoldsError {
9184    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
9185        // union deserializer
9186        use serde::de::{self, MapAccess, Visitor};
9187        struct EnumVisitor;
9188        impl<'de> Visitor<'de> for EnumVisitor {
9189            type Value = LegalHoldsError;
9190            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
9191                f.write_str("a LegalHoldsError structure")
9192            }
9193            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
9194                let tag: &str = match map.next_key()? {
9195                    Some(".tag") => map.next_value()?,
9196                    _ => return Err(de::Error::missing_field(".tag"))
9197                };
9198                let value = match tag {
9199                    "unknown_legal_hold_error" => LegalHoldsError::UnknownLegalHoldError,
9200                    "insufficient_permissions" => LegalHoldsError::InsufficientPermissions,
9201                    _ => LegalHoldsError::Other,
9202                };
9203                crate::eat_json_fields(&mut map)?;
9204                Ok(value)
9205            }
9206        }
9207        const VARIANTS: &[&str] = &["unknown_legal_hold_error",
9208                                    "insufficient_permissions",
9209                                    "other"];
9210        deserializer.deserialize_struct("LegalHoldsError", VARIANTS, EnumVisitor)
9211    }
9212}
9213
9214impl ::serde::ser::Serialize for LegalHoldsError {
9215    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
9216        // union serializer
9217        use serde::ser::SerializeStruct;
9218        match self {
9219            LegalHoldsError::UnknownLegalHoldError => {
9220                // unit
9221                let mut s = serializer.serialize_struct("LegalHoldsError", 1)?;
9222                s.serialize_field(".tag", "unknown_legal_hold_error")?;
9223                s.end()
9224            }
9225            LegalHoldsError::InsufficientPermissions => {
9226                // unit
9227                let mut s = serializer.serialize_struct("LegalHoldsError", 1)?;
9228                s.serialize_field(".tag", "insufficient_permissions")?;
9229                s.end()
9230            }
9231            LegalHoldsError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
9232        }
9233    }
9234}
9235
9236impl ::std::error::Error for LegalHoldsError {
9237}
9238
9239impl ::std::fmt::Display for LegalHoldsError {
9240    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
9241        match self {
9242            LegalHoldsError::UnknownLegalHoldError => f.write_str("There has been an unknown legal hold error."),
9243            LegalHoldsError::InsufficientPermissions => f.write_str("You don't have permissions to perform this action."),
9244            _ => write!(f, "{:?}", *self),
9245        }
9246    }
9247}
9248
9249#[derive(Debug, Clone, PartialEq, Eq)]
9250#[non_exhaustive] // structs may have more fields added in the future.
9251pub struct LegalHoldsGetPolicyArg {
9252    /// The legal hold Id.
9253    pub id: LegalHoldId,
9254}
9255
9256impl LegalHoldsGetPolicyArg {
9257    pub fn new(id: LegalHoldId) -> Self {
9258        LegalHoldsGetPolicyArg {
9259            id,
9260        }
9261    }
9262}
9263
9264const LEGAL_HOLDS_GET_POLICY_ARG_FIELDS: &[&str] = &["id"];
9265impl LegalHoldsGetPolicyArg {
9266    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
9267        map: V,
9268    ) -> Result<LegalHoldsGetPolicyArg, V::Error> {
9269        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
9270    }
9271
9272    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
9273        mut map: V,
9274        optional: bool,
9275    ) -> Result<Option<LegalHoldsGetPolicyArg>, V::Error> {
9276        let mut field_id = None;
9277        let mut nothing = true;
9278        while let Some(key) = map.next_key::<&str>()? {
9279            nothing = false;
9280            match key {
9281                "id" => {
9282                    if field_id.is_some() {
9283                        return Err(::serde::de::Error::duplicate_field("id"));
9284                    }
9285                    field_id = Some(map.next_value()?);
9286                }
9287                _ => {
9288                    // unknown field allowed and ignored
9289                    map.next_value::<::serde_json::Value>()?;
9290                }
9291            }
9292        }
9293        if optional && nothing {
9294            return Ok(None);
9295        }
9296        let result = LegalHoldsGetPolicyArg {
9297            id: field_id.ok_or_else(|| ::serde::de::Error::missing_field("id"))?,
9298        };
9299        Ok(Some(result))
9300    }
9301
9302    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
9303        &self,
9304        s: &mut S::SerializeStruct,
9305    ) -> Result<(), S::Error> {
9306        use serde::ser::SerializeStruct;
9307        s.serialize_field("id", &self.id)?;
9308        Ok(())
9309    }
9310}
9311
9312impl<'de> ::serde::de::Deserialize<'de> for LegalHoldsGetPolicyArg {
9313    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
9314        // struct deserializer
9315        use serde::de::{MapAccess, Visitor};
9316        struct StructVisitor;
9317        impl<'de> Visitor<'de> for StructVisitor {
9318            type Value = LegalHoldsGetPolicyArg;
9319            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
9320                f.write_str("a LegalHoldsGetPolicyArg struct")
9321            }
9322            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
9323                LegalHoldsGetPolicyArg::internal_deserialize(map)
9324            }
9325        }
9326        deserializer.deserialize_struct("LegalHoldsGetPolicyArg", LEGAL_HOLDS_GET_POLICY_ARG_FIELDS, StructVisitor)
9327    }
9328}
9329
9330impl ::serde::ser::Serialize for LegalHoldsGetPolicyArg {
9331    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
9332        // struct serializer
9333        use serde::ser::SerializeStruct;
9334        let mut s = serializer.serialize_struct("LegalHoldsGetPolicyArg", 1)?;
9335        self.internal_serialize::<S>(&mut s)?;
9336        s.end()
9337    }
9338}
9339
9340#[derive(Debug, Clone, PartialEq, Eq)]
9341#[non_exhaustive] // variants may be added in the future
9342pub enum LegalHoldsGetPolicyError {
9343    /// There has been an unknown legal hold error.
9344    UnknownLegalHoldError,
9345    /// You don't have permissions to perform this action.
9346    InsufficientPermissions,
9347    /// Legal hold policy does not exist for [`LegalHoldsGetPolicyArg::id`](LegalHoldsGetPolicyArg).
9348    LegalHoldPolicyNotFound,
9349    /// Catch-all used for unrecognized values returned from the server. Encountering this value
9350    /// typically indicates that this SDK version is out of date.
9351    Other,
9352}
9353
9354impl<'de> ::serde::de::Deserialize<'de> for LegalHoldsGetPolicyError {
9355    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
9356        // union deserializer
9357        use serde::de::{self, MapAccess, Visitor};
9358        struct EnumVisitor;
9359        impl<'de> Visitor<'de> for EnumVisitor {
9360            type Value = LegalHoldsGetPolicyError;
9361            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
9362                f.write_str("a LegalHoldsGetPolicyError structure")
9363            }
9364            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
9365                let tag: &str = match map.next_key()? {
9366                    Some(".tag") => map.next_value()?,
9367                    _ => return Err(de::Error::missing_field(".tag"))
9368                };
9369                let value = match tag {
9370                    "unknown_legal_hold_error" => LegalHoldsGetPolicyError::UnknownLegalHoldError,
9371                    "insufficient_permissions" => LegalHoldsGetPolicyError::InsufficientPermissions,
9372                    "legal_hold_policy_not_found" => LegalHoldsGetPolicyError::LegalHoldPolicyNotFound,
9373                    _ => LegalHoldsGetPolicyError::Other,
9374                };
9375                crate::eat_json_fields(&mut map)?;
9376                Ok(value)
9377            }
9378        }
9379        const VARIANTS: &[&str] = &["unknown_legal_hold_error",
9380                                    "insufficient_permissions",
9381                                    "other",
9382                                    "legal_hold_policy_not_found"];
9383        deserializer.deserialize_struct("LegalHoldsGetPolicyError", VARIANTS, EnumVisitor)
9384    }
9385}
9386
9387impl ::serde::ser::Serialize for LegalHoldsGetPolicyError {
9388    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
9389        // union serializer
9390        use serde::ser::SerializeStruct;
9391        match self {
9392            LegalHoldsGetPolicyError::UnknownLegalHoldError => {
9393                // unit
9394                let mut s = serializer.serialize_struct("LegalHoldsGetPolicyError", 1)?;
9395                s.serialize_field(".tag", "unknown_legal_hold_error")?;
9396                s.end()
9397            }
9398            LegalHoldsGetPolicyError::InsufficientPermissions => {
9399                // unit
9400                let mut s = serializer.serialize_struct("LegalHoldsGetPolicyError", 1)?;
9401                s.serialize_field(".tag", "insufficient_permissions")?;
9402                s.end()
9403            }
9404            LegalHoldsGetPolicyError::LegalHoldPolicyNotFound => {
9405                // unit
9406                let mut s = serializer.serialize_struct("LegalHoldsGetPolicyError", 1)?;
9407                s.serialize_field(".tag", "legal_hold_policy_not_found")?;
9408                s.end()
9409            }
9410            LegalHoldsGetPolicyError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
9411        }
9412    }
9413}
9414
9415impl ::std::error::Error for LegalHoldsGetPolicyError {
9416}
9417
9418impl ::std::fmt::Display for LegalHoldsGetPolicyError {
9419    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
9420        match self {
9421            LegalHoldsGetPolicyError::UnknownLegalHoldError => f.write_str("There has been an unknown legal hold error."),
9422            LegalHoldsGetPolicyError::InsufficientPermissions => f.write_str("You don't have permissions to perform this action."),
9423            _ => write!(f, "{:?}", *self),
9424        }
9425    }
9426}
9427
9428// union extends LegalHoldsError
9429impl From<LegalHoldsError> for LegalHoldsGetPolicyError {
9430    fn from(parent: LegalHoldsError) -> Self {
9431        match parent {
9432            LegalHoldsError::UnknownLegalHoldError => LegalHoldsGetPolicyError::UnknownLegalHoldError,
9433            LegalHoldsError::InsufficientPermissions => LegalHoldsGetPolicyError::InsufficientPermissions,
9434            LegalHoldsError::Other => LegalHoldsGetPolicyError::Other,
9435        }
9436    }
9437}
9438#[derive(Debug, Clone, PartialEq, Eq)]
9439#[non_exhaustive] // structs may have more fields added in the future.
9440pub struct LegalHoldsListHeldRevisionResult {
9441    /// List of file entries that under the hold.
9442    pub entries: Vec<LegalHoldHeldRevisionMetadata>,
9443    /// True if there are more file entries that haven't been returned. You can retrieve them with a
9444    /// call to /legal_holds/list_held_revisions_continue.
9445    pub has_more: bool,
9446    /// The cursor idicates where to continue reading file metadata entries for the next API call.
9447    /// When there are no more entries, the cursor will return none. Pass the cursor into
9448    /// /2/team/legal_holds/list_held_revisions/continue.
9449    pub cursor: Option<ListHeldRevisionCursor>,
9450}
9451
9452impl LegalHoldsListHeldRevisionResult {
9453    pub fn new(entries: Vec<LegalHoldHeldRevisionMetadata>, has_more: bool) -> Self {
9454        LegalHoldsListHeldRevisionResult {
9455            entries,
9456            has_more,
9457            cursor: None,
9458        }
9459    }
9460
9461    pub fn with_cursor(mut self, value: ListHeldRevisionCursor) -> Self {
9462        self.cursor = Some(value);
9463        self
9464    }
9465}
9466
9467const LEGAL_HOLDS_LIST_HELD_REVISION_RESULT_FIELDS: &[&str] = &["entries",
9468                                                                "has_more",
9469                                                                "cursor"];
9470impl LegalHoldsListHeldRevisionResult {
9471    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
9472        map: V,
9473    ) -> Result<LegalHoldsListHeldRevisionResult, V::Error> {
9474        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
9475    }
9476
9477    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
9478        mut map: V,
9479        optional: bool,
9480    ) -> Result<Option<LegalHoldsListHeldRevisionResult>, V::Error> {
9481        let mut field_entries = None;
9482        let mut field_has_more = None;
9483        let mut field_cursor = None;
9484        let mut nothing = true;
9485        while let Some(key) = map.next_key::<&str>()? {
9486            nothing = false;
9487            match key {
9488                "entries" => {
9489                    if field_entries.is_some() {
9490                        return Err(::serde::de::Error::duplicate_field("entries"));
9491                    }
9492                    field_entries = Some(map.next_value()?);
9493                }
9494                "has_more" => {
9495                    if field_has_more.is_some() {
9496                        return Err(::serde::de::Error::duplicate_field("has_more"));
9497                    }
9498                    field_has_more = Some(map.next_value()?);
9499                }
9500                "cursor" => {
9501                    if field_cursor.is_some() {
9502                        return Err(::serde::de::Error::duplicate_field("cursor"));
9503                    }
9504                    field_cursor = Some(map.next_value()?);
9505                }
9506                _ => {
9507                    // unknown field allowed and ignored
9508                    map.next_value::<::serde_json::Value>()?;
9509                }
9510            }
9511        }
9512        if optional && nothing {
9513            return Ok(None);
9514        }
9515        let result = LegalHoldsListHeldRevisionResult {
9516            entries: field_entries.ok_or_else(|| ::serde::de::Error::missing_field("entries"))?,
9517            has_more: field_has_more.ok_or_else(|| ::serde::de::Error::missing_field("has_more"))?,
9518            cursor: field_cursor.and_then(Option::flatten),
9519        };
9520        Ok(Some(result))
9521    }
9522
9523    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
9524        &self,
9525        s: &mut S::SerializeStruct,
9526    ) -> Result<(), S::Error> {
9527        use serde::ser::SerializeStruct;
9528        s.serialize_field("entries", &self.entries)?;
9529        s.serialize_field("has_more", &self.has_more)?;
9530        if let Some(val) = &self.cursor {
9531            s.serialize_field("cursor", val)?;
9532        }
9533        Ok(())
9534    }
9535}
9536
9537impl<'de> ::serde::de::Deserialize<'de> for LegalHoldsListHeldRevisionResult {
9538    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
9539        // struct deserializer
9540        use serde::de::{MapAccess, Visitor};
9541        struct StructVisitor;
9542        impl<'de> Visitor<'de> for StructVisitor {
9543            type Value = LegalHoldsListHeldRevisionResult;
9544            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
9545                f.write_str("a LegalHoldsListHeldRevisionResult struct")
9546            }
9547            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
9548                LegalHoldsListHeldRevisionResult::internal_deserialize(map)
9549            }
9550        }
9551        deserializer.deserialize_struct("LegalHoldsListHeldRevisionResult", LEGAL_HOLDS_LIST_HELD_REVISION_RESULT_FIELDS, StructVisitor)
9552    }
9553}
9554
9555impl ::serde::ser::Serialize for LegalHoldsListHeldRevisionResult {
9556    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
9557        // struct serializer
9558        use serde::ser::SerializeStruct;
9559        let mut s = serializer.serialize_struct("LegalHoldsListHeldRevisionResult", 3)?;
9560        self.internal_serialize::<S>(&mut s)?;
9561        s.end()
9562    }
9563}
9564
9565#[derive(Debug, Clone, PartialEq, Eq)]
9566#[non_exhaustive] // structs may have more fields added in the future.
9567pub struct LegalHoldsListHeldRevisionsArg {
9568    /// The legal hold Id.
9569    pub id: LegalHoldId,
9570}
9571
9572impl LegalHoldsListHeldRevisionsArg {
9573    pub fn new(id: LegalHoldId) -> Self {
9574        LegalHoldsListHeldRevisionsArg {
9575            id,
9576        }
9577    }
9578}
9579
9580const LEGAL_HOLDS_LIST_HELD_REVISIONS_ARG_FIELDS: &[&str] = &["id"];
9581impl LegalHoldsListHeldRevisionsArg {
9582    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
9583        map: V,
9584    ) -> Result<LegalHoldsListHeldRevisionsArg, V::Error> {
9585        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
9586    }
9587
9588    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
9589        mut map: V,
9590        optional: bool,
9591    ) -> Result<Option<LegalHoldsListHeldRevisionsArg>, V::Error> {
9592        let mut field_id = None;
9593        let mut nothing = true;
9594        while let Some(key) = map.next_key::<&str>()? {
9595            nothing = false;
9596            match key {
9597                "id" => {
9598                    if field_id.is_some() {
9599                        return Err(::serde::de::Error::duplicate_field("id"));
9600                    }
9601                    field_id = Some(map.next_value()?);
9602                }
9603                _ => {
9604                    // unknown field allowed and ignored
9605                    map.next_value::<::serde_json::Value>()?;
9606                }
9607            }
9608        }
9609        if optional && nothing {
9610            return Ok(None);
9611        }
9612        let result = LegalHoldsListHeldRevisionsArg {
9613            id: field_id.ok_or_else(|| ::serde::de::Error::missing_field("id"))?,
9614        };
9615        Ok(Some(result))
9616    }
9617
9618    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
9619        &self,
9620        s: &mut S::SerializeStruct,
9621    ) -> Result<(), S::Error> {
9622        use serde::ser::SerializeStruct;
9623        s.serialize_field("id", &self.id)?;
9624        Ok(())
9625    }
9626}
9627
9628impl<'de> ::serde::de::Deserialize<'de> for LegalHoldsListHeldRevisionsArg {
9629    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
9630        // struct deserializer
9631        use serde::de::{MapAccess, Visitor};
9632        struct StructVisitor;
9633        impl<'de> Visitor<'de> for StructVisitor {
9634            type Value = LegalHoldsListHeldRevisionsArg;
9635            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
9636                f.write_str("a LegalHoldsListHeldRevisionsArg struct")
9637            }
9638            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
9639                LegalHoldsListHeldRevisionsArg::internal_deserialize(map)
9640            }
9641        }
9642        deserializer.deserialize_struct("LegalHoldsListHeldRevisionsArg", LEGAL_HOLDS_LIST_HELD_REVISIONS_ARG_FIELDS, StructVisitor)
9643    }
9644}
9645
9646impl ::serde::ser::Serialize for LegalHoldsListHeldRevisionsArg {
9647    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
9648        // struct serializer
9649        use serde::ser::SerializeStruct;
9650        let mut s = serializer.serialize_struct("LegalHoldsListHeldRevisionsArg", 1)?;
9651        self.internal_serialize::<S>(&mut s)?;
9652        s.end()
9653    }
9654}
9655
9656#[derive(Debug, Clone, PartialEq, Eq)]
9657#[non_exhaustive] // structs may have more fields added in the future.
9658pub struct LegalHoldsListHeldRevisionsContinueArg {
9659    /// The legal hold Id.
9660    pub id: LegalHoldId,
9661    /// The cursor idicates where to continue reading file metadata entries for the next API call.
9662    /// When there are no more entries, the cursor will return none.
9663    pub cursor: Option<ListHeldRevisionCursor>,
9664}
9665
9666impl LegalHoldsListHeldRevisionsContinueArg {
9667    pub fn new(id: LegalHoldId) -> Self {
9668        LegalHoldsListHeldRevisionsContinueArg {
9669            id,
9670            cursor: None,
9671        }
9672    }
9673
9674    pub fn with_cursor(mut self, value: ListHeldRevisionCursor) -> Self {
9675        self.cursor = Some(value);
9676        self
9677    }
9678}
9679
9680const LEGAL_HOLDS_LIST_HELD_REVISIONS_CONTINUE_ARG_FIELDS: &[&str] = &["id",
9681                                                                       "cursor"];
9682impl LegalHoldsListHeldRevisionsContinueArg {
9683    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
9684        map: V,
9685    ) -> Result<LegalHoldsListHeldRevisionsContinueArg, V::Error> {
9686        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
9687    }
9688
9689    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
9690        mut map: V,
9691        optional: bool,
9692    ) -> Result<Option<LegalHoldsListHeldRevisionsContinueArg>, V::Error> {
9693        let mut field_id = None;
9694        let mut field_cursor = None;
9695        let mut nothing = true;
9696        while let Some(key) = map.next_key::<&str>()? {
9697            nothing = false;
9698            match key {
9699                "id" => {
9700                    if field_id.is_some() {
9701                        return Err(::serde::de::Error::duplicate_field("id"));
9702                    }
9703                    field_id = Some(map.next_value()?);
9704                }
9705                "cursor" => {
9706                    if field_cursor.is_some() {
9707                        return Err(::serde::de::Error::duplicate_field("cursor"));
9708                    }
9709                    field_cursor = Some(map.next_value()?);
9710                }
9711                _ => {
9712                    // unknown field allowed and ignored
9713                    map.next_value::<::serde_json::Value>()?;
9714                }
9715            }
9716        }
9717        if optional && nothing {
9718            return Ok(None);
9719        }
9720        let result = LegalHoldsListHeldRevisionsContinueArg {
9721            id: field_id.ok_or_else(|| ::serde::de::Error::missing_field("id"))?,
9722            cursor: field_cursor.and_then(Option::flatten),
9723        };
9724        Ok(Some(result))
9725    }
9726
9727    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
9728        &self,
9729        s: &mut S::SerializeStruct,
9730    ) -> Result<(), S::Error> {
9731        use serde::ser::SerializeStruct;
9732        s.serialize_field("id", &self.id)?;
9733        if let Some(val) = &self.cursor {
9734            s.serialize_field("cursor", val)?;
9735        }
9736        Ok(())
9737    }
9738}
9739
9740impl<'de> ::serde::de::Deserialize<'de> for LegalHoldsListHeldRevisionsContinueArg {
9741    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
9742        // struct deserializer
9743        use serde::de::{MapAccess, Visitor};
9744        struct StructVisitor;
9745        impl<'de> Visitor<'de> for StructVisitor {
9746            type Value = LegalHoldsListHeldRevisionsContinueArg;
9747            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
9748                f.write_str("a LegalHoldsListHeldRevisionsContinueArg struct")
9749            }
9750            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
9751                LegalHoldsListHeldRevisionsContinueArg::internal_deserialize(map)
9752            }
9753        }
9754        deserializer.deserialize_struct("LegalHoldsListHeldRevisionsContinueArg", LEGAL_HOLDS_LIST_HELD_REVISIONS_CONTINUE_ARG_FIELDS, StructVisitor)
9755    }
9756}
9757
9758impl ::serde::ser::Serialize for LegalHoldsListHeldRevisionsContinueArg {
9759    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
9760        // struct serializer
9761        use serde::ser::SerializeStruct;
9762        let mut s = serializer.serialize_struct("LegalHoldsListHeldRevisionsContinueArg", 2)?;
9763        self.internal_serialize::<S>(&mut s)?;
9764        s.end()
9765    }
9766}
9767
9768#[derive(Debug, Clone, PartialEq, Eq)]
9769#[non_exhaustive] // variants may be added in the future
9770pub enum LegalHoldsListHeldRevisionsContinueError {
9771    /// There has been an unknown legal hold error.
9772    UnknownLegalHoldError,
9773    /// Temporary infrastructure failure, please retry.
9774    TransientError,
9775    /// Indicates that the cursor has been invalidated. Call
9776    /// [`legal_holds_list_held_revisions_continue()`](crate::team::legal_holds_list_held_revisions_continue)
9777    /// again with an empty cursor to obtain a new cursor.
9778    Reset,
9779    /// Catch-all used for unrecognized values returned from the server. Encountering this value
9780    /// typically indicates that this SDK version is out of date.
9781    Other,
9782}
9783
9784impl<'de> ::serde::de::Deserialize<'de> for LegalHoldsListHeldRevisionsContinueError {
9785    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
9786        // union deserializer
9787        use serde::de::{self, MapAccess, Visitor};
9788        struct EnumVisitor;
9789        impl<'de> Visitor<'de> for EnumVisitor {
9790            type Value = LegalHoldsListHeldRevisionsContinueError;
9791            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
9792                f.write_str("a LegalHoldsListHeldRevisionsContinueError structure")
9793            }
9794            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
9795                let tag: &str = match map.next_key()? {
9796                    Some(".tag") => map.next_value()?,
9797                    _ => return Err(de::Error::missing_field(".tag"))
9798                };
9799                let value = match tag {
9800                    "unknown_legal_hold_error" => LegalHoldsListHeldRevisionsContinueError::UnknownLegalHoldError,
9801                    "transient_error" => LegalHoldsListHeldRevisionsContinueError::TransientError,
9802                    "reset" => LegalHoldsListHeldRevisionsContinueError::Reset,
9803                    _ => LegalHoldsListHeldRevisionsContinueError::Other,
9804                };
9805                crate::eat_json_fields(&mut map)?;
9806                Ok(value)
9807            }
9808        }
9809        const VARIANTS: &[&str] = &["unknown_legal_hold_error",
9810                                    "transient_error",
9811                                    "reset",
9812                                    "other"];
9813        deserializer.deserialize_struct("LegalHoldsListHeldRevisionsContinueError", VARIANTS, EnumVisitor)
9814    }
9815}
9816
9817impl ::serde::ser::Serialize for LegalHoldsListHeldRevisionsContinueError {
9818    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
9819        // union serializer
9820        use serde::ser::SerializeStruct;
9821        match self {
9822            LegalHoldsListHeldRevisionsContinueError::UnknownLegalHoldError => {
9823                // unit
9824                let mut s = serializer.serialize_struct("LegalHoldsListHeldRevisionsContinueError", 1)?;
9825                s.serialize_field(".tag", "unknown_legal_hold_error")?;
9826                s.end()
9827            }
9828            LegalHoldsListHeldRevisionsContinueError::TransientError => {
9829                // unit
9830                let mut s = serializer.serialize_struct("LegalHoldsListHeldRevisionsContinueError", 1)?;
9831                s.serialize_field(".tag", "transient_error")?;
9832                s.end()
9833            }
9834            LegalHoldsListHeldRevisionsContinueError::Reset => {
9835                // unit
9836                let mut s = serializer.serialize_struct("LegalHoldsListHeldRevisionsContinueError", 1)?;
9837                s.serialize_field(".tag", "reset")?;
9838                s.end()
9839            }
9840            LegalHoldsListHeldRevisionsContinueError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
9841        }
9842    }
9843}
9844
9845impl ::std::error::Error for LegalHoldsListHeldRevisionsContinueError {
9846}
9847
9848impl ::std::fmt::Display for LegalHoldsListHeldRevisionsContinueError {
9849    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
9850        match self {
9851            LegalHoldsListHeldRevisionsContinueError::UnknownLegalHoldError => f.write_str("There has been an unknown legal hold error."),
9852            LegalHoldsListHeldRevisionsContinueError::TransientError => f.write_str("Temporary infrastructure failure, please retry."),
9853            _ => write!(f, "{:?}", *self),
9854        }
9855    }
9856}
9857
9858#[derive(Debug, Clone, PartialEq, Eq)]
9859#[non_exhaustive] // variants may be added in the future
9860pub enum LegalHoldsListHeldRevisionsError {
9861    /// There has been an unknown legal hold error.
9862    UnknownLegalHoldError,
9863    /// You don't have permissions to perform this action.
9864    InsufficientPermissions,
9865    /// Temporary infrastructure failure, please retry.
9866    TransientError,
9867    /// The legal hold is not holding any revisions yet.
9868    LegalHoldStillEmpty,
9869    /// Trying to list revisions for an inactive legal hold.
9870    InactiveLegalHold,
9871    /// Catch-all used for unrecognized values returned from the server. Encountering this value
9872    /// typically indicates that this SDK version is out of date.
9873    Other,
9874}
9875
9876impl<'de> ::serde::de::Deserialize<'de> for LegalHoldsListHeldRevisionsError {
9877    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
9878        // union deserializer
9879        use serde::de::{self, MapAccess, Visitor};
9880        struct EnumVisitor;
9881        impl<'de> Visitor<'de> for EnumVisitor {
9882            type Value = LegalHoldsListHeldRevisionsError;
9883            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
9884                f.write_str("a LegalHoldsListHeldRevisionsError structure")
9885            }
9886            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
9887                let tag: &str = match map.next_key()? {
9888                    Some(".tag") => map.next_value()?,
9889                    _ => return Err(de::Error::missing_field(".tag"))
9890                };
9891                let value = match tag {
9892                    "unknown_legal_hold_error" => LegalHoldsListHeldRevisionsError::UnknownLegalHoldError,
9893                    "insufficient_permissions" => LegalHoldsListHeldRevisionsError::InsufficientPermissions,
9894                    "transient_error" => LegalHoldsListHeldRevisionsError::TransientError,
9895                    "legal_hold_still_empty" => LegalHoldsListHeldRevisionsError::LegalHoldStillEmpty,
9896                    "inactive_legal_hold" => LegalHoldsListHeldRevisionsError::InactiveLegalHold,
9897                    _ => LegalHoldsListHeldRevisionsError::Other,
9898                };
9899                crate::eat_json_fields(&mut map)?;
9900                Ok(value)
9901            }
9902        }
9903        const VARIANTS: &[&str] = &["unknown_legal_hold_error",
9904                                    "insufficient_permissions",
9905                                    "other",
9906                                    "transient_error",
9907                                    "legal_hold_still_empty",
9908                                    "inactive_legal_hold"];
9909        deserializer.deserialize_struct("LegalHoldsListHeldRevisionsError", VARIANTS, EnumVisitor)
9910    }
9911}
9912
9913impl ::serde::ser::Serialize for LegalHoldsListHeldRevisionsError {
9914    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
9915        // union serializer
9916        use serde::ser::SerializeStruct;
9917        match self {
9918            LegalHoldsListHeldRevisionsError::UnknownLegalHoldError => {
9919                // unit
9920                let mut s = serializer.serialize_struct("LegalHoldsListHeldRevisionsError", 1)?;
9921                s.serialize_field(".tag", "unknown_legal_hold_error")?;
9922                s.end()
9923            }
9924            LegalHoldsListHeldRevisionsError::InsufficientPermissions => {
9925                // unit
9926                let mut s = serializer.serialize_struct("LegalHoldsListHeldRevisionsError", 1)?;
9927                s.serialize_field(".tag", "insufficient_permissions")?;
9928                s.end()
9929            }
9930            LegalHoldsListHeldRevisionsError::TransientError => {
9931                // unit
9932                let mut s = serializer.serialize_struct("LegalHoldsListHeldRevisionsError", 1)?;
9933                s.serialize_field(".tag", "transient_error")?;
9934                s.end()
9935            }
9936            LegalHoldsListHeldRevisionsError::LegalHoldStillEmpty => {
9937                // unit
9938                let mut s = serializer.serialize_struct("LegalHoldsListHeldRevisionsError", 1)?;
9939                s.serialize_field(".tag", "legal_hold_still_empty")?;
9940                s.end()
9941            }
9942            LegalHoldsListHeldRevisionsError::InactiveLegalHold => {
9943                // unit
9944                let mut s = serializer.serialize_struct("LegalHoldsListHeldRevisionsError", 1)?;
9945                s.serialize_field(".tag", "inactive_legal_hold")?;
9946                s.end()
9947            }
9948            LegalHoldsListHeldRevisionsError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
9949        }
9950    }
9951}
9952
9953impl ::std::error::Error for LegalHoldsListHeldRevisionsError {
9954}
9955
9956impl ::std::fmt::Display for LegalHoldsListHeldRevisionsError {
9957    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
9958        match self {
9959            LegalHoldsListHeldRevisionsError::UnknownLegalHoldError => f.write_str("There has been an unknown legal hold error."),
9960            LegalHoldsListHeldRevisionsError::InsufficientPermissions => f.write_str("You don't have permissions to perform this action."),
9961            LegalHoldsListHeldRevisionsError::TransientError => f.write_str("Temporary infrastructure failure, please retry."),
9962            LegalHoldsListHeldRevisionsError::LegalHoldStillEmpty => f.write_str("The legal hold is not holding any revisions yet."),
9963            LegalHoldsListHeldRevisionsError::InactiveLegalHold => f.write_str("Trying to list revisions for an inactive legal hold."),
9964            _ => write!(f, "{:?}", *self),
9965        }
9966    }
9967}
9968
9969// union extends LegalHoldsError
9970impl From<LegalHoldsError> for LegalHoldsListHeldRevisionsError {
9971    fn from(parent: LegalHoldsError) -> Self {
9972        match parent {
9973            LegalHoldsError::UnknownLegalHoldError => LegalHoldsListHeldRevisionsError::UnknownLegalHoldError,
9974            LegalHoldsError::InsufficientPermissions => LegalHoldsListHeldRevisionsError::InsufficientPermissions,
9975            LegalHoldsError::Other => LegalHoldsListHeldRevisionsError::Other,
9976        }
9977    }
9978}
9979#[derive(Debug, Clone, PartialEq, Eq, Default)]
9980#[non_exhaustive] // structs may have more fields added in the future.
9981pub struct LegalHoldsListPoliciesArg {
9982    /// Whether to return holds that were released.
9983    pub include_released: bool,
9984}
9985
9986impl LegalHoldsListPoliciesArg {
9987    pub fn with_include_released(mut self, value: bool) -> Self {
9988        self.include_released = value;
9989        self
9990    }
9991}
9992
9993const LEGAL_HOLDS_LIST_POLICIES_ARG_FIELDS: &[&str] = &["include_released"];
9994impl LegalHoldsListPoliciesArg {
9995    // no _opt deserializer
9996    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
9997        mut map: V,
9998    ) -> Result<LegalHoldsListPoliciesArg, V::Error> {
9999        let mut field_include_released = None;
10000        while let Some(key) = map.next_key::<&str>()? {
10001            match key {
10002                "include_released" => {
10003                    if field_include_released.is_some() {
10004                        return Err(::serde::de::Error::duplicate_field("include_released"));
10005                    }
10006                    field_include_released = Some(map.next_value()?);
10007                }
10008                _ => {
10009                    // unknown field allowed and ignored
10010                    map.next_value::<::serde_json::Value>()?;
10011                }
10012            }
10013        }
10014        let result = LegalHoldsListPoliciesArg {
10015            include_released: field_include_released.unwrap_or(false),
10016        };
10017        Ok(result)
10018    }
10019
10020    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
10021        &self,
10022        s: &mut S::SerializeStruct,
10023    ) -> Result<(), S::Error> {
10024        use serde::ser::SerializeStruct;
10025        if self.include_released {
10026            s.serialize_field("include_released", &self.include_released)?;
10027        }
10028        Ok(())
10029    }
10030}
10031
10032impl<'de> ::serde::de::Deserialize<'de> for LegalHoldsListPoliciesArg {
10033    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
10034        // struct deserializer
10035        use serde::de::{MapAccess, Visitor};
10036        struct StructVisitor;
10037        impl<'de> Visitor<'de> for StructVisitor {
10038            type Value = LegalHoldsListPoliciesArg;
10039            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
10040                f.write_str("a LegalHoldsListPoliciesArg struct")
10041            }
10042            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
10043                LegalHoldsListPoliciesArg::internal_deserialize(map)
10044            }
10045        }
10046        deserializer.deserialize_struct("LegalHoldsListPoliciesArg", LEGAL_HOLDS_LIST_POLICIES_ARG_FIELDS, StructVisitor)
10047    }
10048}
10049
10050impl ::serde::ser::Serialize for LegalHoldsListPoliciesArg {
10051    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
10052        // struct serializer
10053        use serde::ser::SerializeStruct;
10054        let mut s = serializer.serialize_struct("LegalHoldsListPoliciesArg", 1)?;
10055        self.internal_serialize::<S>(&mut s)?;
10056        s.end()
10057    }
10058}
10059
10060#[derive(Debug, Clone, PartialEq, Eq)]
10061#[non_exhaustive] // variants may be added in the future
10062pub enum LegalHoldsListPoliciesError {
10063    /// There has been an unknown legal hold error.
10064    UnknownLegalHoldError,
10065    /// You don't have permissions to perform this action.
10066    InsufficientPermissions,
10067    /// Temporary infrastructure failure, please retry.
10068    TransientError,
10069    /// Catch-all used for unrecognized values returned from the server. Encountering this value
10070    /// typically indicates that this SDK version is out of date.
10071    Other,
10072}
10073
10074impl<'de> ::serde::de::Deserialize<'de> for LegalHoldsListPoliciesError {
10075    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
10076        // union deserializer
10077        use serde::de::{self, MapAccess, Visitor};
10078        struct EnumVisitor;
10079        impl<'de> Visitor<'de> for EnumVisitor {
10080            type Value = LegalHoldsListPoliciesError;
10081            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
10082                f.write_str("a LegalHoldsListPoliciesError structure")
10083            }
10084            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
10085                let tag: &str = match map.next_key()? {
10086                    Some(".tag") => map.next_value()?,
10087                    _ => return Err(de::Error::missing_field(".tag"))
10088                };
10089                let value = match tag {
10090                    "unknown_legal_hold_error" => LegalHoldsListPoliciesError::UnknownLegalHoldError,
10091                    "insufficient_permissions" => LegalHoldsListPoliciesError::InsufficientPermissions,
10092                    "transient_error" => LegalHoldsListPoliciesError::TransientError,
10093                    _ => LegalHoldsListPoliciesError::Other,
10094                };
10095                crate::eat_json_fields(&mut map)?;
10096                Ok(value)
10097            }
10098        }
10099        const VARIANTS: &[&str] = &["unknown_legal_hold_error",
10100                                    "insufficient_permissions",
10101                                    "other",
10102                                    "transient_error"];
10103        deserializer.deserialize_struct("LegalHoldsListPoliciesError", VARIANTS, EnumVisitor)
10104    }
10105}
10106
10107impl ::serde::ser::Serialize for LegalHoldsListPoliciesError {
10108    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
10109        // union serializer
10110        use serde::ser::SerializeStruct;
10111        match self {
10112            LegalHoldsListPoliciesError::UnknownLegalHoldError => {
10113                // unit
10114                let mut s = serializer.serialize_struct("LegalHoldsListPoliciesError", 1)?;
10115                s.serialize_field(".tag", "unknown_legal_hold_error")?;
10116                s.end()
10117            }
10118            LegalHoldsListPoliciesError::InsufficientPermissions => {
10119                // unit
10120                let mut s = serializer.serialize_struct("LegalHoldsListPoliciesError", 1)?;
10121                s.serialize_field(".tag", "insufficient_permissions")?;
10122                s.end()
10123            }
10124            LegalHoldsListPoliciesError::TransientError => {
10125                // unit
10126                let mut s = serializer.serialize_struct("LegalHoldsListPoliciesError", 1)?;
10127                s.serialize_field(".tag", "transient_error")?;
10128                s.end()
10129            }
10130            LegalHoldsListPoliciesError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
10131        }
10132    }
10133}
10134
10135impl ::std::error::Error for LegalHoldsListPoliciesError {
10136}
10137
10138impl ::std::fmt::Display for LegalHoldsListPoliciesError {
10139    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
10140        match self {
10141            LegalHoldsListPoliciesError::UnknownLegalHoldError => f.write_str("There has been an unknown legal hold error."),
10142            LegalHoldsListPoliciesError::InsufficientPermissions => f.write_str("You don't have permissions to perform this action."),
10143            LegalHoldsListPoliciesError::TransientError => f.write_str("Temporary infrastructure failure, please retry."),
10144            _ => write!(f, "{:?}", *self),
10145        }
10146    }
10147}
10148
10149// union extends LegalHoldsError
10150impl From<LegalHoldsError> for LegalHoldsListPoliciesError {
10151    fn from(parent: LegalHoldsError) -> Self {
10152        match parent {
10153            LegalHoldsError::UnknownLegalHoldError => LegalHoldsListPoliciesError::UnknownLegalHoldError,
10154            LegalHoldsError::InsufficientPermissions => LegalHoldsListPoliciesError::InsufficientPermissions,
10155            LegalHoldsError::Other => LegalHoldsListPoliciesError::Other,
10156        }
10157    }
10158}
10159#[derive(Debug, Clone, PartialEq, Eq)]
10160#[non_exhaustive] // structs may have more fields added in the future.
10161pub struct LegalHoldsListPoliciesResult {
10162    pub policies: Vec<LegalHoldPolicy>,
10163}
10164
10165impl LegalHoldsListPoliciesResult {
10166    pub fn new(policies: Vec<LegalHoldPolicy>) -> Self {
10167        LegalHoldsListPoliciesResult {
10168            policies,
10169        }
10170    }
10171}
10172
10173const LEGAL_HOLDS_LIST_POLICIES_RESULT_FIELDS: &[&str] = &["policies"];
10174impl LegalHoldsListPoliciesResult {
10175    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
10176        map: V,
10177    ) -> Result<LegalHoldsListPoliciesResult, V::Error> {
10178        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
10179    }
10180
10181    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
10182        mut map: V,
10183        optional: bool,
10184    ) -> Result<Option<LegalHoldsListPoliciesResult>, V::Error> {
10185        let mut field_policies = None;
10186        let mut nothing = true;
10187        while let Some(key) = map.next_key::<&str>()? {
10188            nothing = false;
10189            match key {
10190                "policies" => {
10191                    if field_policies.is_some() {
10192                        return Err(::serde::de::Error::duplicate_field("policies"));
10193                    }
10194                    field_policies = Some(map.next_value()?);
10195                }
10196                _ => {
10197                    // unknown field allowed and ignored
10198                    map.next_value::<::serde_json::Value>()?;
10199                }
10200            }
10201        }
10202        if optional && nothing {
10203            return Ok(None);
10204        }
10205        let result = LegalHoldsListPoliciesResult {
10206            policies: field_policies.ok_or_else(|| ::serde::de::Error::missing_field("policies"))?,
10207        };
10208        Ok(Some(result))
10209    }
10210
10211    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
10212        &self,
10213        s: &mut S::SerializeStruct,
10214    ) -> Result<(), S::Error> {
10215        use serde::ser::SerializeStruct;
10216        s.serialize_field("policies", &self.policies)?;
10217        Ok(())
10218    }
10219}
10220
10221impl<'de> ::serde::de::Deserialize<'de> for LegalHoldsListPoliciesResult {
10222    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
10223        // struct deserializer
10224        use serde::de::{MapAccess, Visitor};
10225        struct StructVisitor;
10226        impl<'de> Visitor<'de> for StructVisitor {
10227            type Value = LegalHoldsListPoliciesResult;
10228            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
10229                f.write_str("a LegalHoldsListPoliciesResult struct")
10230            }
10231            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
10232                LegalHoldsListPoliciesResult::internal_deserialize(map)
10233            }
10234        }
10235        deserializer.deserialize_struct("LegalHoldsListPoliciesResult", LEGAL_HOLDS_LIST_POLICIES_RESULT_FIELDS, StructVisitor)
10236    }
10237}
10238
10239impl ::serde::ser::Serialize for LegalHoldsListPoliciesResult {
10240    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
10241        // struct serializer
10242        use serde::ser::SerializeStruct;
10243        let mut s = serializer.serialize_struct("LegalHoldsListPoliciesResult", 1)?;
10244        self.internal_serialize::<S>(&mut s)?;
10245        s.end()
10246    }
10247}
10248
10249#[derive(Debug, Clone, PartialEq, Eq)]
10250#[non_exhaustive] // structs may have more fields added in the future.
10251pub struct LegalHoldsPolicyCreateArg {
10252    /// Policy name.
10253    pub name: LegalHoldPolicyName,
10254    /// List of team member IDs added to the hold.
10255    pub members: Vec<crate::types::team_common::TeamMemberId>,
10256    /// A description of the legal hold policy.
10257    pub description: Option<LegalHoldPolicyDescription>,
10258    /// start date of the legal hold policy.
10259    pub start_date: Option<crate::types::common::DropboxTimestamp>,
10260    /// end date of the legal hold policy.
10261    pub end_date: Option<crate::types::common::DropboxTimestamp>,
10262}
10263
10264impl LegalHoldsPolicyCreateArg {
10265    pub fn new(
10266        name: LegalHoldPolicyName,
10267        members: Vec<crate::types::team_common::TeamMemberId>,
10268    ) -> Self {
10269        LegalHoldsPolicyCreateArg {
10270            name,
10271            members,
10272            description: None,
10273            start_date: None,
10274            end_date: None,
10275        }
10276    }
10277
10278    pub fn with_description(mut self, value: LegalHoldPolicyDescription) -> Self {
10279        self.description = Some(value);
10280        self
10281    }
10282
10283    pub fn with_start_date(mut self, value: crate::types::common::DropboxTimestamp) -> Self {
10284        self.start_date = Some(value);
10285        self
10286    }
10287
10288    pub fn with_end_date(mut self, value: crate::types::common::DropboxTimestamp) -> Self {
10289        self.end_date = Some(value);
10290        self
10291    }
10292}
10293
10294const LEGAL_HOLDS_POLICY_CREATE_ARG_FIELDS: &[&str] = &["name",
10295                                                        "members",
10296                                                        "description",
10297                                                        "start_date",
10298                                                        "end_date"];
10299impl LegalHoldsPolicyCreateArg {
10300    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
10301        map: V,
10302    ) -> Result<LegalHoldsPolicyCreateArg, V::Error> {
10303        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
10304    }
10305
10306    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
10307        mut map: V,
10308        optional: bool,
10309    ) -> Result<Option<LegalHoldsPolicyCreateArg>, V::Error> {
10310        let mut field_name = None;
10311        let mut field_members = None;
10312        let mut field_description = None;
10313        let mut field_start_date = None;
10314        let mut field_end_date = None;
10315        let mut nothing = true;
10316        while let Some(key) = map.next_key::<&str>()? {
10317            nothing = false;
10318            match key {
10319                "name" => {
10320                    if field_name.is_some() {
10321                        return Err(::serde::de::Error::duplicate_field("name"));
10322                    }
10323                    field_name = Some(map.next_value()?);
10324                }
10325                "members" => {
10326                    if field_members.is_some() {
10327                        return Err(::serde::de::Error::duplicate_field("members"));
10328                    }
10329                    field_members = Some(map.next_value()?);
10330                }
10331                "description" => {
10332                    if field_description.is_some() {
10333                        return Err(::serde::de::Error::duplicate_field("description"));
10334                    }
10335                    field_description = Some(map.next_value()?);
10336                }
10337                "start_date" => {
10338                    if field_start_date.is_some() {
10339                        return Err(::serde::de::Error::duplicate_field("start_date"));
10340                    }
10341                    field_start_date = Some(map.next_value()?);
10342                }
10343                "end_date" => {
10344                    if field_end_date.is_some() {
10345                        return Err(::serde::de::Error::duplicate_field("end_date"));
10346                    }
10347                    field_end_date = Some(map.next_value()?);
10348                }
10349                _ => {
10350                    // unknown field allowed and ignored
10351                    map.next_value::<::serde_json::Value>()?;
10352                }
10353            }
10354        }
10355        if optional && nothing {
10356            return Ok(None);
10357        }
10358        let result = LegalHoldsPolicyCreateArg {
10359            name: field_name.ok_or_else(|| ::serde::de::Error::missing_field("name"))?,
10360            members: field_members.ok_or_else(|| ::serde::de::Error::missing_field("members"))?,
10361            description: field_description.and_then(Option::flatten),
10362            start_date: field_start_date.and_then(Option::flatten),
10363            end_date: field_end_date.and_then(Option::flatten),
10364        };
10365        Ok(Some(result))
10366    }
10367
10368    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
10369        &self,
10370        s: &mut S::SerializeStruct,
10371    ) -> Result<(), S::Error> {
10372        use serde::ser::SerializeStruct;
10373        s.serialize_field("name", &self.name)?;
10374        s.serialize_field("members", &self.members)?;
10375        if let Some(val) = &self.description {
10376            s.serialize_field("description", val)?;
10377        }
10378        if let Some(val) = &self.start_date {
10379            s.serialize_field("start_date", val)?;
10380        }
10381        if let Some(val) = &self.end_date {
10382            s.serialize_field("end_date", val)?;
10383        }
10384        Ok(())
10385    }
10386}
10387
10388impl<'de> ::serde::de::Deserialize<'de> for LegalHoldsPolicyCreateArg {
10389    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
10390        // struct deserializer
10391        use serde::de::{MapAccess, Visitor};
10392        struct StructVisitor;
10393        impl<'de> Visitor<'de> for StructVisitor {
10394            type Value = LegalHoldsPolicyCreateArg;
10395            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
10396                f.write_str("a LegalHoldsPolicyCreateArg struct")
10397            }
10398            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
10399                LegalHoldsPolicyCreateArg::internal_deserialize(map)
10400            }
10401        }
10402        deserializer.deserialize_struct("LegalHoldsPolicyCreateArg", LEGAL_HOLDS_POLICY_CREATE_ARG_FIELDS, StructVisitor)
10403    }
10404}
10405
10406impl ::serde::ser::Serialize for LegalHoldsPolicyCreateArg {
10407    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
10408        // struct serializer
10409        use serde::ser::SerializeStruct;
10410        let mut s = serializer.serialize_struct("LegalHoldsPolicyCreateArg", 5)?;
10411        self.internal_serialize::<S>(&mut s)?;
10412        s.end()
10413    }
10414}
10415
10416#[derive(Debug, Clone, PartialEq, Eq)]
10417#[non_exhaustive] // variants may be added in the future
10418pub enum LegalHoldsPolicyCreateError {
10419    /// There has been an unknown legal hold error.
10420    UnknownLegalHoldError,
10421    /// You don't have permissions to perform this action.
10422    InsufficientPermissions,
10423    /// Start date must be earlier than end date.
10424    StartDateIsLaterThanEndDate,
10425    /// The users list must have at least one user.
10426    EmptyMembersList,
10427    /// Some members in the members list are not valid to be placed under legal hold.
10428    InvalidMembers,
10429    /// You cannot add more than 5 users in a legal hold.
10430    NumberOfUsersOnHoldIsGreaterThanHoldLimitation,
10431    /// Temporary infrastructure failure, please retry.
10432    TransientError,
10433    /// The name provided is already in use by another legal hold.
10434    NameMustBeUnique,
10435    /// Team exceeded legal hold quota.
10436    TeamExceededLegalHoldQuota,
10437    /// The provided date is invalid.
10438    InvalidDate,
10439    /// Catch-all used for unrecognized values returned from the server. Encountering this value
10440    /// typically indicates that this SDK version is out of date.
10441    Other,
10442}
10443
10444impl<'de> ::serde::de::Deserialize<'de> for LegalHoldsPolicyCreateError {
10445    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
10446        // union deserializer
10447        use serde::de::{self, MapAccess, Visitor};
10448        struct EnumVisitor;
10449        impl<'de> Visitor<'de> for EnumVisitor {
10450            type Value = LegalHoldsPolicyCreateError;
10451            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
10452                f.write_str("a LegalHoldsPolicyCreateError structure")
10453            }
10454            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
10455                let tag: &str = match map.next_key()? {
10456                    Some(".tag") => map.next_value()?,
10457                    _ => return Err(de::Error::missing_field(".tag"))
10458                };
10459                let value = match tag {
10460                    "unknown_legal_hold_error" => LegalHoldsPolicyCreateError::UnknownLegalHoldError,
10461                    "insufficient_permissions" => LegalHoldsPolicyCreateError::InsufficientPermissions,
10462                    "start_date_is_later_than_end_date" => LegalHoldsPolicyCreateError::StartDateIsLaterThanEndDate,
10463                    "empty_members_list" => LegalHoldsPolicyCreateError::EmptyMembersList,
10464                    "invalid_members" => LegalHoldsPolicyCreateError::InvalidMembers,
10465                    "number_of_users_on_hold_is_greater_than_hold_limitation" => LegalHoldsPolicyCreateError::NumberOfUsersOnHoldIsGreaterThanHoldLimitation,
10466                    "transient_error" => LegalHoldsPolicyCreateError::TransientError,
10467                    "name_must_be_unique" => LegalHoldsPolicyCreateError::NameMustBeUnique,
10468                    "team_exceeded_legal_hold_quota" => LegalHoldsPolicyCreateError::TeamExceededLegalHoldQuota,
10469                    "invalid_date" => LegalHoldsPolicyCreateError::InvalidDate,
10470                    _ => LegalHoldsPolicyCreateError::Other,
10471                };
10472                crate::eat_json_fields(&mut map)?;
10473                Ok(value)
10474            }
10475        }
10476        const VARIANTS: &[&str] = &["unknown_legal_hold_error",
10477                                    "insufficient_permissions",
10478                                    "other",
10479                                    "start_date_is_later_than_end_date",
10480                                    "empty_members_list",
10481                                    "invalid_members",
10482                                    "number_of_users_on_hold_is_greater_than_hold_limitation",
10483                                    "transient_error",
10484                                    "name_must_be_unique",
10485                                    "team_exceeded_legal_hold_quota",
10486                                    "invalid_date"];
10487        deserializer.deserialize_struct("LegalHoldsPolicyCreateError", VARIANTS, EnumVisitor)
10488    }
10489}
10490
10491impl ::serde::ser::Serialize for LegalHoldsPolicyCreateError {
10492    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
10493        // union serializer
10494        use serde::ser::SerializeStruct;
10495        match self {
10496            LegalHoldsPolicyCreateError::UnknownLegalHoldError => {
10497                // unit
10498                let mut s = serializer.serialize_struct("LegalHoldsPolicyCreateError", 1)?;
10499                s.serialize_field(".tag", "unknown_legal_hold_error")?;
10500                s.end()
10501            }
10502            LegalHoldsPolicyCreateError::InsufficientPermissions => {
10503                // unit
10504                let mut s = serializer.serialize_struct("LegalHoldsPolicyCreateError", 1)?;
10505                s.serialize_field(".tag", "insufficient_permissions")?;
10506                s.end()
10507            }
10508            LegalHoldsPolicyCreateError::StartDateIsLaterThanEndDate => {
10509                // unit
10510                let mut s = serializer.serialize_struct("LegalHoldsPolicyCreateError", 1)?;
10511                s.serialize_field(".tag", "start_date_is_later_than_end_date")?;
10512                s.end()
10513            }
10514            LegalHoldsPolicyCreateError::EmptyMembersList => {
10515                // unit
10516                let mut s = serializer.serialize_struct("LegalHoldsPolicyCreateError", 1)?;
10517                s.serialize_field(".tag", "empty_members_list")?;
10518                s.end()
10519            }
10520            LegalHoldsPolicyCreateError::InvalidMembers => {
10521                // unit
10522                let mut s = serializer.serialize_struct("LegalHoldsPolicyCreateError", 1)?;
10523                s.serialize_field(".tag", "invalid_members")?;
10524                s.end()
10525            }
10526            LegalHoldsPolicyCreateError::NumberOfUsersOnHoldIsGreaterThanHoldLimitation => {
10527                // unit
10528                let mut s = serializer.serialize_struct("LegalHoldsPolicyCreateError", 1)?;
10529                s.serialize_field(".tag", "number_of_users_on_hold_is_greater_than_hold_limitation")?;
10530                s.end()
10531            }
10532            LegalHoldsPolicyCreateError::TransientError => {
10533                // unit
10534                let mut s = serializer.serialize_struct("LegalHoldsPolicyCreateError", 1)?;
10535                s.serialize_field(".tag", "transient_error")?;
10536                s.end()
10537            }
10538            LegalHoldsPolicyCreateError::NameMustBeUnique => {
10539                // unit
10540                let mut s = serializer.serialize_struct("LegalHoldsPolicyCreateError", 1)?;
10541                s.serialize_field(".tag", "name_must_be_unique")?;
10542                s.end()
10543            }
10544            LegalHoldsPolicyCreateError::TeamExceededLegalHoldQuota => {
10545                // unit
10546                let mut s = serializer.serialize_struct("LegalHoldsPolicyCreateError", 1)?;
10547                s.serialize_field(".tag", "team_exceeded_legal_hold_quota")?;
10548                s.end()
10549            }
10550            LegalHoldsPolicyCreateError::InvalidDate => {
10551                // unit
10552                let mut s = serializer.serialize_struct("LegalHoldsPolicyCreateError", 1)?;
10553                s.serialize_field(".tag", "invalid_date")?;
10554                s.end()
10555            }
10556            LegalHoldsPolicyCreateError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
10557        }
10558    }
10559}
10560
10561impl ::std::error::Error for LegalHoldsPolicyCreateError {
10562}
10563
10564impl ::std::fmt::Display for LegalHoldsPolicyCreateError {
10565    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
10566        match self {
10567            LegalHoldsPolicyCreateError::UnknownLegalHoldError => f.write_str("There has been an unknown legal hold error."),
10568            LegalHoldsPolicyCreateError::InsufficientPermissions => f.write_str("You don't have permissions to perform this action."),
10569            LegalHoldsPolicyCreateError::StartDateIsLaterThanEndDate => f.write_str("Start date must be earlier than end date."),
10570            LegalHoldsPolicyCreateError::EmptyMembersList => f.write_str("The users list must have at least one user."),
10571            LegalHoldsPolicyCreateError::InvalidMembers => f.write_str("Some members in the members list are not valid to be placed under legal hold."),
10572            LegalHoldsPolicyCreateError::NumberOfUsersOnHoldIsGreaterThanHoldLimitation => f.write_str("You cannot add more than 5 users in a legal hold."),
10573            LegalHoldsPolicyCreateError::TransientError => f.write_str("Temporary infrastructure failure, please retry."),
10574            LegalHoldsPolicyCreateError::NameMustBeUnique => f.write_str("The name provided is already in use by another legal hold."),
10575            LegalHoldsPolicyCreateError::TeamExceededLegalHoldQuota => f.write_str("Team exceeded legal hold quota."),
10576            LegalHoldsPolicyCreateError::InvalidDate => f.write_str("The provided date is invalid."),
10577            _ => write!(f, "{:?}", *self),
10578        }
10579    }
10580}
10581
10582// union extends LegalHoldsError
10583impl From<LegalHoldsError> for LegalHoldsPolicyCreateError {
10584    fn from(parent: LegalHoldsError) -> Self {
10585        match parent {
10586            LegalHoldsError::UnknownLegalHoldError => LegalHoldsPolicyCreateError::UnknownLegalHoldError,
10587            LegalHoldsError::InsufficientPermissions => LegalHoldsPolicyCreateError::InsufficientPermissions,
10588            LegalHoldsError::Other => LegalHoldsPolicyCreateError::Other,
10589        }
10590    }
10591}
10592#[derive(Debug, Clone, PartialEq, Eq)]
10593#[non_exhaustive] // structs may have more fields added in the future.
10594pub struct LegalHoldsPolicyReleaseArg {
10595    /// The legal hold Id.
10596    pub id: LegalHoldId,
10597}
10598
10599impl LegalHoldsPolicyReleaseArg {
10600    pub fn new(id: LegalHoldId) -> Self {
10601        LegalHoldsPolicyReleaseArg {
10602            id,
10603        }
10604    }
10605}
10606
10607const LEGAL_HOLDS_POLICY_RELEASE_ARG_FIELDS: &[&str] = &["id"];
10608impl LegalHoldsPolicyReleaseArg {
10609    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
10610        map: V,
10611    ) -> Result<LegalHoldsPolicyReleaseArg, V::Error> {
10612        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
10613    }
10614
10615    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
10616        mut map: V,
10617        optional: bool,
10618    ) -> Result<Option<LegalHoldsPolicyReleaseArg>, V::Error> {
10619        let mut field_id = None;
10620        let mut nothing = true;
10621        while let Some(key) = map.next_key::<&str>()? {
10622            nothing = false;
10623            match key {
10624                "id" => {
10625                    if field_id.is_some() {
10626                        return Err(::serde::de::Error::duplicate_field("id"));
10627                    }
10628                    field_id = Some(map.next_value()?);
10629                }
10630                _ => {
10631                    // unknown field allowed and ignored
10632                    map.next_value::<::serde_json::Value>()?;
10633                }
10634            }
10635        }
10636        if optional && nothing {
10637            return Ok(None);
10638        }
10639        let result = LegalHoldsPolicyReleaseArg {
10640            id: field_id.ok_or_else(|| ::serde::de::Error::missing_field("id"))?,
10641        };
10642        Ok(Some(result))
10643    }
10644
10645    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
10646        &self,
10647        s: &mut S::SerializeStruct,
10648    ) -> Result<(), S::Error> {
10649        use serde::ser::SerializeStruct;
10650        s.serialize_field("id", &self.id)?;
10651        Ok(())
10652    }
10653}
10654
10655impl<'de> ::serde::de::Deserialize<'de> for LegalHoldsPolicyReleaseArg {
10656    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
10657        // struct deserializer
10658        use serde::de::{MapAccess, Visitor};
10659        struct StructVisitor;
10660        impl<'de> Visitor<'de> for StructVisitor {
10661            type Value = LegalHoldsPolicyReleaseArg;
10662            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
10663                f.write_str("a LegalHoldsPolicyReleaseArg struct")
10664            }
10665            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
10666                LegalHoldsPolicyReleaseArg::internal_deserialize(map)
10667            }
10668        }
10669        deserializer.deserialize_struct("LegalHoldsPolicyReleaseArg", LEGAL_HOLDS_POLICY_RELEASE_ARG_FIELDS, StructVisitor)
10670    }
10671}
10672
10673impl ::serde::ser::Serialize for LegalHoldsPolicyReleaseArg {
10674    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
10675        // struct serializer
10676        use serde::ser::SerializeStruct;
10677        let mut s = serializer.serialize_struct("LegalHoldsPolicyReleaseArg", 1)?;
10678        self.internal_serialize::<S>(&mut s)?;
10679        s.end()
10680    }
10681}
10682
10683#[derive(Debug, Clone, PartialEq, Eq)]
10684#[non_exhaustive] // variants may be added in the future
10685pub enum LegalHoldsPolicyReleaseError {
10686    /// There has been an unknown legal hold error.
10687    UnknownLegalHoldError,
10688    /// You don't have permissions to perform this action.
10689    InsufficientPermissions,
10690    /// Legal hold is currently performing another operation.
10691    LegalHoldPerformingAnotherOperation,
10692    /// Legal hold is currently performing a release or is already released.
10693    LegalHoldAlreadyReleasing,
10694    /// Legal hold policy does not exist for
10695    /// [`LegalHoldsPolicyReleaseArg::id`](LegalHoldsPolicyReleaseArg).
10696    LegalHoldPolicyNotFound,
10697    /// Catch-all used for unrecognized values returned from the server. Encountering this value
10698    /// typically indicates that this SDK version is out of date.
10699    Other,
10700}
10701
10702impl<'de> ::serde::de::Deserialize<'de> for LegalHoldsPolicyReleaseError {
10703    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
10704        // union deserializer
10705        use serde::de::{self, MapAccess, Visitor};
10706        struct EnumVisitor;
10707        impl<'de> Visitor<'de> for EnumVisitor {
10708            type Value = LegalHoldsPolicyReleaseError;
10709            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
10710                f.write_str("a LegalHoldsPolicyReleaseError structure")
10711            }
10712            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
10713                let tag: &str = match map.next_key()? {
10714                    Some(".tag") => map.next_value()?,
10715                    _ => return Err(de::Error::missing_field(".tag"))
10716                };
10717                let value = match tag {
10718                    "unknown_legal_hold_error" => LegalHoldsPolicyReleaseError::UnknownLegalHoldError,
10719                    "insufficient_permissions" => LegalHoldsPolicyReleaseError::InsufficientPermissions,
10720                    "legal_hold_performing_another_operation" => LegalHoldsPolicyReleaseError::LegalHoldPerformingAnotherOperation,
10721                    "legal_hold_already_releasing" => LegalHoldsPolicyReleaseError::LegalHoldAlreadyReleasing,
10722                    "legal_hold_policy_not_found" => LegalHoldsPolicyReleaseError::LegalHoldPolicyNotFound,
10723                    _ => LegalHoldsPolicyReleaseError::Other,
10724                };
10725                crate::eat_json_fields(&mut map)?;
10726                Ok(value)
10727            }
10728        }
10729        const VARIANTS: &[&str] = &["unknown_legal_hold_error",
10730                                    "insufficient_permissions",
10731                                    "other",
10732                                    "legal_hold_performing_another_operation",
10733                                    "legal_hold_already_releasing",
10734                                    "legal_hold_policy_not_found"];
10735        deserializer.deserialize_struct("LegalHoldsPolicyReleaseError", VARIANTS, EnumVisitor)
10736    }
10737}
10738
10739impl ::serde::ser::Serialize for LegalHoldsPolicyReleaseError {
10740    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
10741        // union serializer
10742        use serde::ser::SerializeStruct;
10743        match self {
10744            LegalHoldsPolicyReleaseError::UnknownLegalHoldError => {
10745                // unit
10746                let mut s = serializer.serialize_struct("LegalHoldsPolicyReleaseError", 1)?;
10747                s.serialize_field(".tag", "unknown_legal_hold_error")?;
10748                s.end()
10749            }
10750            LegalHoldsPolicyReleaseError::InsufficientPermissions => {
10751                // unit
10752                let mut s = serializer.serialize_struct("LegalHoldsPolicyReleaseError", 1)?;
10753                s.serialize_field(".tag", "insufficient_permissions")?;
10754                s.end()
10755            }
10756            LegalHoldsPolicyReleaseError::LegalHoldPerformingAnotherOperation => {
10757                // unit
10758                let mut s = serializer.serialize_struct("LegalHoldsPolicyReleaseError", 1)?;
10759                s.serialize_field(".tag", "legal_hold_performing_another_operation")?;
10760                s.end()
10761            }
10762            LegalHoldsPolicyReleaseError::LegalHoldAlreadyReleasing => {
10763                // unit
10764                let mut s = serializer.serialize_struct("LegalHoldsPolicyReleaseError", 1)?;
10765                s.serialize_field(".tag", "legal_hold_already_releasing")?;
10766                s.end()
10767            }
10768            LegalHoldsPolicyReleaseError::LegalHoldPolicyNotFound => {
10769                // unit
10770                let mut s = serializer.serialize_struct("LegalHoldsPolicyReleaseError", 1)?;
10771                s.serialize_field(".tag", "legal_hold_policy_not_found")?;
10772                s.end()
10773            }
10774            LegalHoldsPolicyReleaseError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
10775        }
10776    }
10777}
10778
10779impl ::std::error::Error for LegalHoldsPolicyReleaseError {
10780}
10781
10782impl ::std::fmt::Display for LegalHoldsPolicyReleaseError {
10783    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
10784        match self {
10785            LegalHoldsPolicyReleaseError::UnknownLegalHoldError => f.write_str("There has been an unknown legal hold error."),
10786            LegalHoldsPolicyReleaseError::InsufficientPermissions => f.write_str("You don't have permissions to perform this action."),
10787            LegalHoldsPolicyReleaseError::LegalHoldPerformingAnotherOperation => f.write_str("Legal hold is currently performing another operation."),
10788            LegalHoldsPolicyReleaseError::LegalHoldAlreadyReleasing => f.write_str("Legal hold is currently performing a release or is already released."),
10789            _ => write!(f, "{:?}", *self),
10790        }
10791    }
10792}
10793
10794// union extends LegalHoldsError
10795impl From<LegalHoldsError> for LegalHoldsPolicyReleaseError {
10796    fn from(parent: LegalHoldsError) -> Self {
10797        match parent {
10798            LegalHoldsError::UnknownLegalHoldError => LegalHoldsPolicyReleaseError::UnknownLegalHoldError,
10799            LegalHoldsError::InsufficientPermissions => LegalHoldsPolicyReleaseError::InsufficientPermissions,
10800            LegalHoldsError::Other => LegalHoldsPolicyReleaseError::Other,
10801        }
10802    }
10803}
10804#[derive(Debug, Clone, PartialEq, Eq)]
10805#[non_exhaustive] // structs may have more fields added in the future.
10806pub struct LegalHoldsPolicyUpdateArg {
10807    /// The legal hold Id.
10808    pub id: LegalHoldId,
10809    /// Policy new name.
10810    pub name: Option<LegalHoldPolicyName>,
10811    /// Policy new description.
10812    pub description: Option<LegalHoldPolicyDescription>,
10813    /// List of team member IDs to apply the policy on.
10814    pub members: Option<Vec<crate::types::team_common::TeamMemberId>>,
10815}
10816
10817impl LegalHoldsPolicyUpdateArg {
10818    pub fn new(id: LegalHoldId) -> Self {
10819        LegalHoldsPolicyUpdateArg {
10820            id,
10821            name: None,
10822            description: None,
10823            members: None,
10824        }
10825    }
10826
10827    pub fn with_name(mut self, value: LegalHoldPolicyName) -> Self {
10828        self.name = Some(value);
10829        self
10830    }
10831
10832    pub fn with_description(mut self, value: LegalHoldPolicyDescription) -> Self {
10833        self.description = Some(value);
10834        self
10835    }
10836
10837    pub fn with_members(mut self, value: Vec<crate::types::team_common::TeamMemberId>) -> Self {
10838        self.members = Some(value);
10839        self
10840    }
10841}
10842
10843const LEGAL_HOLDS_POLICY_UPDATE_ARG_FIELDS: &[&str] = &["id",
10844                                                        "name",
10845                                                        "description",
10846                                                        "members"];
10847impl LegalHoldsPolicyUpdateArg {
10848    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
10849        map: V,
10850    ) -> Result<LegalHoldsPolicyUpdateArg, V::Error> {
10851        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
10852    }
10853
10854    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
10855        mut map: V,
10856        optional: bool,
10857    ) -> Result<Option<LegalHoldsPolicyUpdateArg>, V::Error> {
10858        let mut field_id = None;
10859        let mut field_name = None;
10860        let mut field_description = None;
10861        let mut field_members = None;
10862        let mut nothing = true;
10863        while let Some(key) = map.next_key::<&str>()? {
10864            nothing = false;
10865            match key {
10866                "id" => {
10867                    if field_id.is_some() {
10868                        return Err(::serde::de::Error::duplicate_field("id"));
10869                    }
10870                    field_id = Some(map.next_value()?);
10871                }
10872                "name" => {
10873                    if field_name.is_some() {
10874                        return Err(::serde::de::Error::duplicate_field("name"));
10875                    }
10876                    field_name = Some(map.next_value()?);
10877                }
10878                "description" => {
10879                    if field_description.is_some() {
10880                        return Err(::serde::de::Error::duplicate_field("description"));
10881                    }
10882                    field_description = Some(map.next_value()?);
10883                }
10884                "members" => {
10885                    if field_members.is_some() {
10886                        return Err(::serde::de::Error::duplicate_field("members"));
10887                    }
10888                    field_members = Some(map.next_value()?);
10889                }
10890                _ => {
10891                    // unknown field allowed and ignored
10892                    map.next_value::<::serde_json::Value>()?;
10893                }
10894            }
10895        }
10896        if optional && nothing {
10897            return Ok(None);
10898        }
10899        let result = LegalHoldsPolicyUpdateArg {
10900            id: field_id.ok_or_else(|| ::serde::de::Error::missing_field("id"))?,
10901            name: field_name.and_then(Option::flatten),
10902            description: field_description.and_then(Option::flatten),
10903            members: field_members.and_then(Option::flatten),
10904        };
10905        Ok(Some(result))
10906    }
10907
10908    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
10909        &self,
10910        s: &mut S::SerializeStruct,
10911    ) -> Result<(), S::Error> {
10912        use serde::ser::SerializeStruct;
10913        s.serialize_field("id", &self.id)?;
10914        if let Some(val) = &self.name {
10915            s.serialize_field("name", val)?;
10916        }
10917        if let Some(val) = &self.description {
10918            s.serialize_field("description", val)?;
10919        }
10920        if let Some(val) = &self.members {
10921            s.serialize_field("members", val)?;
10922        }
10923        Ok(())
10924    }
10925}
10926
10927impl<'de> ::serde::de::Deserialize<'de> for LegalHoldsPolicyUpdateArg {
10928    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
10929        // struct deserializer
10930        use serde::de::{MapAccess, Visitor};
10931        struct StructVisitor;
10932        impl<'de> Visitor<'de> for StructVisitor {
10933            type Value = LegalHoldsPolicyUpdateArg;
10934            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
10935                f.write_str("a LegalHoldsPolicyUpdateArg struct")
10936            }
10937            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
10938                LegalHoldsPolicyUpdateArg::internal_deserialize(map)
10939            }
10940        }
10941        deserializer.deserialize_struct("LegalHoldsPolicyUpdateArg", LEGAL_HOLDS_POLICY_UPDATE_ARG_FIELDS, StructVisitor)
10942    }
10943}
10944
10945impl ::serde::ser::Serialize for LegalHoldsPolicyUpdateArg {
10946    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
10947        // struct serializer
10948        use serde::ser::SerializeStruct;
10949        let mut s = serializer.serialize_struct("LegalHoldsPolicyUpdateArg", 4)?;
10950        self.internal_serialize::<S>(&mut s)?;
10951        s.end()
10952    }
10953}
10954
10955#[derive(Debug, Clone, PartialEq, Eq)]
10956#[non_exhaustive] // variants may be added in the future
10957pub enum LegalHoldsPolicyUpdateError {
10958    /// There has been an unknown legal hold error.
10959    UnknownLegalHoldError,
10960    /// You don't have permissions to perform this action.
10961    InsufficientPermissions,
10962    /// Temporary infrastructure failure, please retry.
10963    TransientError,
10964    /// Trying to release an inactive legal hold.
10965    InactiveLegalHold,
10966    /// Legal hold is currently performing another operation.
10967    LegalHoldPerformingAnotherOperation,
10968    /// Some members in the members list are not valid to be placed under legal hold.
10969    InvalidMembers,
10970    /// You cannot add more than 5 users in a legal hold.
10971    NumberOfUsersOnHoldIsGreaterThanHoldLimitation,
10972    /// The users list must have at least one user.
10973    EmptyMembersList,
10974    /// The name provided is already in use by another legal hold.
10975    NameMustBeUnique,
10976    /// Legal hold policy does not exist for
10977    /// [`LegalHoldsPolicyUpdateArg::id`](LegalHoldsPolicyUpdateArg).
10978    LegalHoldPolicyNotFound,
10979    /// Catch-all used for unrecognized values returned from the server. Encountering this value
10980    /// typically indicates that this SDK version is out of date.
10981    Other,
10982}
10983
10984impl<'de> ::serde::de::Deserialize<'de> for LegalHoldsPolicyUpdateError {
10985    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
10986        // union deserializer
10987        use serde::de::{self, MapAccess, Visitor};
10988        struct EnumVisitor;
10989        impl<'de> Visitor<'de> for EnumVisitor {
10990            type Value = LegalHoldsPolicyUpdateError;
10991            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
10992                f.write_str("a LegalHoldsPolicyUpdateError structure")
10993            }
10994            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
10995                let tag: &str = match map.next_key()? {
10996                    Some(".tag") => map.next_value()?,
10997                    _ => return Err(de::Error::missing_field(".tag"))
10998                };
10999                let value = match tag {
11000                    "unknown_legal_hold_error" => LegalHoldsPolicyUpdateError::UnknownLegalHoldError,
11001                    "insufficient_permissions" => LegalHoldsPolicyUpdateError::InsufficientPermissions,
11002                    "transient_error" => LegalHoldsPolicyUpdateError::TransientError,
11003                    "inactive_legal_hold" => LegalHoldsPolicyUpdateError::InactiveLegalHold,
11004                    "legal_hold_performing_another_operation" => LegalHoldsPolicyUpdateError::LegalHoldPerformingAnotherOperation,
11005                    "invalid_members" => LegalHoldsPolicyUpdateError::InvalidMembers,
11006                    "number_of_users_on_hold_is_greater_than_hold_limitation" => LegalHoldsPolicyUpdateError::NumberOfUsersOnHoldIsGreaterThanHoldLimitation,
11007                    "empty_members_list" => LegalHoldsPolicyUpdateError::EmptyMembersList,
11008                    "name_must_be_unique" => LegalHoldsPolicyUpdateError::NameMustBeUnique,
11009                    "legal_hold_policy_not_found" => LegalHoldsPolicyUpdateError::LegalHoldPolicyNotFound,
11010                    _ => LegalHoldsPolicyUpdateError::Other,
11011                };
11012                crate::eat_json_fields(&mut map)?;
11013                Ok(value)
11014            }
11015        }
11016        const VARIANTS: &[&str] = &["unknown_legal_hold_error",
11017                                    "insufficient_permissions",
11018                                    "other",
11019                                    "transient_error",
11020                                    "inactive_legal_hold",
11021                                    "legal_hold_performing_another_operation",
11022                                    "invalid_members",
11023                                    "number_of_users_on_hold_is_greater_than_hold_limitation",
11024                                    "empty_members_list",
11025                                    "name_must_be_unique",
11026                                    "legal_hold_policy_not_found"];
11027        deserializer.deserialize_struct("LegalHoldsPolicyUpdateError", VARIANTS, EnumVisitor)
11028    }
11029}
11030
11031impl ::serde::ser::Serialize for LegalHoldsPolicyUpdateError {
11032    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
11033        // union serializer
11034        use serde::ser::SerializeStruct;
11035        match self {
11036            LegalHoldsPolicyUpdateError::UnknownLegalHoldError => {
11037                // unit
11038                let mut s = serializer.serialize_struct("LegalHoldsPolicyUpdateError", 1)?;
11039                s.serialize_field(".tag", "unknown_legal_hold_error")?;
11040                s.end()
11041            }
11042            LegalHoldsPolicyUpdateError::InsufficientPermissions => {
11043                // unit
11044                let mut s = serializer.serialize_struct("LegalHoldsPolicyUpdateError", 1)?;
11045                s.serialize_field(".tag", "insufficient_permissions")?;
11046                s.end()
11047            }
11048            LegalHoldsPolicyUpdateError::TransientError => {
11049                // unit
11050                let mut s = serializer.serialize_struct("LegalHoldsPolicyUpdateError", 1)?;
11051                s.serialize_field(".tag", "transient_error")?;
11052                s.end()
11053            }
11054            LegalHoldsPolicyUpdateError::InactiveLegalHold => {
11055                // unit
11056                let mut s = serializer.serialize_struct("LegalHoldsPolicyUpdateError", 1)?;
11057                s.serialize_field(".tag", "inactive_legal_hold")?;
11058                s.end()
11059            }
11060            LegalHoldsPolicyUpdateError::LegalHoldPerformingAnotherOperation => {
11061                // unit
11062                let mut s = serializer.serialize_struct("LegalHoldsPolicyUpdateError", 1)?;
11063                s.serialize_field(".tag", "legal_hold_performing_another_operation")?;
11064                s.end()
11065            }
11066            LegalHoldsPolicyUpdateError::InvalidMembers => {
11067                // unit
11068                let mut s = serializer.serialize_struct("LegalHoldsPolicyUpdateError", 1)?;
11069                s.serialize_field(".tag", "invalid_members")?;
11070                s.end()
11071            }
11072            LegalHoldsPolicyUpdateError::NumberOfUsersOnHoldIsGreaterThanHoldLimitation => {
11073                // unit
11074                let mut s = serializer.serialize_struct("LegalHoldsPolicyUpdateError", 1)?;
11075                s.serialize_field(".tag", "number_of_users_on_hold_is_greater_than_hold_limitation")?;
11076                s.end()
11077            }
11078            LegalHoldsPolicyUpdateError::EmptyMembersList => {
11079                // unit
11080                let mut s = serializer.serialize_struct("LegalHoldsPolicyUpdateError", 1)?;
11081                s.serialize_field(".tag", "empty_members_list")?;
11082                s.end()
11083            }
11084            LegalHoldsPolicyUpdateError::NameMustBeUnique => {
11085                // unit
11086                let mut s = serializer.serialize_struct("LegalHoldsPolicyUpdateError", 1)?;
11087                s.serialize_field(".tag", "name_must_be_unique")?;
11088                s.end()
11089            }
11090            LegalHoldsPolicyUpdateError::LegalHoldPolicyNotFound => {
11091                // unit
11092                let mut s = serializer.serialize_struct("LegalHoldsPolicyUpdateError", 1)?;
11093                s.serialize_field(".tag", "legal_hold_policy_not_found")?;
11094                s.end()
11095            }
11096            LegalHoldsPolicyUpdateError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
11097        }
11098    }
11099}
11100
11101impl ::std::error::Error for LegalHoldsPolicyUpdateError {
11102}
11103
11104impl ::std::fmt::Display for LegalHoldsPolicyUpdateError {
11105    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
11106        match self {
11107            LegalHoldsPolicyUpdateError::UnknownLegalHoldError => f.write_str("There has been an unknown legal hold error."),
11108            LegalHoldsPolicyUpdateError::InsufficientPermissions => f.write_str("You don't have permissions to perform this action."),
11109            LegalHoldsPolicyUpdateError::TransientError => f.write_str("Temporary infrastructure failure, please retry."),
11110            LegalHoldsPolicyUpdateError::InactiveLegalHold => f.write_str("Trying to release an inactive legal hold."),
11111            LegalHoldsPolicyUpdateError::LegalHoldPerformingAnotherOperation => f.write_str("Legal hold is currently performing another operation."),
11112            LegalHoldsPolicyUpdateError::InvalidMembers => f.write_str("Some members in the members list are not valid to be placed under legal hold."),
11113            LegalHoldsPolicyUpdateError::NumberOfUsersOnHoldIsGreaterThanHoldLimitation => f.write_str("You cannot add more than 5 users in a legal hold."),
11114            LegalHoldsPolicyUpdateError::EmptyMembersList => f.write_str("The users list must have at least one user."),
11115            LegalHoldsPolicyUpdateError::NameMustBeUnique => f.write_str("The name provided is already in use by another legal hold."),
11116            _ => write!(f, "{:?}", *self),
11117        }
11118    }
11119}
11120
11121// union extends LegalHoldsError
11122impl From<LegalHoldsError> for LegalHoldsPolicyUpdateError {
11123    fn from(parent: LegalHoldsError) -> Self {
11124        match parent {
11125            LegalHoldsError::UnknownLegalHoldError => LegalHoldsPolicyUpdateError::UnknownLegalHoldError,
11126            LegalHoldsError::InsufficientPermissions => LegalHoldsPolicyUpdateError::InsufficientPermissions,
11127            LegalHoldsError::Other => LegalHoldsPolicyUpdateError::Other,
11128        }
11129    }
11130}
11131#[derive(Debug, Clone, PartialEq, Eq)]
11132#[non_exhaustive] // structs may have more fields added in the future.
11133pub struct ListMemberAppsArg {
11134    /// The team member id.
11135    pub team_member_id: String,
11136}
11137
11138impl ListMemberAppsArg {
11139    pub fn new(team_member_id: String) -> Self {
11140        ListMemberAppsArg {
11141            team_member_id,
11142        }
11143    }
11144}
11145
11146const LIST_MEMBER_APPS_ARG_FIELDS: &[&str] = &["team_member_id"];
11147impl ListMemberAppsArg {
11148    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
11149        map: V,
11150    ) -> Result<ListMemberAppsArg, V::Error> {
11151        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
11152    }
11153
11154    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
11155        mut map: V,
11156        optional: bool,
11157    ) -> Result<Option<ListMemberAppsArg>, V::Error> {
11158        let mut field_team_member_id = None;
11159        let mut nothing = true;
11160        while let Some(key) = map.next_key::<&str>()? {
11161            nothing = false;
11162            match key {
11163                "team_member_id" => {
11164                    if field_team_member_id.is_some() {
11165                        return Err(::serde::de::Error::duplicate_field("team_member_id"));
11166                    }
11167                    field_team_member_id = Some(map.next_value()?);
11168                }
11169                _ => {
11170                    // unknown field allowed and ignored
11171                    map.next_value::<::serde_json::Value>()?;
11172                }
11173            }
11174        }
11175        if optional && nothing {
11176            return Ok(None);
11177        }
11178        let result = ListMemberAppsArg {
11179            team_member_id: field_team_member_id.ok_or_else(|| ::serde::de::Error::missing_field("team_member_id"))?,
11180        };
11181        Ok(Some(result))
11182    }
11183
11184    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
11185        &self,
11186        s: &mut S::SerializeStruct,
11187    ) -> Result<(), S::Error> {
11188        use serde::ser::SerializeStruct;
11189        s.serialize_field("team_member_id", &self.team_member_id)?;
11190        Ok(())
11191    }
11192}
11193
11194impl<'de> ::serde::de::Deserialize<'de> for ListMemberAppsArg {
11195    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
11196        // struct deserializer
11197        use serde::de::{MapAccess, Visitor};
11198        struct StructVisitor;
11199        impl<'de> Visitor<'de> for StructVisitor {
11200            type Value = ListMemberAppsArg;
11201            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
11202                f.write_str("a ListMemberAppsArg struct")
11203            }
11204            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
11205                ListMemberAppsArg::internal_deserialize(map)
11206            }
11207        }
11208        deserializer.deserialize_struct("ListMemberAppsArg", LIST_MEMBER_APPS_ARG_FIELDS, StructVisitor)
11209    }
11210}
11211
11212impl ::serde::ser::Serialize for ListMemberAppsArg {
11213    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
11214        // struct serializer
11215        use serde::ser::SerializeStruct;
11216        let mut s = serializer.serialize_struct("ListMemberAppsArg", 1)?;
11217        self.internal_serialize::<S>(&mut s)?;
11218        s.end()
11219    }
11220}
11221
11222/// Error returned by
11223/// [`linked_apps_list_member_linked_apps()`](crate::team::linked_apps_list_member_linked_apps).
11224#[derive(Debug, Clone, PartialEq, Eq)]
11225#[non_exhaustive] // variants may be added in the future
11226pub enum ListMemberAppsError {
11227    /// Member not found.
11228    MemberNotFound,
11229    /// Catch-all used for unrecognized values returned from the server. Encountering this value
11230    /// typically indicates that this SDK version is out of date.
11231    Other,
11232}
11233
11234impl<'de> ::serde::de::Deserialize<'de> for ListMemberAppsError {
11235    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
11236        // union deserializer
11237        use serde::de::{self, MapAccess, Visitor};
11238        struct EnumVisitor;
11239        impl<'de> Visitor<'de> for EnumVisitor {
11240            type Value = ListMemberAppsError;
11241            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
11242                f.write_str("a ListMemberAppsError structure")
11243            }
11244            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
11245                let tag: &str = match map.next_key()? {
11246                    Some(".tag") => map.next_value()?,
11247                    _ => return Err(de::Error::missing_field(".tag"))
11248                };
11249                let value = match tag {
11250                    "member_not_found" => ListMemberAppsError::MemberNotFound,
11251                    _ => ListMemberAppsError::Other,
11252                };
11253                crate::eat_json_fields(&mut map)?;
11254                Ok(value)
11255            }
11256        }
11257        const VARIANTS: &[&str] = &["member_not_found",
11258                                    "other"];
11259        deserializer.deserialize_struct("ListMemberAppsError", VARIANTS, EnumVisitor)
11260    }
11261}
11262
11263impl ::serde::ser::Serialize for ListMemberAppsError {
11264    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
11265        // union serializer
11266        use serde::ser::SerializeStruct;
11267        match self {
11268            ListMemberAppsError::MemberNotFound => {
11269                // unit
11270                let mut s = serializer.serialize_struct("ListMemberAppsError", 1)?;
11271                s.serialize_field(".tag", "member_not_found")?;
11272                s.end()
11273            }
11274            ListMemberAppsError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
11275        }
11276    }
11277}
11278
11279impl ::std::error::Error for ListMemberAppsError {
11280}
11281
11282impl ::std::fmt::Display for ListMemberAppsError {
11283    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
11284        match self {
11285            ListMemberAppsError::MemberNotFound => f.write_str("Member not found."),
11286            _ => write!(f, "{:?}", *self),
11287        }
11288    }
11289}
11290
11291#[derive(Debug, Clone, PartialEq, Eq)]
11292#[non_exhaustive] // structs may have more fields added in the future.
11293pub struct ListMemberAppsResult {
11294    /// List of third party applications linked by this team member.
11295    pub linked_api_apps: Vec<ApiApp>,
11296}
11297
11298impl ListMemberAppsResult {
11299    pub fn new(linked_api_apps: Vec<ApiApp>) -> Self {
11300        ListMemberAppsResult {
11301            linked_api_apps,
11302        }
11303    }
11304}
11305
11306const LIST_MEMBER_APPS_RESULT_FIELDS: &[&str] = &["linked_api_apps"];
11307impl ListMemberAppsResult {
11308    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
11309        map: V,
11310    ) -> Result<ListMemberAppsResult, V::Error> {
11311        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
11312    }
11313
11314    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
11315        mut map: V,
11316        optional: bool,
11317    ) -> Result<Option<ListMemberAppsResult>, V::Error> {
11318        let mut field_linked_api_apps = None;
11319        let mut nothing = true;
11320        while let Some(key) = map.next_key::<&str>()? {
11321            nothing = false;
11322            match key {
11323                "linked_api_apps" => {
11324                    if field_linked_api_apps.is_some() {
11325                        return Err(::serde::de::Error::duplicate_field("linked_api_apps"));
11326                    }
11327                    field_linked_api_apps = Some(map.next_value()?);
11328                }
11329                _ => {
11330                    // unknown field allowed and ignored
11331                    map.next_value::<::serde_json::Value>()?;
11332                }
11333            }
11334        }
11335        if optional && nothing {
11336            return Ok(None);
11337        }
11338        let result = ListMemberAppsResult {
11339            linked_api_apps: field_linked_api_apps.ok_or_else(|| ::serde::de::Error::missing_field("linked_api_apps"))?,
11340        };
11341        Ok(Some(result))
11342    }
11343
11344    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
11345        &self,
11346        s: &mut S::SerializeStruct,
11347    ) -> Result<(), S::Error> {
11348        use serde::ser::SerializeStruct;
11349        s.serialize_field("linked_api_apps", &self.linked_api_apps)?;
11350        Ok(())
11351    }
11352}
11353
11354impl<'de> ::serde::de::Deserialize<'de> for ListMemberAppsResult {
11355    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
11356        // struct deserializer
11357        use serde::de::{MapAccess, Visitor};
11358        struct StructVisitor;
11359        impl<'de> Visitor<'de> for StructVisitor {
11360            type Value = ListMemberAppsResult;
11361            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
11362                f.write_str("a ListMemberAppsResult struct")
11363            }
11364            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
11365                ListMemberAppsResult::internal_deserialize(map)
11366            }
11367        }
11368        deserializer.deserialize_struct("ListMemberAppsResult", LIST_MEMBER_APPS_RESULT_FIELDS, StructVisitor)
11369    }
11370}
11371
11372impl ::serde::ser::Serialize for ListMemberAppsResult {
11373    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
11374        // struct serializer
11375        use serde::ser::SerializeStruct;
11376        let mut s = serializer.serialize_struct("ListMemberAppsResult", 1)?;
11377        self.internal_serialize::<S>(&mut s)?;
11378        s.end()
11379    }
11380}
11381
11382#[derive(Debug, Clone, PartialEq, Eq)]
11383#[non_exhaustive] // structs may have more fields added in the future.
11384pub struct ListMemberDevicesArg {
11385    /// The team's member id.
11386    pub team_member_id: String,
11387    /// Whether to list web sessions of the team's member.
11388    pub include_web_sessions: bool,
11389    /// Whether to list linked desktop devices of the team's member.
11390    pub include_desktop_clients: bool,
11391    /// Whether to list linked mobile devices of the team's member.
11392    pub include_mobile_clients: bool,
11393}
11394
11395impl ListMemberDevicesArg {
11396    pub fn new(team_member_id: String) -> Self {
11397        ListMemberDevicesArg {
11398            team_member_id,
11399            include_web_sessions: true,
11400            include_desktop_clients: true,
11401            include_mobile_clients: true,
11402        }
11403    }
11404
11405    pub fn with_include_web_sessions(mut self, value: bool) -> Self {
11406        self.include_web_sessions = value;
11407        self
11408    }
11409
11410    pub fn with_include_desktop_clients(mut self, value: bool) -> Self {
11411        self.include_desktop_clients = value;
11412        self
11413    }
11414
11415    pub fn with_include_mobile_clients(mut self, value: bool) -> Self {
11416        self.include_mobile_clients = value;
11417        self
11418    }
11419}
11420
11421const LIST_MEMBER_DEVICES_ARG_FIELDS: &[&str] = &["team_member_id",
11422                                                  "include_web_sessions",
11423                                                  "include_desktop_clients",
11424                                                  "include_mobile_clients"];
11425impl ListMemberDevicesArg {
11426    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
11427        map: V,
11428    ) -> Result<ListMemberDevicesArg, V::Error> {
11429        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
11430    }
11431
11432    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
11433        mut map: V,
11434        optional: bool,
11435    ) -> Result<Option<ListMemberDevicesArg>, V::Error> {
11436        let mut field_team_member_id = None;
11437        let mut field_include_web_sessions = None;
11438        let mut field_include_desktop_clients = None;
11439        let mut field_include_mobile_clients = None;
11440        let mut nothing = true;
11441        while let Some(key) = map.next_key::<&str>()? {
11442            nothing = false;
11443            match key {
11444                "team_member_id" => {
11445                    if field_team_member_id.is_some() {
11446                        return Err(::serde::de::Error::duplicate_field("team_member_id"));
11447                    }
11448                    field_team_member_id = Some(map.next_value()?);
11449                }
11450                "include_web_sessions" => {
11451                    if field_include_web_sessions.is_some() {
11452                        return Err(::serde::de::Error::duplicate_field("include_web_sessions"));
11453                    }
11454                    field_include_web_sessions = Some(map.next_value()?);
11455                }
11456                "include_desktop_clients" => {
11457                    if field_include_desktop_clients.is_some() {
11458                        return Err(::serde::de::Error::duplicate_field("include_desktop_clients"));
11459                    }
11460                    field_include_desktop_clients = Some(map.next_value()?);
11461                }
11462                "include_mobile_clients" => {
11463                    if field_include_mobile_clients.is_some() {
11464                        return Err(::serde::de::Error::duplicate_field("include_mobile_clients"));
11465                    }
11466                    field_include_mobile_clients = Some(map.next_value()?);
11467                }
11468                _ => {
11469                    // unknown field allowed and ignored
11470                    map.next_value::<::serde_json::Value>()?;
11471                }
11472            }
11473        }
11474        if optional && nothing {
11475            return Ok(None);
11476        }
11477        let result = ListMemberDevicesArg {
11478            team_member_id: field_team_member_id.ok_or_else(|| ::serde::de::Error::missing_field("team_member_id"))?,
11479            include_web_sessions: field_include_web_sessions.unwrap_or(true),
11480            include_desktop_clients: field_include_desktop_clients.unwrap_or(true),
11481            include_mobile_clients: field_include_mobile_clients.unwrap_or(true),
11482        };
11483        Ok(Some(result))
11484    }
11485
11486    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
11487        &self,
11488        s: &mut S::SerializeStruct,
11489    ) -> Result<(), S::Error> {
11490        use serde::ser::SerializeStruct;
11491        s.serialize_field("team_member_id", &self.team_member_id)?;
11492        if !self.include_web_sessions {
11493            s.serialize_field("include_web_sessions", &self.include_web_sessions)?;
11494        }
11495        if !self.include_desktop_clients {
11496            s.serialize_field("include_desktop_clients", &self.include_desktop_clients)?;
11497        }
11498        if !self.include_mobile_clients {
11499            s.serialize_field("include_mobile_clients", &self.include_mobile_clients)?;
11500        }
11501        Ok(())
11502    }
11503}
11504
11505impl<'de> ::serde::de::Deserialize<'de> for ListMemberDevicesArg {
11506    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
11507        // struct deserializer
11508        use serde::de::{MapAccess, Visitor};
11509        struct StructVisitor;
11510        impl<'de> Visitor<'de> for StructVisitor {
11511            type Value = ListMemberDevicesArg;
11512            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
11513                f.write_str("a ListMemberDevicesArg struct")
11514            }
11515            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
11516                ListMemberDevicesArg::internal_deserialize(map)
11517            }
11518        }
11519        deserializer.deserialize_struct("ListMemberDevicesArg", LIST_MEMBER_DEVICES_ARG_FIELDS, StructVisitor)
11520    }
11521}
11522
11523impl ::serde::ser::Serialize for ListMemberDevicesArg {
11524    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
11525        // struct serializer
11526        use serde::ser::SerializeStruct;
11527        let mut s = serializer.serialize_struct("ListMemberDevicesArg", 4)?;
11528        self.internal_serialize::<S>(&mut s)?;
11529        s.end()
11530    }
11531}
11532
11533#[derive(Debug, Clone, PartialEq, Eq)]
11534#[non_exhaustive] // variants may be added in the future
11535pub enum ListMemberDevicesError {
11536    /// Member not found.
11537    MemberNotFound,
11538    /// Catch-all used for unrecognized values returned from the server. Encountering this value
11539    /// typically indicates that this SDK version is out of date.
11540    Other,
11541}
11542
11543impl<'de> ::serde::de::Deserialize<'de> for ListMemberDevicesError {
11544    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
11545        // union deserializer
11546        use serde::de::{self, MapAccess, Visitor};
11547        struct EnumVisitor;
11548        impl<'de> Visitor<'de> for EnumVisitor {
11549            type Value = ListMemberDevicesError;
11550            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
11551                f.write_str("a ListMemberDevicesError structure")
11552            }
11553            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
11554                let tag: &str = match map.next_key()? {
11555                    Some(".tag") => map.next_value()?,
11556                    _ => return Err(de::Error::missing_field(".tag"))
11557                };
11558                let value = match tag {
11559                    "member_not_found" => ListMemberDevicesError::MemberNotFound,
11560                    _ => ListMemberDevicesError::Other,
11561                };
11562                crate::eat_json_fields(&mut map)?;
11563                Ok(value)
11564            }
11565        }
11566        const VARIANTS: &[&str] = &["member_not_found",
11567                                    "other"];
11568        deserializer.deserialize_struct("ListMemberDevicesError", VARIANTS, EnumVisitor)
11569    }
11570}
11571
11572impl ::serde::ser::Serialize for ListMemberDevicesError {
11573    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
11574        // union serializer
11575        use serde::ser::SerializeStruct;
11576        match self {
11577            ListMemberDevicesError::MemberNotFound => {
11578                // unit
11579                let mut s = serializer.serialize_struct("ListMemberDevicesError", 1)?;
11580                s.serialize_field(".tag", "member_not_found")?;
11581                s.end()
11582            }
11583            ListMemberDevicesError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
11584        }
11585    }
11586}
11587
11588impl ::std::error::Error for ListMemberDevicesError {
11589}
11590
11591impl ::std::fmt::Display for ListMemberDevicesError {
11592    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
11593        match self {
11594            ListMemberDevicesError::MemberNotFound => f.write_str("Member not found."),
11595            _ => write!(f, "{:?}", *self),
11596        }
11597    }
11598}
11599
11600#[derive(Debug, Clone, PartialEq, Eq, Default)]
11601#[non_exhaustive] // structs may have more fields added in the future.
11602pub struct ListMemberDevicesResult {
11603    /// List of web sessions made by this team member.
11604    pub active_web_sessions: Option<Vec<ActiveWebSession>>,
11605    /// List of desktop clients used by this team member.
11606    pub desktop_client_sessions: Option<Vec<DesktopClientSession>>,
11607    /// List of mobile client used by this team member.
11608    pub mobile_client_sessions: Option<Vec<MobileClientSession>>,
11609}
11610
11611impl ListMemberDevicesResult {
11612    pub fn with_active_web_sessions(mut self, value: Vec<ActiveWebSession>) -> Self {
11613        self.active_web_sessions = Some(value);
11614        self
11615    }
11616
11617    pub fn with_desktop_client_sessions(mut self, value: Vec<DesktopClientSession>) -> Self {
11618        self.desktop_client_sessions = Some(value);
11619        self
11620    }
11621
11622    pub fn with_mobile_client_sessions(mut self, value: Vec<MobileClientSession>) -> Self {
11623        self.mobile_client_sessions = Some(value);
11624        self
11625    }
11626}
11627
11628const LIST_MEMBER_DEVICES_RESULT_FIELDS: &[&str] = &["active_web_sessions",
11629                                                     "desktop_client_sessions",
11630                                                     "mobile_client_sessions"];
11631impl ListMemberDevicesResult {
11632    // no _opt deserializer
11633    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
11634        mut map: V,
11635    ) -> Result<ListMemberDevicesResult, V::Error> {
11636        let mut field_active_web_sessions = None;
11637        let mut field_desktop_client_sessions = None;
11638        let mut field_mobile_client_sessions = None;
11639        while let Some(key) = map.next_key::<&str>()? {
11640            match key {
11641                "active_web_sessions" => {
11642                    if field_active_web_sessions.is_some() {
11643                        return Err(::serde::de::Error::duplicate_field("active_web_sessions"));
11644                    }
11645                    field_active_web_sessions = Some(map.next_value()?);
11646                }
11647                "desktop_client_sessions" => {
11648                    if field_desktop_client_sessions.is_some() {
11649                        return Err(::serde::de::Error::duplicate_field("desktop_client_sessions"));
11650                    }
11651                    field_desktop_client_sessions = Some(map.next_value()?);
11652                }
11653                "mobile_client_sessions" => {
11654                    if field_mobile_client_sessions.is_some() {
11655                        return Err(::serde::de::Error::duplicate_field("mobile_client_sessions"));
11656                    }
11657                    field_mobile_client_sessions = Some(map.next_value()?);
11658                }
11659                _ => {
11660                    // unknown field allowed and ignored
11661                    map.next_value::<::serde_json::Value>()?;
11662                }
11663            }
11664        }
11665        let result = ListMemberDevicesResult {
11666            active_web_sessions: field_active_web_sessions.and_then(Option::flatten),
11667            desktop_client_sessions: field_desktop_client_sessions.and_then(Option::flatten),
11668            mobile_client_sessions: field_mobile_client_sessions.and_then(Option::flatten),
11669        };
11670        Ok(result)
11671    }
11672
11673    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
11674        &self,
11675        s: &mut S::SerializeStruct,
11676    ) -> Result<(), S::Error> {
11677        use serde::ser::SerializeStruct;
11678        if let Some(val) = &self.active_web_sessions {
11679            s.serialize_field("active_web_sessions", val)?;
11680        }
11681        if let Some(val) = &self.desktop_client_sessions {
11682            s.serialize_field("desktop_client_sessions", val)?;
11683        }
11684        if let Some(val) = &self.mobile_client_sessions {
11685            s.serialize_field("mobile_client_sessions", val)?;
11686        }
11687        Ok(())
11688    }
11689}
11690
11691impl<'de> ::serde::de::Deserialize<'de> for ListMemberDevicesResult {
11692    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
11693        // struct deserializer
11694        use serde::de::{MapAccess, Visitor};
11695        struct StructVisitor;
11696        impl<'de> Visitor<'de> for StructVisitor {
11697            type Value = ListMemberDevicesResult;
11698            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
11699                f.write_str("a ListMemberDevicesResult struct")
11700            }
11701            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
11702                ListMemberDevicesResult::internal_deserialize(map)
11703            }
11704        }
11705        deserializer.deserialize_struct("ListMemberDevicesResult", LIST_MEMBER_DEVICES_RESULT_FIELDS, StructVisitor)
11706    }
11707}
11708
11709impl ::serde::ser::Serialize for ListMemberDevicesResult {
11710    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
11711        // struct serializer
11712        use serde::ser::SerializeStruct;
11713        let mut s = serializer.serialize_struct("ListMemberDevicesResult", 3)?;
11714        self.internal_serialize::<S>(&mut s)?;
11715        s.end()
11716    }
11717}
11718
11719/// Arguments for
11720/// [`linked_apps_list_members_linked_apps()`](crate::team::linked_apps_list_members_linked_apps).
11721#[derive(Debug, Clone, PartialEq, Eq, Default)]
11722#[non_exhaustive] // structs may have more fields added in the future.
11723pub struct ListMembersAppsArg {
11724    /// At the first call to the
11725    /// [`linked_apps_list_members_linked_apps()`](crate::team::linked_apps_list_members_linked_apps)
11726    /// the cursor shouldn't be passed. Then, if the result of the call includes a cursor, the
11727    /// following requests should include the received cursors in order to receive the next sub list
11728    /// of the team applications.
11729    pub cursor: Option<String>,
11730}
11731
11732impl ListMembersAppsArg {
11733    pub fn with_cursor(mut self, value: String) -> Self {
11734        self.cursor = Some(value);
11735        self
11736    }
11737}
11738
11739const LIST_MEMBERS_APPS_ARG_FIELDS: &[&str] = &["cursor"];
11740impl ListMembersAppsArg {
11741    // no _opt deserializer
11742    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
11743        mut map: V,
11744    ) -> Result<ListMembersAppsArg, V::Error> {
11745        let mut field_cursor = None;
11746        while let Some(key) = map.next_key::<&str>()? {
11747            match key {
11748                "cursor" => {
11749                    if field_cursor.is_some() {
11750                        return Err(::serde::de::Error::duplicate_field("cursor"));
11751                    }
11752                    field_cursor = Some(map.next_value()?);
11753                }
11754                _ => {
11755                    // unknown field allowed and ignored
11756                    map.next_value::<::serde_json::Value>()?;
11757                }
11758            }
11759        }
11760        let result = ListMembersAppsArg {
11761            cursor: field_cursor.and_then(Option::flatten),
11762        };
11763        Ok(result)
11764    }
11765
11766    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
11767        &self,
11768        s: &mut S::SerializeStruct,
11769    ) -> Result<(), S::Error> {
11770        use serde::ser::SerializeStruct;
11771        if let Some(val) = &self.cursor {
11772            s.serialize_field("cursor", val)?;
11773        }
11774        Ok(())
11775    }
11776}
11777
11778impl<'de> ::serde::de::Deserialize<'de> for ListMembersAppsArg {
11779    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
11780        // struct deserializer
11781        use serde::de::{MapAccess, Visitor};
11782        struct StructVisitor;
11783        impl<'de> Visitor<'de> for StructVisitor {
11784            type Value = ListMembersAppsArg;
11785            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
11786                f.write_str("a ListMembersAppsArg struct")
11787            }
11788            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
11789                ListMembersAppsArg::internal_deserialize(map)
11790            }
11791        }
11792        deserializer.deserialize_struct("ListMembersAppsArg", LIST_MEMBERS_APPS_ARG_FIELDS, StructVisitor)
11793    }
11794}
11795
11796impl ::serde::ser::Serialize for ListMembersAppsArg {
11797    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
11798        // struct serializer
11799        use serde::ser::SerializeStruct;
11800        let mut s = serializer.serialize_struct("ListMembersAppsArg", 1)?;
11801        self.internal_serialize::<S>(&mut s)?;
11802        s.end()
11803    }
11804}
11805
11806/// Error returned by
11807/// [`linked_apps_list_members_linked_apps()`](crate::team::linked_apps_list_members_linked_apps).
11808#[derive(Debug, Clone, PartialEq, Eq)]
11809#[non_exhaustive] // variants may be added in the future
11810pub enum ListMembersAppsError {
11811    /// Indicates that the cursor has been invalidated. Call
11812    /// [`linked_apps_list_members_linked_apps()`](crate::team::linked_apps_list_members_linked_apps)
11813    /// again with an empty cursor to obtain a new cursor.
11814    Reset,
11815    /// Catch-all used for unrecognized values returned from the server. Encountering this value
11816    /// typically indicates that this SDK version is out of date.
11817    Other,
11818}
11819
11820impl<'de> ::serde::de::Deserialize<'de> for ListMembersAppsError {
11821    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
11822        // union deserializer
11823        use serde::de::{self, MapAccess, Visitor};
11824        struct EnumVisitor;
11825        impl<'de> Visitor<'de> for EnumVisitor {
11826            type Value = ListMembersAppsError;
11827            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
11828                f.write_str("a ListMembersAppsError structure")
11829            }
11830            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
11831                let tag: &str = match map.next_key()? {
11832                    Some(".tag") => map.next_value()?,
11833                    _ => return Err(de::Error::missing_field(".tag"))
11834                };
11835                let value = match tag {
11836                    "reset" => ListMembersAppsError::Reset,
11837                    _ => ListMembersAppsError::Other,
11838                };
11839                crate::eat_json_fields(&mut map)?;
11840                Ok(value)
11841            }
11842        }
11843        const VARIANTS: &[&str] = &["reset",
11844                                    "other"];
11845        deserializer.deserialize_struct("ListMembersAppsError", VARIANTS, EnumVisitor)
11846    }
11847}
11848
11849impl ::serde::ser::Serialize for ListMembersAppsError {
11850    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
11851        // union serializer
11852        use serde::ser::SerializeStruct;
11853        match self {
11854            ListMembersAppsError::Reset => {
11855                // unit
11856                let mut s = serializer.serialize_struct("ListMembersAppsError", 1)?;
11857                s.serialize_field(".tag", "reset")?;
11858                s.end()
11859            }
11860            ListMembersAppsError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
11861        }
11862    }
11863}
11864
11865impl ::std::error::Error for ListMembersAppsError {
11866}
11867
11868impl ::std::fmt::Display for ListMembersAppsError {
11869    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
11870        write!(f, "{:?}", *self)
11871    }
11872}
11873
11874/// Information returned by
11875/// [`linked_apps_list_members_linked_apps()`](crate::team::linked_apps_list_members_linked_apps).
11876#[derive(Debug, Clone, PartialEq, Eq)]
11877#[non_exhaustive] // structs may have more fields added in the future.
11878pub struct ListMembersAppsResult {
11879    /// The linked applications of each member of the team.
11880    pub apps: Vec<MemberLinkedApps>,
11881    /// If true, then there are more apps available. Pass the cursor to
11882    /// [`linked_apps_list_members_linked_apps()`](crate::team::linked_apps_list_members_linked_apps)
11883    /// to retrieve the rest.
11884    pub has_more: bool,
11885    /// Pass the cursor into
11886    /// [`linked_apps_list_members_linked_apps()`](crate::team::linked_apps_list_members_linked_apps)
11887    /// to receive the next sub list of team's applications.
11888    pub cursor: Option<String>,
11889}
11890
11891impl ListMembersAppsResult {
11892    pub fn new(apps: Vec<MemberLinkedApps>, has_more: bool) -> Self {
11893        ListMembersAppsResult {
11894            apps,
11895            has_more,
11896            cursor: None,
11897        }
11898    }
11899
11900    pub fn with_cursor(mut self, value: String) -> Self {
11901        self.cursor = Some(value);
11902        self
11903    }
11904}
11905
11906const LIST_MEMBERS_APPS_RESULT_FIELDS: &[&str] = &["apps",
11907                                                   "has_more",
11908                                                   "cursor"];
11909impl ListMembersAppsResult {
11910    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
11911        map: V,
11912    ) -> Result<ListMembersAppsResult, V::Error> {
11913        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
11914    }
11915
11916    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
11917        mut map: V,
11918        optional: bool,
11919    ) -> Result<Option<ListMembersAppsResult>, V::Error> {
11920        let mut field_apps = None;
11921        let mut field_has_more = None;
11922        let mut field_cursor = None;
11923        let mut nothing = true;
11924        while let Some(key) = map.next_key::<&str>()? {
11925            nothing = false;
11926            match key {
11927                "apps" => {
11928                    if field_apps.is_some() {
11929                        return Err(::serde::de::Error::duplicate_field("apps"));
11930                    }
11931                    field_apps = Some(map.next_value()?);
11932                }
11933                "has_more" => {
11934                    if field_has_more.is_some() {
11935                        return Err(::serde::de::Error::duplicate_field("has_more"));
11936                    }
11937                    field_has_more = Some(map.next_value()?);
11938                }
11939                "cursor" => {
11940                    if field_cursor.is_some() {
11941                        return Err(::serde::de::Error::duplicate_field("cursor"));
11942                    }
11943                    field_cursor = Some(map.next_value()?);
11944                }
11945                _ => {
11946                    // unknown field allowed and ignored
11947                    map.next_value::<::serde_json::Value>()?;
11948                }
11949            }
11950        }
11951        if optional && nothing {
11952            return Ok(None);
11953        }
11954        let result = ListMembersAppsResult {
11955            apps: field_apps.ok_or_else(|| ::serde::de::Error::missing_field("apps"))?,
11956            has_more: field_has_more.ok_or_else(|| ::serde::de::Error::missing_field("has_more"))?,
11957            cursor: field_cursor.and_then(Option::flatten),
11958        };
11959        Ok(Some(result))
11960    }
11961
11962    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
11963        &self,
11964        s: &mut S::SerializeStruct,
11965    ) -> Result<(), S::Error> {
11966        use serde::ser::SerializeStruct;
11967        s.serialize_field("apps", &self.apps)?;
11968        s.serialize_field("has_more", &self.has_more)?;
11969        if let Some(val) = &self.cursor {
11970            s.serialize_field("cursor", val)?;
11971        }
11972        Ok(())
11973    }
11974}
11975
11976impl<'de> ::serde::de::Deserialize<'de> for ListMembersAppsResult {
11977    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
11978        // struct deserializer
11979        use serde::de::{MapAccess, Visitor};
11980        struct StructVisitor;
11981        impl<'de> Visitor<'de> for StructVisitor {
11982            type Value = ListMembersAppsResult;
11983            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
11984                f.write_str("a ListMembersAppsResult struct")
11985            }
11986            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
11987                ListMembersAppsResult::internal_deserialize(map)
11988            }
11989        }
11990        deserializer.deserialize_struct("ListMembersAppsResult", LIST_MEMBERS_APPS_RESULT_FIELDS, StructVisitor)
11991    }
11992}
11993
11994impl ::serde::ser::Serialize for ListMembersAppsResult {
11995    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
11996        // struct serializer
11997        use serde::ser::SerializeStruct;
11998        let mut s = serializer.serialize_struct("ListMembersAppsResult", 3)?;
11999        self.internal_serialize::<S>(&mut s)?;
12000        s.end()
12001    }
12002}
12003
12004#[derive(Debug, Clone, PartialEq, Eq)]
12005#[non_exhaustive] // structs may have more fields added in the future.
12006pub struct ListMembersDevicesArg {
12007    /// At the first call to the
12008    /// [`devices_list_members_devices()`](crate::team::devices_list_members_devices) the cursor
12009    /// shouldn't be passed. Then, if the result of the call includes a cursor, the following
12010    /// requests should include the received cursors in order to receive the next sub list of team
12011    /// devices.
12012    pub cursor: Option<String>,
12013    /// Whether to list web sessions of the team members.
12014    pub include_web_sessions: bool,
12015    /// Whether to list desktop clients of the team members.
12016    pub include_desktop_clients: bool,
12017    /// Whether to list mobile clients of the team members.
12018    pub include_mobile_clients: bool,
12019}
12020
12021impl Default for ListMembersDevicesArg {
12022    fn default() -> Self {
12023        ListMembersDevicesArg {
12024            cursor: None,
12025            include_web_sessions: true,
12026            include_desktop_clients: true,
12027            include_mobile_clients: true,
12028        }
12029    }
12030}
12031
12032impl ListMembersDevicesArg {
12033    pub fn with_cursor(mut self, value: String) -> Self {
12034        self.cursor = Some(value);
12035        self
12036    }
12037
12038    pub fn with_include_web_sessions(mut self, value: bool) -> Self {
12039        self.include_web_sessions = value;
12040        self
12041    }
12042
12043    pub fn with_include_desktop_clients(mut self, value: bool) -> Self {
12044        self.include_desktop_clients = value;
12045        self
12046    }
12047
12048    pub fn with_include_mobile_clients(mut self, value: bool) -> Self {
12049        self.include_mobile_clients = value;
12050        self
12051    }
12052}
12053
12054const LIST_MEMBERS_DEVICES_ARG_FIELDS: &[&str] = &["cursor",
12055                                                   "include_web_sessions",
12056                                                   "include_desktop_clients",
12057                                                   "include_mobile_clients"];
12058impl ListMembersDevicesArg {
12059    // no _opt deserializer
12060    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
12061        mut map: V,
12062    ) -> Result<ListMembersDevicesArg, V::Error> {
12063        let mut field_cursor = None;
12064        let mut field_include_web_sessions = None;
12065        let mut field_include_desktop_clients = None;
12066        let mut field_include_mobile_clients = None;
12067        while let Some(key) = map.next_key::<&str>()? {
12068            match key {
12069                "cursor" => {
12070                    if field_cursor.is_some() {
12071                        return Err(::serde::de::Error::duplicate_field("cursor"));
12072                    }
12073                    field_cursor = Some(map.next_value()?);
12074                }
12075                "include_web_sessions" => {
12076                    if field_include_web_sessions.is_some() {
12077                        return Err(::serde::de::Error::duplicate_field("include_web_sessions"));
12078                    }
12079                    field_include_web_sessions = Some(map.next_value()?);
12080                }
12081                "include_desktop_clients" => {
12082                    if field_include_desktop_clients.is_some() {
12083                        return Err(::serde::de::Error::duplicate_field("include_desktop_clients"));
12084                    }
12085                    field_include_desktop_clients = Some(map.next_value()?);
12086                }
12087                "include_mobile_clients" => {
12088                    if field_include_mobile_clients.is_some() {
12089                        return Err(::serde::de::Error::duplicate_field("include_mobile_clients"));
12090                    }
12091                    field_include_mobile_clients = Some(map.next_value()?);
12092                }
12093                _ => {
12094                    // unknown field allowed and ignored
12095                    map.next_value::<::serde_json::Value>()?;
12096                }
12097            }
12098        }
12099        let result = ListMembersDevicesArg {
12100            cursor: field_cursor.and_then(Option::flatten),
12101            include_web_sessions: field_include_web_sessions.unwrap_or(true),
12102            include_desktop_clients: field_include_desktop_clients.unwrap_or(true),
12103            include_mobile_clients: field_include_mobile_clients.unwrap_or(true),
12104        };
12105        Ok(result)
12106    }
12107
12108    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
12109        &self,
12110        s: &mut S::SerializeStruct,
12111    ) -> Result<(), S::Error> {
12112        use serde::ser::SerializeStruct;
12113        if let Some(val) = &self.cursor {
12114            s.serialize_field("cursor", val)?;
12115        }
12116        if !self.include_web_sessions {
12117            s.serialize_field("include_web_sessions", &self.include_web_sessions)?;
12118        }
12119        if !self.include_desktop_clients {
12120            s.serialize_field("include_desktop_clients", &self.include_desktop_clients)?;
12121        }
12122        if !self.include_mobile_clients {
12123            s.serialize_field("include_mobile_clients", &self.include_mobile_clients)?;
12124        }
12125        Ok(())
12126    }
12127}
12128
12129impl<'de> ::serde::de::Deserialize<'de> for ListMembersDevicesArg {
12130    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
12131        // struct deserializer
12132        use serde::de::{MapAccess, Visitor};
12133        struct StructVisitor;
12134        impl<'de> Visitor<'de> for StructVisitor {
12135            type Value = ListMembersDevicesArg;
12136            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
12137                f.write_str("a ListMembersDevicesArg struct")
12138            }
12139            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
12140                ListMembersDevicesArg::internal_deserialize(map)
12141            }
12142        }
12143        deserializer.deserialize_struct("ListMembersDevicesArg", LIST_MEMBERS_DEVICES_ARG_FIELDS, StructVisitor)
12144    }
12145}
12146
12147impl ::serde::ser::Serialize for ListMembersDevicesArg {
12148    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
12149        // struct serializer
12150        use serde::ser::SerializeStruct;
12151        let mut s = serializer.serialize_struct("ListMembersDevicesArg", 4)?;
12152        self.internal_serialize::<S>(&mut s)?;
12153        s.end()
12154    }
12155}
12156
12157#[derive(Debug, Clone, PartialEq, Eq)]
12158#[non_exhaustive] // variants may be added in the future
12159pub enum ListMembersDevicesError {
12160    /// Indicates that the cursor has been invalidated. Call
12161    /// [`devices_list_members_devices()`](crate::team::devices_list_members_devices) again with an
12162    /// empty cursor to obtain a new cursor.
12163    Reset,
12164    /// Catch-all used for unrecognized values returned from the server. Encountering this value
12165    /// typically indicates that this SDK version is out of date.
12166    Other,
12167}
12168
12169impl<'de> ::serde::de::Deserialize<'de> for ListMembersDevicesError {
12170    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
12171        // union deserializer
12172        use serde::de::{self, MapAccess, Visitor};
12173        struct EnumVisitor;
12174        impl<'de> Visitor<'de> for EnumVisitor {
12175            type Value = ListMembersDevicesError;
12176            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
12177                f.write_str("a ListMembersDevicesError structure")
12178            }
12179            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
12180                let tag: &str = match map.next_key()? {
12181                    Some(".tag") => map.next_value()?,
12182                    _ => return Err(de::Error::missing_field(".tag"))
12183                };
12184                let value = match tag {
12185                    "reset" => ListMembersDevicesError::Reset,
12186                    _ => ListMembersDevicesError::Other,
12187                };
12188                crate::eat_json_fields(&mut map)?;
12189                Ok(value)
12190            }
12191        }
12192        const VARIANTS: &[&str] = &["reset",
12193                                    "other"];
12194        deserializer.deserialize_struct("ListMembersDevicesError", VARIANTS, EnumVisitor)
12195    }
12196}
12197
12198impl ::serde::ser::Serialize for ListMembersDevicesError {
12199    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
12200        // union serializer
12201        use serde::ser::SerializeStruct;
12202        match self {
12203            ListMembersDevicesError::Reset => {
12204                // unit
12205                let mut s = serializer.serialize_struct("ListMembersDevicesError", 1)?;
12206                s.serialize_field(".tag", "reset")?;
12207                s.end()
12208            }
12209            ListMembersDevicesError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
12210        }
12211    }
12212}
12213
12214impl ::std::error::Error for ListMembersDevicesError {
12215}
12216
12217impl ::std::fmt::Display for ListMembersDevicesError {
12218    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
12219        write!(f, "{:?}", *self)
12220    }
12221}
12222
12223#[derive(Debug, Clone, PartialEq, Eq)]
12224#[non_exhaustive] // structs may have more fields added in the future.
12225pub struct ListMembersDevicesResult {
12226    /// The devices of each member of the team.
12227    pub devices: Vec<MemberDevices>,
12228    /// If true, then there are more devices available. Pass the cursor to
12229    /// [`devices_list_members_devices()`](crate::team::devices_list_members_devices) to retrieve
12230    /// the rest.
12231    pub has_more: bool,
12232    /// Pass the cursor into
12233    /// [`devices_list_members_devices()`](crate::team::devices_list_members_devices) to receive the
12234    /// next sub list of team's devices.
12235    pub cursor: Option<String>,
12236}
12237
12238impl ListMembersDevicesResult {
12239    pub fn new(devices: Vec<MemberDevices>, has_more: bool) -> Self {
12240        ListMembersDevicesResult {
12241            devices,
12242            has_more,
12243            cursor: None,
12244        }
12245    }
12246
12247    pub fn with_cursor(mut self, value: String) -> Self {
12248        self.cursor = Some(value);
12249        self
12250    }
12251}
12252
12253const LIST_MEMBERS_DEVICES_RESULT_FIELDS: &[&str] = &["devices",
12254                                                      "has_more",
12255                                                      "cursor"];
12256impl ListMembersDevicesResult {
12257    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
12258        map: V,
12259    ) -> Result<ListMembersDevicesResult, V::Error> {
12260        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
12261    }
12262
12263    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
12264        mut map: V,
12265        optional: bool,
12266    ) -> Result<Option<ListMembersDevicesResult>, V::Error> {
12267        let mut field_devices = None;
12268        let mut field_has_more = None;
12269        let mut field_cursor = None;
12270        let mut nothing = true;
12271        while let Some(key) = map.next_key::<&str>()? {
12272            nothing = false;
12273            match key {
12274                "devices" => {
12275                    if field_devices.is_some() {
12276                        return Err(::serde::de::Error::duplicate_field("devices"));
12277                    }
12278                    field_devices = Some(map.next_value()?);
12279                }
12280                "has_more" => {
12281                    if field_has_more.is_some() {
12282                        return Err(::serde::de::Error::duplicate_field("has_more"));
12283                    }
12284                    field_has_more = Some(map.next_value()?);
12285                }
12286                "cursor" => {
12287                    if field_cursor.is_some() {
12288                        return Err(::serde::de::Error::duplicate_field("cursor"));
12289                    }
12290                    field_cursor = Some(map.next_value()?);
12291                }
12292                _ => {
12293                    // unknown field allowed and ignored
12294                    map.next_value::<::serde_json::Value>()?;
12295                }
12296            }
12297        }
12298        if optional && nothing {
12299            return Ok(None);
12300        }
12301        let result = ListMembersDevicesResult {
12302            devices: field_devices.ok_or_else(|| ::serde::de::Error::missing_field("devices"))?,
12303            has_more: field_has_more.ok_or_else(|| ::serde::de::Error::missing_field("has_more"))?,
12304            cursor: field_cursor.and_then(Option::flatten),
12305        };
12306        Ok(Some(result))
12307    }
12308
12309    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
12310        &self,
12311        s: &mut S::SerializeStruct,
12312    ) -> Result<(), S::Error> {
12313        use serde::ser::SerializeStruct;
12314        s.serialize_field("devices", &self.devices)?;
12315        s.serialize_field("has_more", &self.has_more)?;
12316        if let Some(val) = &self.cursor {
12317            s.serialize_field("cursor", val)?;
12318        }
12319        Ok(())
12320    }
12321}
12322
12323impl<'de> ::serde::de::Deserialize<'de> for ListMembersDevicesResult {
12324    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
12325        // struct deserializer
12326        use serde::de::{MapAccess, Visitor};
12327        struct StructVisitor;
12328        impl<'de> Visitor<'de> for StructVisitor {
12329            type Value = ListMembersDevicesResult;
12330            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
12331                f.write_str("a ListMembersDevicesResult struct")
12332            }
12333            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
12334                ListMembersDevicesResult::internal_deserialize(map)
12335            }
12336        }
12337        deserializer.deserialize_struct("ListMembersDevicesResult", LIST_MEMBERS_DEVICES_RESULT_FIELDS, StructVisitor)
12338    }
12339}
12340
12341impl ::serde::ser::Serialize for ListMembersDevicesResult {
12342    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
12343        // struct serializer
12344        use serde::ser::SerializeStruct;
12345        let mut s = serializer.serialize_struct("ListMembersDevicesResult", 3)?;
12346        self.internal_serialize::<S>(&mut s)?;
12347        s.end()
12348    }
12349}
12350
12351/// Arguments for
12352/// [`linked_apps_list_team_linked_apps()`](crate::team::linked_apps_list_team_linked_apps).
12353#[derive(Debug, Clone, PartialEq, Eq, Default)]
12354#[non_exhaustive] // structs may have more fields added in the future.
12355pub struct ListTeamAppsArg {
12356    /// At the first call to the
12357    /// [`linked_apps_list_team_linked_apps()`](crate::team::linked_apps_list_team_linked_apps) the
12358    /// cursor shouldn't be passed. Then, if the result of the call includes a cursor, the following
12359    /// requests should include the received cursors in order to receive the next sub list of the
12360    /// team applications.
12361    pub cursor: Option<String>,
12362}
12363
12364impl ListTeamAppsArg {
12365    pub fn with_cursor(mut self, value: String) -> Self {
12366        self.cursor = Some(value);
12367        self
12368    }
12369}
12370
12371const LIST_TEAM_APPS_ARG_FIELDS: &[&str] = &["cursor"];
12372impl ListTeamAppsArg {
12373    // no _opt deserializer
12374    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
12375        mut map: V,
12376    ) -> Result<ListTeamAppsArg, V::Error> {
12377        let mut field_cursor = None;
12378        while let Some(key) = map.next_key::<&str>()? {
12379            match key {
12380                "cursor" => {
12381                    if field_cursor.is_some() {
12382                        return Err(::serde::de::Error::duplicate_field("cursor"));
12383                    }
12384                    field_cursor = Some(map.next_value()?);
12385                }
12386                _ => {
12387                    // unknown field allowed and ignored
12388                    map.next_value::<::serde_json::Value>()?;
12389                }
12390            }
12391        }
12392        let result = ListTeamAppsArg {
12393            cursor: field_cursor.and_then(Option::flatten),
12394        };
12395        Ok(result)
12396    }
12397
12398    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
12399        &self,
12400        s: &mut S::SerializeStruct,
12401    ) -> Result<(), S::Error> {
12402        use serde::ser::SerializeStruct;
12403        if let Some(val) = &self.cursor {
12404            s.serialize_field("cursor", val)?;
12405        }
12406        Ok(())
12407    }
12408}
12409
12410impl<'de> ::serde::de::Deserialize<'de> for ListTeamAppsArg {
12411    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
12412        // struct deserializer
12413        use serde::de::{MapAccess, Visitor};
12414        struct StructVisitor;
12415        impl<'de> Visitor<'de> for StructVisitor {
12416            type Value = ListTeamAppsArg;
12417            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
12418                f.write_str("a ListTeamAppsArg struct")
12419            }
12420            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
12421                ListTeamAppsArg::internal_deserialize(map)
12422            }
12423        }
12424        deserializer.deserialize_struct("ListTeamAppsArg", LIST_TEAM_APPS_ARG_FIELDS, StructVisitor)
12425    }
12426}
12427
12428impl ::serde::ser::Serialize for ListTeamAppsArg {
12429    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
12430        // struct serializer
12431        use serde::ser::SerializeStruct;
12432        let mut s = serializer.serialize_struct("ListTeamAppsArg", 1)?;
12433        self.internal_serialize::<S>(&mut s)?;
12434        s.end()
12435    }
12436}
12437
12438/// Error returned by
12439/// [`linked_apps_list_team_linked_apps()`](crate::team::linked_apps_list_team_linked_apps).
12440#[derive(Debug, Clone, PartialEq, Eq)]
12441#[non_exhaustive] // variants may be added in the future
12442pub enum ListTeamAppsError {
12443    /// Indicates that the cursor has been invalidated. Call
12444    /// [`linked_apps_list_team_linked_apps()`](crate::team::linked_apps_list_team_linked_apps)
12445    /// again with an empty cursor to obtain a new cursor.
12446    Reset,
12447    /// Catch-all used for unrecognized values returned from the server. Encountering this value
12448    /// typically indicates that this SDK version is out of date.
12449    Other,
12450}
12451
12452impl<'de> ::serde::de::Deserialize<'de> for ListTeamAppsError {
12453    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
12454        // union deserializer
12455        use serde::de::{self, MapAccess, Visitor};
12456        struct EnumVisitor;
12457        impl<'de> Visitor<'de> for EnumVisitor {
12458            type Value = ListTeamAppsError;
12459            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
12460                f.write_str("a ListTeamAppsError structure")
12461            }
12462            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
12463                let tag: &str = match map.next_key()? {
12464                    Some(".tag") => map.next_value()?,
12465                    _ => return Err(de::Error::missing_field(".tag"))
12466                };
12467                let value = match tag {
12468                    "reset" => ListTeamAppsError::Reset,
12469                    _ => ListTeamAppsError::Other,
12470                };
12471                crate::eat_json_fields(&mut map)?;
12472                Ok(value)
12473            }
12474        }
12475        const VARIANTS: &[&str] = &["reset",
12476                                    "other"];
12477        deserializer.deserialize_struct("ListTeamAppsError", VARIANTS, EnumVisitor)
12478    }
12479}
12480
12481impl ::serde::ser::Serialize for ListTeamAppsError {
12482    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
12483        // union serializer
12484        use serde::ser::SerializeStruct;
12485        match self {
12486            ListTeamAppsError::Reset => {
12487                // unit
12488                let mut s = serializer.serialize_struct("ListTeamAppsError", 1)?;
12489                s.serialize_field(".tag", "reset")?;
12490                s.end()
12491            }
12492            ListTeamAppsError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
12493        }
12494    }
12495}
12496
12497impl ::std::error::Error for ListTeamAppsError {
12498}
12499
12500impl ::std::fmt::Display for ListTeamAppsError {
12501    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
12502        write!(f, "{:?}", *self)
12503    }
12504}
12505
12506/// Information returned by
12507/// [`linked_apps_list_team_linked_apps()`](crate::team::linked_apps_list_team_linked_apps).
12508#[derive(Debug, Clone, PartialEq, Eq)]
12509#[non_exhaustive] // structs may have more fields added in the future.
12510pub struct ListTeamAppsResult {
12511    /// The linked applications of each member of the team.
12512    pub apps: Vec<MemberLinkedApps>,
12513    /// If true, then there are more apps available. Pass the cursor to
12514    /// [`linked_apps_list_team_linked_apps()`](crate::team::linked_apps_list_team_linked_apps) to
12515    /// retrieve the rest.
12516    pub has_more: bool,
12517    /// Pass the cursor into
12518    /// [`linked_apps_list_team_linked_apps()`](crate::team::linked_apps_list_team_linked_apps) to
12519    /// receive the next sub list of team's applications.
12520    pub cursor: Option<String>,
12521}
12522
12523impl ListTeamAppsResult {
12524    pub fn new(apps: Vec<MemberLinkedApps>, has_more: bool) -> Self {
12525        ListTeamAppsResult {
12526            apps,
12527            has_more,
12528            cursor: None,
12529        }
12530    }
12531
12532    pub fn with_cursor(mut self, value: String) -> Self {
12533        self.cursor = Some(value);
12534        self
12535    }
12536}
12537
12538const LIST_TEAM_APPS_RESULT_FIELDS: &[&str] = &["apps",
12539                                                "has_more",
12540                                                "cursor"];
12541impl ListTeamAppsResult {
12542    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
12543        map: V,
12544    ) -> Result<ListTeamAppsResult, V::Error> {
12545        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
12546    }
12547
12548    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
12549        mut map: V,
12550        optional: bool,
12551    ) -> Result<Option<ListTeamAppsResult>, V::Error> {
12552        let mut field_apps = None;
12553        let mut field_has_more = None;
12554        let mut field_cursor = None;
12555        let mut nothing = true;
12556        while let Some(key) = map.next_key::<&str>()? {
12557            nothing = false;
12558            match key {
12559                "apps" => {
12560                    if field_apps.is_some() {
12561                        return Err(::serde::de::Error::duplicate_field("apps"));
12562                    }
12563                    field_apps = Some(map.next_value()?);
12564                }
12565                "has_more" => {
12566                    if field_has_more.is_some() {
12567                        return Err(::serde::de::Error::duplicate_field("has_more"));
12568                    }
12569                    field_has_more = Some(map.next_value()?);
12570                }
12571                "cursor" => {
12572                    if field_cursor.is_some() {
12573                        return Err(::serde::de::Error::duplicate_field("cursor"));
12574                    }
12575                    field_cursor = Some(map.next_value()?);
12576                }
12577                _ => {
12578                    // unknown field allowed and ignored
12579                    map.next_value::<::serde_json::Value>()?;
12580                }
12581            }
12582        }
12583        if optional && nothing {
12584            return Ok(None);
12585        }
12586        let result = ListTeamAppsResult {
12587            apps: field_apps.ok_or_else(|| ::serde::de::Error::missing_field("apps"))?,
12588            has_more: field_has_more.ok_or_else(|| ::serde::de::Error::missing_field("has_more"))?,
12589            cursor: field_cursor.and_then(Option::flatten),
12590        };
12591        Ok(Some(result))
12592    }
12593
12594    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
12595        &self,
12596        s: &mut S::SerializeStruct,
12597    ) -> Result<(), S::Error> {
12598        use serde::ser::SerializeStruct;
12599        s.serialize_field("apps", &self.apps)?;
12600        s.serialize_field("has_more", &self.has_more)?;
12601        if let Some(val) = &self.cursor {
12602            s.serialize_field("cursor", val)?;
12603        }
12604        Ok(())
12605    }
12606}
12607
12608impl<'de> ::serde::de::Deserialize<'de> for ListTeamAppsResult {
12609    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
12610        // struct deserializer
12611        use serde::de::{MapAccess, Visitor};
12612        struct StructVisitor;
12613        impl<'de> Visitor<'de> for StructVisitor {
12614            type Value = ListTeamAppsResult;
12615            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
12616                f.write_str("a ListTeamAppsResult struct")
12617            }
12618            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
12619                ListTeamAppsResult::internal_deserialize(map)
12620            }
12621        }
12622        deserializer.deserialize_struct("ListTeamAppsResult", LIST_TEAM_APPS_RESULT_FIELDS, StructVisitor)
12623    }
12624}
12625
12626impl ::serde::ser::Serialize for ListTeamAppsResult {
12627    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
12628        // struct serializer
12629        use serde::ser::SerializeStruct;
12630        let mut s = serializer.serialize_struct("ListTeamAppsResult", 3)?;
12631        self.internal_serialize::<S>(&mut s)?;
12632        s.end()
12633    }
12634}
12635
12636#[derive(Debug, Clone, PartialEq, Eq)]
12637#[non_exhaustive] // structs may have more fields added in the future.
12638pub struct ListTeamDevicesArg {
12639    /// At the first call to the
12640    /// [`devices_list_team_devices()`](crate::team::devices_list_team_devices) the cursor shouldn't
12641    /// be passed. Then, if the result of the call includes a cursor, the following requests should
12642    /// include the received cursors in order to receive the next sub list of team devices.
12643    pub cursor: Option<String>,
12644    /// Whether to list web sessions of the team members.
12645    pub include_web_sessions: bool,
12646    /// Whether to list desktop clients of the team members.
12647    pub include_desktop_clients: bool,
12648    /// Whether to list mobile clients of the team members.
12649    pub include_mobile_clients: bool,
12650}
12651
12652impl Default for ListTeamDevicesArg {
12653    fn default() -> Self {
12654        ListTeamDevicesArg {
12655            cursor: None,
12656            include_web_sessions: true,
12657            include_desktop_clients: true,
12658            include_mobile_clients: true,
12659        }
12660    }
12661}
12662
12663impl ListTeamDevicesArg {
12664    pub fn with_cursor(mut self, value: String) -> Self {
12665        self.cursor = Some(value);
12666        self
12667    }
12668
12669    pub fn with_include_web_sessions(mut self, value: bool) -> Self {
12670        self.include_web_sessions = value;
12671        self
12672    }
12673
12674    pub fn with_include_desktop_clients(mut self, value: bool) -> Self {
12675        self.include_desktop_clients = value;
12676        self
12677    }
12678
12679    pub fn with_include_mobile_clients(mut self, value: bool) -> Self {
12680        self.include_mobile_clients = value;
12681        self
12682    }
12683}
12684
12685const LIST_TEAM_DEVICES_ARG_FIELDS: &[&str] = &["cursor",
12686                                                "include_web_sessions",
12687                                                "include_desktop_clients",
12688                                                "include_mobile_clients"];
12689impl ListTeamDevicesArg {
12690    // no _opt deserializer
12691    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
12692        mut map: V,
12693    ) -> Result<ListTeamDevicesArg, V::Error> {
12694        let mut field_cursor = None;
12695        let mut field_include_web_sessions = None;
12696        let mut field_include_desktop_clients = None;
12697        let mut field_include_mobile_clients = None;
12698        while let Some(key) = map.next_key::<&str>()? {
12699            match key {
12700                "cursor" => {
12701                    if field_cursor.is_some() {
12702                        return Err(::serde::de::Error::duplicate_field("cursor"));
12703                    }
12704                    field_cursor = Some(map.next_value()?);
12705                }
12706                "include_web_sessions" => {
12707                    if field_include_web_sessions.is_some() {
12708                        return Err(::serde::de::Error::duplicate_field("include_web_sessions"));
12709                    }
12710                    field_include_web_sessions = Some(map.next_value()?);
12711                }
12712                "include_desktop_clients" => {
12713                    if field_include_desktop_clients.is_some() {
12714                        return Err(::serde::de::Error::duplicate_field("include_desktop_clients"));
12715                    }
12716                    field_include_desktop_clients = Some(map.next_value()?);
12717                }
12718                "include_mobile_clients" => {
12719                    if field_include_mobile_clients.is_some() {
12720                        return Err(::serde::de::Error::duplicate_field("include_mobile_clients"));
12721                    }
12722                    field_include_mobile_clients = Some(map.next_value()?);
12723                }
12724                _ => {
12725                    // unknown field allowed and ignored
12726                    map.next_value::<::serde_json::Value>()?;
12727                }
12728            }
12729        }
12730        let result = ListTeamDevicesArg {
12731            cursor: field_cursor.and_then(Option::flatten),
12732            include_web_sessions: field_include_web_sessions.unwrap_or(true),
12733            include_desktop_clients: field_include_desktop_clients.unwrap_or(true),
12734            include_mobile_clients: field_include_mobile_clients.unwrap_or(true),
12735        };
12736        Ok(result)
12737    }
12738
12739    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
12740        &self,
12741        s: &mut S::SerializeStruct,
12742    ) -> Result<(), S::Error> {
12743        use serde::ser::SerializeStruct;
12744        if let Some(val) = &self.cursor {
12745            s.serialize_field("cursor", val)?;
12746        }
12747        if !self.include_web_sessions {
12748            s.serialize_field("include_web_sessions", &self.include_web_sessions)?;
12749        }
12750        if !self.include_desktop_clients {
12751            s.serialize_field("include_desktop_clients", &self.include_desktop_clients)?;
12752        }
12753        if !self.include_mobile_clients {
12754            s.serialize_field("include_mobile_clients", &self.include_mobile_clients)?;
12755        }
12756        Ok(())
12757    }
12758}
12759
12760impl<'de> ::serde::de::Deserialize<'de> for ListTeamDevicesArg {
12761    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
12762        // struct deserializer
12763        use serde::de::{MapAccess, Visitor};
12764        struct StructVisitor;
12765        impl<'de> Visitor<'de> for StructVisitor {
12766            type Value = ListTeamDevicesArg;
12767            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
12768                f.write_str("a ListTeamDevicesArg struct")
12769            }
12770            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
12771                ListTeamDevicesArg::internal_deserialize(map)
12772            }
12773        }
12774        deserializer.deserialize_struct("ListTeamDevicesArg", LIST_TEAM_DEVICES_ARG_FIELDS, StructVisitor)
12775    }
12776}
12777
12778impl ::serde::ser::Serialize for ListTeamDevicesArg {
12779    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
12780        // struct serializer
12781        use serde::ser::SerializeStruct;
12782        let mut s = serializer.serialize_struct("ListTeamDevicesArg", 4)?;
12783        self.internal_serialize::<S>(&mut s)?;
12784        s.end()
12785    }
12786}
12787
12788#[derive(Debug, Clone, PartialEq, Eq)]
12789#[non_exhaustive] // variants may be added in the future
12790pub enum ListTeamDevicesError {
12791    /// Indicates that the cursor has been invalidated. Call
12792    /// [`devices_list_team_devices()`](crate::team::devices_list_team_devices) again with an empty
12793    /// cursor to obtain a new cursor.
12794    Reset,
12795    /// Catch-all used for unrecognized values returned from the server. Encountering this value
12796    /// typically indicates that this SDK version is out of date.
12797    Other,
12798}
12799
12800impl<'de> ::serde::de::Deserialize<'de> for ListTeamDevicesError {
12801    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
12802        // union deserializer
12803        use serde::de::{self, MapAccess, Visitor};
12804        struct EnumVisitor;
12805        impl<'de> Visitor<'de> for EnumVisitor {
12806            type Value = ListTeamDevicesError;
12807            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
12808                f.write_str("a ListTeamDevicesError structure")
12809            }
12810            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
12811                let tag: &str = match map.next_key()? {
12812                    Some(".tag") => map.next_value()?,
12813                    _ => return Err(de::Error::missing_field(".tag"))
12814                };
12815                let value = match tag {
12816                    "reset" => ListTeamDevicesError::Reset,
12817                    _ => ListTeamDevicesError::Other,
12818                };
12819                crate::eat_json_fields(&mut map)?;
12820                Ok(value)
12821            }
12822        }
12823        const VARIANTS: &[&str] = &["reset",
12824                                    "other"];
12825        deserializer.deserialize_struct("ListTeamDevicesError", VARIANTS, EnumVisitor)
12826    }
12827}
12828
12829impl ::serde::ser::Serialize for ListTeamDevicesError {
12830    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
12831        // union serializer
12832        use serde::ser::SerializeStruct;
12833        match self {
12834            ListTeamDevicesError::Reset => {
12835                // unit
12836                let mut s = serializer.serialize_struct("ListTeamDevicesError", 1)?;
12837                s.serialize_field(".tag", "reset")?;
12838                s.end()
12839            }
12840            ListTeamDevicesError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
12841        }
12842    }
12843}
12844
12845impl ::std::error::Error for ListTeamDevicesError {
12846}
12847
12848impl ::std::fmt::Display for ListTeamDevicesError {
12849    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
12850        write!(f, "{:?}", *self)
12851    }
12852}
12853
12854#[derive(Debug, Clone, PartialEq, Eq)]
12855#[non_exhaustive] // structs may have more fields added in the future.
12856pub struct ListTeamDevicesResult {
12857    /// The devices of each member of the team.
12858    pub devices: Vec<MemberDevices>,
12859    /// If true, then there are more devices available. Pass the cursor to
12860    /// [`devices_list_team_devices()`](crate::team::devices_list_team_devices) to retrieve the
12861    /// rest.
12862    pub has_more: bool,
12863    /// Pass the cursor into [`devices_list_team_devices()`](crate::team::devices_list_team_devices)
12864    /// to receive the next sub list of team's devices.
12865    pub cursor: Option<String>,
12866}
12867
12868impl ListTeamDevicesResult {
12869    pub fn new(devices: Vec<MemberDevices>, has_more: bool) -> Self {
12870        ListTeamDevicesResult {
12871            devices,
12872            has_more,
12873            cursor: None,
12874        }
12875    }
12876
12877    pub fn with_cursor(mut self, value: String) -> Self {
12878        self.cursor = Some(value);
12879        self
12880    }
12881}
12882
12883const LIST_TEAM_DEVICES_RESULT_FIELDS: &[&str] = &["devices",
12884                                                   "has_more",
12885                                                   "cursor"];
12886impl ListTeamDevicesResult {
12887    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
12888        map: V,
12889    ) -> Result<ListTeamDevicesResult, V::Error> {
12890        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
12891    }
12892
12893    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
12894        mut map: V,
12895        optional: bool,
12896    ) -> Result<Option<ListTeamDevicesResult>, V::Error> {
12897        let mut field_devices = None;
12898        let mut field_has_more = None;
12899        let mut field_cursor = None;
12900        let mut nothing = true;
12901        while let Some(key) = map.next_key::<&str>()? {
12902            nothing = false;
12903            match key {
12904                "devices" => {
12905                    if field_devices.is_some() {
12906                        return Err(::serde::de::Error::duplicate_field("devices"));
12907                    }
12908                    field_devices = Some(map.next_value()?);
12909                }
12910                "has_more" => {
12911                    if field_has_more.is_some() {
12912                        return Err(::serde::de::Error::duplicate_field("has_more"));
12913                    }
12914                    field_has_more = Some(map.next_value()?);
12915                }
12916                "cursor" => {
12917                    if field_cursor.is_some() {
12918                        return Err(::serde::de::Error::duplicate_field("cursor"));
12919                    }
12920                    field_cursor = Some(map.next_value()?);
12921                }
12922                _ => {
12923                    // unknown field allowed and ignored
12924                    map.next_value::<::serde_json::Value>()?;
12925                }
12926            }
12927        }
12928        if optional && nothing {
12929            return Ok(None);
12930        }
12931        let result = ListTeamDevicesResult {
12932            devices: field_devices.ok_or_else(|| ::serde::de::Error::missing_field("devices"))?,
12933            has_more: field_has_more.ok_or_else(|| ::serde::de::Error::missing_field("has_more"))?,
12934            cursor: field_cursor.and_then(Option::flatten),
12935        };
12936        Ok(Some(result))
12937    }
12938
12939    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
12940        &self,
12941        s: &mut S::SerializeStruct,
12942    ) -> Result<(), S::Error> {
12943        use serde::ser::SerializeStruct;
12944        s.serialize_field("devices", &self.devices)?;
12945        s.serialize_field("has_more", &self.has_more)?;
12946        if let Some(val) = &self.cursor {
12947            s.serialize_field("cursor", val)?;
12948        }
12949        Ok(())
12950    }
12951}
12952
12953impl<'de> ::serde::de::Deserialize<'de> for ListTeamDevicesResult {
12954    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
12955        // struct deserializer
12956        use serde::de::{MapAccess, Visitor};
12957        struct StructVisitor;
12958        impl<'de> Visitor<'de> for StructVisitor {
12959            type Value = ListTeamDevicesResult;
12960            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
12961                f.write_str("a ListTeamDevicesResult struct")
12962            }
12963            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
12964                ListTeamDevicesResult::internal_deserialize(map)
12965            }
12966        }
12967        deserializer.deserialize_struct("ListTeamDevicesResult", LIST_TEAM_DEVICES_RESULT_FIELDS, StructVisitor)
12968    }
12969}
12970
12971impl ::serde::ser::Serialize for ListTeamDevicesResult {
12972    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
12973        // struct serializer
12974        use serde::ser::SerializeStruct;
12975        let mut s = serializer.serialize_struct("ListTeamDevicesResult", 3)?;
12976        self.internal_serialize::<S>(&mut s)?;
12977        s.end()
12978    }
12979}
12980
12981/// Specify access type a member should have when joined to a group.
12982#[derive(Debug, Clone, PartialEq, Eq)]
12983#[non_exhaustive] // structs may have more fields added in the future.
12984pub struct MemberAccess {
12985    /// Identity of a user.
12986    pub user: UserSelectorArg,
12987    /// Access type.
12988    pub access_type: GroupAccessType,
12989}
12990
12991impl MemberAccess {
12992    pub fn new(user: UserSelectorArg, access_type: GroupAccessType) -> Self {
12993        MemberAccess {
12994            user,
12995            access_type,
12996        }
12997    }
12998}
12999
13000const MEMBER_ACCESS_FIELDS: &[&str] = &["user",
13001                                        "access_type"];
13002impl MemberAccess {
13003    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
13004        map: V,
13005    ) -> Result<MemberAccess, V::Error> {
13006        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
13007    }
13008
13009    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
13010        mut map: V,
13011        optional: bool,
13012    ) -> Result<Option<MemberAccess>, V::Error> {
13013        let mut field_user = None;
13014        let mut field_access_type = None;
13015        let mut nothing = true;
13016        while let Some(key) = map.next_key::<&str>()? {
13017            nothing = false;
13018            match key {
13019                "user" => {
13020                    if field_user.is_some() {
13021                        return Err(::serde::de::Error::duplicate_field("user"));
13022                    }
13023                    field_user = Some(map.next_value()?);
13024                }
13025                "access_type" => {
13026                    if field_access_type.is_some() {
13027                        return Err(::serde::de::Error::duplicate_field("access_type"));
13028                    }
13029                    field_access_type = Some(map.next_value()?);
13030                }
13031                _ => {
13032                    // unknown field allowed and ignored
13033                    map.next_value::<::serde_json::Value>()?;
13034                }
13035            }
13036        }
13037        if optional && nothing {
13038            return Ok(None);
13039        }
13040        let result = MemberAccess {
13041            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
13042            access_type: field_access_type.ok_or_else(|| ::serde::de::Error::missing_field("access_type"))?,
13043        };
13044        Ok(Some(result))
13045    }
13046
13047    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
13048        &self,
13049        s: &mut S::SerializeStruct,
13050    ) -> Result<(), S::Error> {
13051        use serde::ser::SerializeStruct;
13052        s.serialize_field("user", &self.user)?;
13053        s.serialize_field("access_type", &self.access_type)?;
13054        Ok(())
13055    }
13056}
13057
13058impl<'de> ::serde::de::Deserialize<'de> for MemberAccess {
13059    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
13060        // struct deserializer
13061        use serde::de::{MapAccess, Visitor};
13062        struct StructVisitor;
13063        impl<'de> Visitor<'de> for StructVisitor {
13064            type Value = MemberAccess;
13065            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
13066                f.write_str("a MemberAccess struct")
13067            }
13068            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
13069                MemberAccess::internal_deserialize(map)
13070            }
13071        }
13072        deserializer.deserialize_struct("MemberAccess", MEMBER_ACCESS_FIELDS, StructVisitor)
13073    }
13074}
13075
13076impl ::serde::ser::Serialize for MemberAccess {
13077    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
13078        // struct serializer
13079        use serde::ser::SerializeStruct;
13080        let mut s = serializer.serialize_struct("MemberAccess", 2)?;
13081        self.internal_serialize::<S>(&mut s)?;
13082        s.end()
13083    }
13084}
13085
13086#[derive(Debug, Clone, PartialEq, Eq)]
13087#[non_exhaustive] // structs may have more fields added in the future.
13088pub struct MemberAddArg {
13089    pub member_email: crate::types::common::EmailAddress,
13090    /// Member's first name.
13091    pub member_given_name: Option<crate::types::common::OptionalNamePart>,
13092    /// Member's last name.
13093    pub member_surname: Option<crate::types::common::OptionalNamePart>,
13094    /// External ID for member.
13095    pub member_external_id: Option<crate::types::team_common::MemberExternalId>,
13096    /// Persistent ID for member. This field is only available to teams using persistent ID SAML
13097    /// configuration.
13098    pub member_persistent_id: Option<String>,
13099    /// Whether to send a welcome email to the member. If send_welcome_email is false, no email
13100    /// invitation will be sent to the user. This may be useful for apps using single sign-on (SSO)
13101    /// flows for onboarding that want to handle announcements themselves.
13102    pub send_welcome_email: bool,
13103    /// Whether a user is directory restricted.
13104    pub is_directory_restricted: Option<bool>,
13105    pub role: AdminTier,
13106}
13107
13108impl MemberAddArg {
13109    pub fn new(member_email: crate::types::common::EmailAddress) -> Self {
13110        MemberAddArg {
13111            member_email,
13112            member_given_name: None,
13113            member_surname: None,
13114            member_external_id: None,
13115            member_persistent_id: None,
13116            send_welcome_email: true,
13117            is_directory_restricted: None,
13118            role: AdminTier::MemberOnly,
13119        }
13120    }
13121
13122    pub fn with_member_given_name(
13123        mut self,
13124        value: crate::types::common::OptionalNamePart,
13125    ) -> Self {
13126        self.member_given_name = Some(value);
13127        self
13128    }
13129
13130    pub fn with_member_surname(mut self, value: crate::types::common::OptionalNamePart) -> Self {
13131        self.member_surname = Some(value);
13132        self
13133    }
13134
13135    pub fn with_member_external_id(
13136        mut self,
13137        value: crate::types::team_common::MemberExternalId,
13138    ) -> Self {
13139        self.member_external_id = Some(value);
13140        self
13141    }
13142
13143    pub fn with_member_persistent_id(mut self, value: String) -> Self {
13144        self.member_persistent_id = Some(value);
13145        self
13146    }
13147
13148    pub fn with_send_welcome_email(mut self, value: bool) -> Self {
13149        self.send_welcome_email = value;
13150        self
13151    }
13152
13153    pub fn with_is_directory_restricted(mut self, value: bool) -> Self {
13154        self.is_directory_restricted = Some(value);
13155        self
13156    }
13157
13158    pub fn with_role(mut self, value: AdminTier) -> Self {
13159        self.role = value;
13160        self
13161    }
13162}
13163
13164const MEMBER_ADD_ARG_FIELDS: &[&str] = &["member_email",
13165                                         "member_given_name",
13166                                         "member_surname",
13167                                         "member_external_id",
13168                                         "member_persistent_id",
13169                                         "send_welcome_email",
13170                                         "is_directory_restricted",
13171                                         "role"];
13172impl MemberAddArg {
13173    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
13174        map: V,
13175    ) -> Result<MemberAddArg, V::Error> {
13176        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
13177    }
13178
13179    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
13180        mut map: V,
13181        optional: bool,
13182    ) -> Result<Option<MemberAddArg>, V::Error> {
13183        let mut field_member_email = None;
13184        let mut field_member_given_name = None;
13185        let mut field_member_surname = None;
13186        let mut field_member_external_id = None;
13187        let mut field_member_persistent_id = None;
13188        let mut field_send_welcome_email = None;
13189        let mut field_is_directory_restricted = None;
13190        let mut field_role = None;
13191        let mut nothing = true;
13192        while let Some(key) = map.next_key::<&str>()? {
13193            nothing = false;
13194            match key {
13195                "member_email" => {
13196                    if field_member_email.is_some() {
13197                        return Err(::serde::de::Error::duplicate_field("member_email"));
13198                    }
13199                    field_member_email = Some(map.next_value()?);
13200                }
13201                "member_given_name" => {
13202                    if field_member_given_name.is_some() {
13203                        return Err(::serde::de::Error::duplicate_field("member_given_name"));
13204                    }
13205                    field_member_given_name = Some(map.next_value()?);
13206                }
13207                "member_surname" => {
13208                    if field_member_surname.is_some() {
13209                        return Err(::serde::de::Error::duplicate_field("member_surname"));
13210                    }
13211                    field_member_surname = Some(map.next_value()?);
13212                }
13213                "member_external_id" => {
13214                    if field_member_external_id.is_some() {
13215                        return Err(::serde::de::Error::duplicate_field("member_external_id"));
13216                    }
13217                    field_member_external_id = Some(map.next_value()?);
13218                }
13219                "member_persistent_id" => {
13220                    if field_member_persistent_id.is_some() {
13221                        return Err(::serde::de::Error::duplicate_field("member_persistent_id"));
13222                    }
13223                    field_member_persistent_id = Some(map.next_value()?);
13224                }
13225                "send_welcome_email" => {
13226                    if field_send_welcome_email.is_some() {
13227                        return Err(::serde::de::Error::duplicate_field("send_welcome_email"));
13228                    }
13229                    field_send_welcome_email = Some(map.next_value()?);
13230                }
13231                "is_directory_restricted" => {
13232                    if field_is_directory_restricted.is_some() {
13233                        return Err(::serde::de::Error::duplicate_field("is_directory_restricted"));
13234                    }
13235                    field_is_directory_restricted = Some(map.next_value()?);
13236                }
13237                "role" => {
13238                    if field_role.is_some() {
13239                        return Err(::serde::de::Error::duplicate_field("role"));
13240                    }
13241                    field_role = Some(map.next_value()?);
13242                }
13243                _ => {
13244                    // unknown field allowed and ignored
13245                    map.next_value::<::serde_json::Value>()?;
13246                }
13247            }
13248        }
13249        if optional && nothing {
13250            return Ok(None);
13251        }
13252        let result = MemberAddArg {
13253            member_email: field_member_email.ok_or_else(|| ::serde::de::Error::missing_field("member_email"))?,
13254            member_given_name: field_member_given_name.and_then(Option::flatten),
13255            member_surname: field_member_surname.and_then(Option::flatten),
13256            member_external_id: field_member_external_id.and_then(Option::flatten),
13257            member_persistent_id: field_member_persistent_id.and_then(Option::flatten),
13258            send_welcome_email: field_send_welcome_email.unwrap_or(true),
13259            is_directory_restricted: field_is_directory_restricted.and_then(Option::flatten),
13260            role: field_role.unwrap_or(AdminTier::MemberOnly),
13261        };
13262        Ok(Some(result))
13263    }
13264
13265    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
13266        &self,
13267        s: &mut S::SerializeStruct,
13268    ) -> Result<(), S::Error> {
13269        use serde::ser::SerializeStruct;
13270        s.serialize_field("member_email", &self.member_email)?;
13271        if let Some(val) = &self.member_given_name {
13272            s.serialize_field("member_given_name", val)?;
13273        }
13274        if let Some(val) = &self.member_surname {
13275            s.serialize_field("member_surname", val)?;
13276        }
13277        if let Some(val) = &self.member_external_id {
13278            s.serialize_field("member_external_id", val)?;
13279        }
13280        if let Some(val) = &self.member_persistent_id {
13281            s.serialize_field("member_persistent_id", val)?;
13282        }
13283        if !self.send_welcome_email {
13284            s.serialize_field("send_welcome_email", &self.send_welcome_email)?;
13285        }
13286        if let Some(val) = &self.is_directory_restricted {
13287            s.serialize_field("is_directory_restricted", val)?;
13288        }
13289        if self.role != AdminTier::MemberOnly {
13290            s.serialize_field("role", &self.role)?;
13291        }
13292        Ok(())
13293    }
13294}
13295
13296impl<'de> ::serde::de::Deserialize<'de> for MemberAddArg {
13297    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
13298        // struct deserializer
13299        use serde::de::{MapAccess, Visitor};
13300        struct StructVisitor;
13301        impl<'de> Visitor<'de> for StructVisitor {
13302            type Value = MemberAddArg;
13303            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
13304                f.write_str("a MemberAddArg struct")
13305            }
13306            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
13307                MemberAddArg::internal_deserialize(map)
13308            }
13309        }
13310        deserializer.deserialize_struct("MemberAddArg", MEMBER_ADD_ARG_FIELDS, StructVisitor)
13311    }
13312}
13313
13314impl ::serde::ser::Serialize for MemberAddArg {
13315    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
13316        // struct serializer
13317        use serde::ser::SerializeStruct;
13318        let mut s = serializer.serialize_struct("MemberAddArg", 8)?;
13319        self.internal_serialize::<S>(&mut s)?;
13320        s.end()
13321    }
13322}
13323
13324// struct extends MemberAddArgBase
13325impl From<MemberAddArg> for MemberAddArgBase {
13326    fn from(subtype: MemberAddArg) -> Self {
13327        Self {
13328            member_email: subtype.member_email,
13329            member_given_name: subtype.member_given_name,
13330            member_surname: subtype.member_surname,
13331            member_external_id: subtype.member_external_id,
13332            member_persistent_id: subtype.member_persistent_id,
13333            send_welcome_email: subtype.send_welcome_email,
13334            is_directory_restricted: subtype.is_directory_restricted,
13335        }
13336    }
13337}
13338#[derive(Debug, Clone, PartialEq, Eq)]
13339#[non_exhaustive] // structs may have more fields added in the future.
13340pub struct MemberAddArgBase {
13341    pub member_email: crate::types::common::EmailAddress,
13342    /// Member's first name.
13343    pub member_given_name: Option<crate::types::common::OptionalNamePart>,
13344    /// Member's last name.
13345    pub member_surname: Option<crate::types::common::OptionalNamePart>,
13346    /// External ID for member.
13347    pub member_external_id: Option<crate::types::team_common::MemberExternalId>,
13348    /// Persistent ID for member. This field is only available to teams using persistent ID SAML
13349    /// configuration.
13350    pub member_persistent_id: Option<String>,
13351    /// Whether to send a welcome email to the member. If send_welcome_email is false, no email
13352    /// invitation will be sent to the user. This may be useful for apps using single sign-on (SSO)
13353    /// flows for onboarding that want to handle announcements themselves.
13354    pub send_welcome_email: bool,
13355    /// Whether a user is directory restricted.
13356    pub is_directory_restricted: Option<bool>,
13357}
13358
13359impl MemberAddArgBase {
13360    pub fn new(member_email: crate::types::common::EmailAddress) -> Self {
13361        MemberAddArgBase {
13362            member_email,
13363            member_given_name: None,
13364            member_surname: None,
13365            member_external_id: None,
13366            member_persistent_id: None,
13367            send_welcome_email: true,
13368            is_directory_restricted: None,
13369        }
13370    }
13371
13372    pub fn with_member_given_name(
13373        mut self,
13374        value: crate::types::common::OptionalNamePart,
13375    ) -> Self {
13376        self.member_given_name = Some(value);
13377        self
13378    }
13379
13380    pub fn with_member_surname(mut self, value: crate::types::common::OptionalNamePart) -> Self {
13381        self.member_surname = Some(value);
13382        self
13383    }
13384
13385    pub fn with_member_external_id(
13386        mut self,
13387        value: crate::types::team_common::MemberExternalId,
13388    ) -> Self {
13389        self.member_external_id = Some(value);
13390        self
13391    }
13392
13393    pub fn with_member_persistent_id(mut self, value: String) -> Self {
13394        self.member_persistent_id = Some(value);
13395        self
13396    }
13397
13398    pub fn with_send_welcome_email(mut self, value: bool) -> Self {
13399        self.send_welcome_email = value;
13400        self
13401    }
13402
13403    pub fn with_is_directory_restricted(mut self, value: bool) -> Self {
13404        self.is_directory_restricted = Some(value);
13405        self
13406    }
13407}
13408
13409const MEMBER_ADD_ARG_BASE_FIELDS: &[&str] = &["member_email",
13410                                              "member_given_name",
13411                                              "member_surname",
13412                                              "member_external_id",
13413                                              "member_persistent_id",
13414                                              "send_welcome_email",
13415                                              "is_directory_restricted"];
13416impl MemberAddArgBase {
13417    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
13418        map: V,
13419    ) -> Result<MemberAddArgBase, V::Error> {
13420        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
13421    }
13422
13423    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
13424        mut map: V,
13425        optional: bool,
13426    ) -> Result<Option<MemberAddArgBase>, V::Error> {
13427        let mut field_member_email = None;
13428        let mut field_member_given_name = None;
13429        let mut field_member_surname = None;
13430        let mut field_member_external_id = None;
13431        let mut field_member_persistent_id = None;
13432        let mut field_send_welcome_email = None;
13433        let mut field_is_directory_restricted = None;
13434        let mut nothing = true;
13435        while let Some(key) = map.next_key::<&str>()? {
13436            nothing = false;
13437            match key {
13438                "member_email" => {
13439                    if field_member_email.is_some() {
13440                        return Err(::serde::de::Error::duplicate_field("member_email"));
13441                    }
13442                    field_member_email = Some(map.next_value()?);
13443                }
13444                "member_given_name" => {
13445                    if field_member_given_name.is_some() {
13446                        return Err(::serde::de::Error::duplicate_field("member_given_name"));
13447                    }
13448                    field_member_given_name = Some(map.next_value()?);
13449                }
13450                "member_surname" => {
13451                    if field_member_surname.is_some() {
13452                        return Err(::serde::de::Error::duplicate_field("member_surname"));
13453                    }
13454                    field_member_surname = Some(map.next_value()?);
13455                }
13456                "member_external_id" => {
13457                    if field_member_external_id.is_some() {
13458                        return Err(::serde::de::Error::duplicate_field("member_external_id"));
13459                    }
13460                    field_member_external_id = Some(map.next_value()?);
13461                }
13462                "member_persistent_id" => {
13463                    if field_member_persistent_id.is_some() {
13464                        return Err(::serde::de::Error::duplicate_field("member_persistent_id"));
13465                    }
13466                    field_member_persistent_id = Some(map.next_value()?);
13467                }
13468                "send_welcome_email" => {
13469                    if field_send_welcome_email.is_some() {
13470                        return Err(::serde::de::Error::duplicate_field("send_welcome_email"));
13471                    }
13472                    field_send_welcome_email = Some(map.next_value()?);
13473                }
13474                "is_directory_restricted" => {
13475                    if field_is_directory_restricted.is_some() {
13476                        return Err(::serde::de::Error::duplicate_field("is_directory_restricted"));
13477                    }
13478                    field_is_directory_restricted = Some(map.next_value()?);
13479                }
13480                _ => {
13481                    // unknown field allowed and ignored
13482                    map.next_value::<::serde_json::Value>()?;
13483                }
13484            }
13485        }
13486        if optional && nothing {
13487            return Ok(None);
13488        }
13489        let result = MemberAddArgBase {
13490            member_email: field_member_email.ok_or_else(|| ::serde::de::Error::missing_field("member_email"))?,
13491            member_given_name: field_member_given_name.and_then(Option::flatten),
13492            member_surname: field_member_surname.and_then(Option::flatten),
13493            member_external_id: field_member_external_id.and_then(Option::flatten),
13494            member_persistent_id: field_member_persistent_id.and_then(Option::flatten),
13495            send_welcome_email: field_send_welcome_email.unwrap_or(true),
13496            is_directory_restricted: field_is_directory_restricted.and_then(Option::flatten),
13497        };
13498        Ok(Some(result))
13499    }
13500
13501    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
13502        &self,
13503        s: &mut S::SerializeStruct,
13504    ) -> Result<(), S::Error> {
13505        use serde::ser::SerializeStruct;
13506        s.serialize_field("member_email", &self.member_email)?;
13507        if let Some(val) = &self.member_given_name {
13508            s.serialize_field("member_given_name", val)?;
13509        }
13510        if let Some(val) = &self.member_surname {
13511            s.serialize_field("member_surname", val)?;
13512        }
13513        if let Some(val) = &self.member_external_id {
13514            s.serialize_field("member_external_id", val)?;
13515        }
13516        if let Some(val) = &self.member_persistent_id {
13517            s.serialize_field("member_persistent_id", val)?;
13518        }
13519        if !self.send_welcome_email {
13520            s.serialize_field("send_welcome_email", &self.send_welcome_email)?;
13521        }
13522        if let Some(val) = &self.is_directory_restricted {
13523            s.serialize_field("is_directory_restricted", val)?;
13524        }
13525        Ok(())
13526    }
13527}
13528
13529impl<'de> ::serde::de::Deserialize<'de> for MemberAddArgBase {
13530    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
13531        // struct deserializer
13532        use serde::de::{MapAccess, Visitor};
13533        struct StructVisitor;
13534        impl<'de> Visitor<'de> for StructVisitor {
13535            type Value = MemberAddArgBase;
13536            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
13537                f.write_str("a MemberAddArgBase struct")
13538            }
13539            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
13540                MemberAddArgBase::internal_deserialize(map)
13541            }
13542        }
13543        deserializer.deserialize_struct("MemberAddArgBase", MEMBER_ADD_ARG_BASE_FIELDS, StructVisitor)
13544    }
13545}
13546
13547impl ::serde::ser::Serialize for MemberAddArgBase {
13548    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
13549        // struct serializer
13550        use serde::ser::SerializeStruct;
13551        let mut s = serializer.serialize_struct("MemberAddArgBase", 7)?;
13552        self.internal_serialize::<S>(&mut s)?;
13553        s.end()
13554    }
13555}
13556
13557/// Describes the result of attempting to add a single user to the team. 'success' is the only value
13558/// indicating that a user was indeed added to the team - the other values explain the type of
13559/// failure that occurred, and include the email of the user for which the operation has failed.
13560#[derive(Debug, Clone, PartialEq, Eq)]
13561pub enum MemberAddResult {
13562    /// Team is already full. The organization has no available licenses.
13563    TeamLicenseLimit(crate::types::common::EmailAddress),
13564    /// Team is already full. The free team member limit has been reached.
13565    FreeTeamMemberLimitReached(crate::types::common::EmailAddress),
13566    /// User is already on this team. The provided email address is associated with a user who is
13567    /// already a member of (including in recoverable state) or invited to the team.
13568    UserAlreadyOnTeam(crate::types::common::EmailAddress),
13569    /// User is already on another team. The provided email address is associated with a user that
13570    /// is already a member or invited to another team.
13571    UserOnAnotherTeam(crate::types::common::EmailAddress),
13572    /// User is already paired.
13573    UserAlreadyPaired(crate::types::common::EmailAddress),
13574    /// User migration has failed.
13575    UserMigrationFailed(crate::types::common::EmailAddress),
13576    /// A user with the given external member ID already exists on the team (including in
13577    /// recoverable state).
13578    DuplicateExternalMemberId(crate::types::common::EmailAddress),
13579    /// A user with the given persistent ID already exists on the team (including in recoverable
13580    /// state).
13581    DuplicateMemberPersistentId(crate::types::common::EmailAddress),
13582    /// Persistent ID is only available to teams with persistent ID SAML configuration. Please
13583    /// contact Dropbox for more information.
13584    PersistentIdDisabled(crate::types::common::EmailAddress),
13585    /// User creation has failed.
13586    UserCreationFailed(crate::types::common::EmailAddress),
13587    /// Describes a user that was successfully added to the team.
13588    Success(TeamMemberInfo),
13589}
13590
13591impl<'de> ::serde::de::Deserialize<'de> for MemberAddResult {
13592    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
13593        // union deserializer
13594        use serde::de::{self, MapAccess, Visitor};
13595        struct EnumVisitor;
13596        impl<'de> Visitor<'de> for EnumVisitor {
13597            type Value = MemberAddResult;
13598            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
13599                f.write_str("a MemberAddResult structure")
13600            }
13601            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
13602                let tag: &str = match map.next_key()? {
13603                    Some(".tag") => map.next_value()?,
13604                    _ => return Err(de::Error::missing_field(".tag"))
13605                };
13606                let value = match tag {
13607                    "team_license_limit" => {
13608                        match map.next_key()? {
13609                            Some("team_license_limit") => MemberAddResult::TeamLicenseLimit(map.next_value()?),
13610                            None => return Err(de::Error::missing_field("team_license_limit")),
13611                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
13612                        }
13613                    }
13614                    "free_team_member_limit_reached" => {
13615                        match map.next_key()? {
13616                            Some("free_team_member_limit_reached") => MemberAddResult::FreeTeamMemberLimitReached(map.next_value()?),
13617                            None => return Err(de::Error::missing_field("free_team_member_limit_reached")),
13618                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
13619                        }
13620                    }
13621                    "user_already_on_team" => {
13622                        match map.next_key()? {
13623                            Some("user_already_on_team") => MemberAddResult::UserAlreadyOnTeam(map.next_value()?),
13624                            None => return Err(de::Error::missing_field("user_already_on_team")),
13625                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
13626                        }
13627                    }
13628                    "user_on_another_team" => {
13629                        match map.next_key()? {
13630                            Some("user_on_another_team") => MemberAddResult::UserOnAnotherTeam(map.next_value()?),
13631                            None => return Err(de::Error::missing_field("user_on_another_team")),
13632                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
13633                        }
13634                    }
13635                    "user_already_paired" => {
13636                        match map.next_key()? {
13637                            Some("user_already_paired") => MemberAddResult::UserAlreadyPaired(map.next_value()?),
13638                            None => return Err(de::Error::missing_field("user_already_paired")),
13639                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
13640                        }
13641                    }
13642                    "user_migration_failed" => {
13643                        match map.next_key()? {
13644                            Some("user_migration_failed") => MemberAddResult::UserMigrationFailed(map.next_value()?),
13645                            None => return Err(de::Error::missing_field("user_migration_failed")),
13646                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
13647                        }
13648                    }
13649                    "duplicate_external_member_id" => {
13650                        match map.next_key()? {
13651                            Some("duplicate_external_member_id") => MemberAddResult::DuplicateExternalMemberId(map.next_value()?),
13652                            None => return Err(de::Error::missing_field("duplicate_external_member_id")),
13653                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
13654                        }
13655                    }
13656                    "duplicate_member_persistent_id" => {
13657                        match map.next_key()? {
13658                            Some("duplicate_member_persistent_id") => MemberAddResult::DuplicateMemberPersistentId(map.next_value()?),
13659                            None => return Err(de::Error::missing_field("duplicate_member_persistent_id")),
13660                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
13661                        }
13662                    }
13663                    "persistent_id_disabled" => {
13664                        match map.next_key()? {
13665                            Some("persistent_id_disabled") => MemberAddResult::PersistentIdDisabled(map.next_value()?),
13666                            None => return Err(de::Error::missing_field("persistent_id_disabled")),
13667                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
13668                        }
13669                    }
13670                    "user_creation_failed" => {
13671                        match map.next_key()? {
13672                            Some("user_creation_failed") => MemberAddResult::UserCreationFailed(map.next_value()?),
13673                            None => return Err(de::Error::missing_field("user_creation_failed")),
13674                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
13675                        }
13676                    }
13677                    "success" => MemberAddResult::Success(TeamMemberInfo::internal_deserialize(&mut map)?),
13678                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
13679                };
13680                crate::eat_json_fields(&mut map)?;
13681                Ok(value)
13682            }
13683        }
13684        const VARIANTS: &[&str] = &["team_license_limit",
13685                                    "free_team_member_limit_reached",
13686                                    "user_already_on_team",
13687                                    "user_on_another_team",
13688                                    "user_already_paired",
13689                                    "user_migration_failed",
13690                                    "duplicate_external_member_id",
13691                                    "duplicate_member_persistent_id",
13692                                    "persistent_id_disabled",
13693                                    "user_creation_failed",
13694                                    "success"];
13695        deserializer.deserialize_struct("MemberAddResult", VARIANTS, EnumVisitor)
13696    }
13697}
13698
13699impl ::serde::ser::Serialize for MemberAddResult {
13700    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
13701        // union serializer
13702        use serde::ser::SerializeStruct;
13703        match self {
13704            MemberAddResult::TeamLicenseLimit(x) => {
13705                // primitive
13706                let mut s = serializer.serialize_struct("MemberAddResult", 2)?;
13707                s.serialize_field(".tag", "team_license_limit")?;
13708                s.serialize_field("team_license_limit", x)?;
13709                s.end()
13710            }
13711            MemberAddResult::FreeTeamMemberLimitReached(x) => {
13712                // primitive
13713                let mut s = serializer.serialize_struct("MemberAddResult", 2)?;
13714                s.serialize_field(".tag", "free_team_member_limit_reached")?;
13715                s.serialize_field("free_team_member_limit_reached", x)?;
13716                s.end()
13717            }
13718            MemberAddResult::UserAlreadyOnTeam(x) => {
13719                // primitive
13720                let mut s = serializer.serialize_struct("MemberAddResult", 2)?;
13721                s.serialize_field(".tag", "user_already_on_team")?;
13722                s.serialize_field("user_already_on_team", x)?;
13723                s.end()
13724            }
13725            MemberAddResult::UserOnAnotherTeam(x) => {
13726                // primitive
13727                let mut s = serializer.serialize_struct("MemberAddResult", 2)?;
13728                s.serialize_field(".tag", "user_on_another_team")?;
13729                s.serialize_field("user_on_another_team", x)?;
13730                s.end()
13731            }
13732            MemberAddResult::UserAlreadyPaired(x) => {
13733                // primitive
13734                let mut s = serializer.serialize_struct("MemberAddResult", 2)?;
13735                s.serialize_field(".tag", "user_already_paired")?;
13736                s.serialize_field("user_already_paired", x)?;
13737                s.end()
13738            }
13739            MemberAddResult::UserMigrationFailed(x) => {
13740                // primitive
13741                let mut s = serializer.serialize_struct("MemberAddResult", 2)?;
13742                s.serialize_field(".tag", "user_migration_failed")?;
13743                s.serialize_field("user_migration_failed", x)?;
13744                s.end()
13745            }
13746            MemberAddResult::DuplicateExternalMemberId(x) => {
13747                // primitive
13748                let mut s = serializer.serialize_struct("MemberAddResult", 2)?;
13749                s.serialize_field(".tag", "duplicate_external_member_id")?;
13750                s.serialize_field("duplicate_external_member_id", x)?;
13751                s.end()
13752            }
13753            MemberAddResult::DuplicateMemberPersistentId(x) => {
13754                // primitive
13755                let mut s = serializer.serialize_struct("MemberAddResult", 2)?;
13756                s.serialize_field(".tag", "duplicate_member_persistent_id")?;
13757                s.serialize_field("duplicate_member_persistent_id", x)?;
13758                s.end()
13759            }
13760            MemberAddResult::PersistentIdDisabled(x) => {
13761                // primitive
13762                let mut s = serializer.serialize_struct("MemberAddResult", 2)?;
13763                s.serialize_field(".tag", "persistent_id_disabled")?;
13764                s.serialize_field("persistent_id_disabled", x)?;
13765                s.end()
13766            }
13767            MemberAddResult::UserCreationFailed(x) => {
13768                // primitive
13769                let mut s = serializer.serialize_struct("MemberAddResult", 2)?;
13770                s.serialize_field(".tag", "user_creation_failed")?;
13771                s.serialize_field("user_creation_failed", x)?;
13772                s.end()
13773            }
13774            MemberAddResult::Success(x) => {
13775                // struct
13776                let mut s = serializer.serialize_struct("MemberAddResult", 3)?;
13777                s.serialize_field(".tag", "success")?;
13778                x.internal_serialize::<S>(&mut s)?;
13779                s.end()
13780            }
13781        }
13782    }
13783}
13784
13785// union extends MemberAddResultBase
13786impl From<MemberAddResultBase> for MemberAddResult {
13787    fn from(parent: MemberAddResultBase) -> Self {
13788        match parent {
13789            MemberAddResultBase::TeamLicenseLimit(x) => MemberAddResult::TeamLicenseLimit(x),
13790            MemberAddResultBase::FreeTeamMemberLimitReached(x) => MemberAddResult::FreeTeamMemberLimitReached(x),
13791            MemberAddResultBase::UserAlreadyOnTeam(x) => MemberAddResult::UserAlreadyOnTeam(x),
13792            MemberAddResultBase::UserOnAnotherTeam(x) => MemberAddResult::UserOnAnotherTeam(x),
13793            MemberAddResultBase::UserAlreadyPaired(x) => MemberAddResult::UserAlreadyPaired(x),
13794            MemberAddResultBase::UserMigrationFailed(x) => MemberAddResult::UserMigrationFailed(x),
13795            MemberAddResultBase::DuplicateExternalMemberId(x) => MemberAddResult::DuplicateExternalMemberId(x),
13796            MemberAddResultBase::DuplicateMemberPersistentId(x) => MemberAddResult::DuplicateMemberPersistentId(x),
13797            MemberAddResultBase::PersistentIdDisabled(x) => MemberAddResult::PersistentIdDisabled(x),
13798            MemberAddResultBase::UserCreationFailed(x) => MemberAddResult::UserCreationFailed(x),
13799        }
13800    }
13801}
13802#[derive(Debug, Clone, PartialEq, Eq)]
13803pub enum MemberAddResultBase {
13804    /// Team is already full. The organization has no available licenses.
13805    TeamLicenseLimit(crate::types::common::EmailAddress),
13806    /// Team is already full. The free team member limit has been reached.
13807    FreeTeamMemberLimitReached(crate::types::common::EmailAddress),
13808    /// User is already on this team. The provided email address is associated with a user who is
13809    /// already a member of (including in recoverable state) or invited to the team.
13810    UserAlreadyOnTeam(crate::types::common::EmailAddress),
13811    /// User is already on another team. The provided email address is associated with a user that
13812    /// is already a member or invited to another team.
13813    UserOnAnotherTeam(crate::types::common::EmailAddress),
13814    /// User is already paired.
13815    UserAlreadyPaired(crate::types::common::EmailAddress),
13816    /// User migration has failed.
13817    UserMigrationFailed(crate::types::common::EmailAddress),
13818    /// A user with the given external member ID already exists on the team (including in
13819    /// recoverable state).
13820    DuplicateExternalMemberId(crate::types::common::EmailAddress),
13821    /// A user with the given persistent ID already exists on the team (including in recoverable
13822    /// state).
13823    DuplicateMemberPersistentId(crate::types::common::EmailAddress),
13824    /// Persistent ID is only available to teams with persistent ID SAML configuration. Please
13825    /// contact Dropbox for more information.
13826    PersistentIdDisabled(crate::types::common::EmailAddress),
13827    /// User creation has failed.
13828    UserCreationFailed(crate::types::common::EmailAddress),
13829}
13830
13831impl<'de> ::serde::de::Deserialize<'de> for MemberAddResultBase {
13832    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
13833        // union deserializer
13834        use serde::de::{self, MapAccess, Visitor};
13835        struct EnumVisitor;
13836        impl<'de> Visitor<'de> for EnumVisitor {
13837            type Value = MemberAddResultBase;
13838            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
13839                f.write_str("a MemberAddResultBase structure")
13840            }
13841            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
13842                let tag: &str = match map.next_key()? {
13843                    Some(".tag") => map.next_value()?,
13844                    _ => return Err(de::Error::missing_field(".tag"))
13845                };
13846                let value = match tag {
13847                    "team_license_limit" => {
13848                        match map.next_key()? {
13849                            Some("team_license_limit") => MemberAddResultBase::TeamLicenseLimit(map.next_value()?),
13850                            None => return Err(de::Error::missing_field("team_license_limit")),
13851                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
13852                        }
13853                    }
13854                    "free_team_member_limit_reached" => {
13855                        match map.next_key()? {
13856                            Some("free_team_member_limit_reached") => MemberAddResultBase::FreeTeamMemberLimitReached(map.next_value()?),
13857                            None => return Err(de::Error::missing_field("free_team_member_limit_reached")),
13858                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
13859                        }
13860                    }
13861                    "user_already_on_team" => {
13862                        match map.next_key()? {
13863                            Some("user_already_on_team") => MemberAddResultBase::UserAlreadyOnTeam(map.next_value()?),
13864                            None => return Err(de::Error::missing_field("user_already_on_team")),
13865                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
13866                        }
13867                    }
13868                    "user_on_another_team" => {
13869                        match map.next_key()? {
13870                            Some("user_on_another_team") => MemberAddResultBase::UserOnAnotherTeam(map.next_value()?),
13871                            None => return Err(de::Error::missing_field("user_on_another_team")),
13872                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
13873                        }
13874                    }
13875                    "user_already_paired" => {
13876                        match map.next_key()? {
13877                            Some("user_already_paired") => MemberAddResultBase::UserAlreadyPaired(map.next_value()?),
13878                            None => return Err(de::Error::missing_field("user_already_paired")),
13879                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
13880                        }
13881                    }
13882                    "user_migration_failed" => {
13883                        match map.next_key()? {
13884                            Some("user_migration_failed") => MemberAddResultBase::UserMigrationFailed(map.next_value()?),
13885                            None => return Err(de::Error::missing_field("user_migration_failed")),
13886                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
13887                        }
13888                    }
13889                    "duplicate_external_member_id" => {
13890                        match map.next_key()? {
13891                            Some("duplicate_external_member_id") => MemberAddResultBase::DuplicateExternalMemberId(map.next_value()?),
13892                            None => return Err(de::Error::missing_field("duplicate_external_member_id")),
13893                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
13894                        }
13895                    }
13896                    "duplicate_member_persistent_id" => {
13897                        match map.next_key()? {
13898                            Some("duplicate_member_persistent_id") => MemberAddResultBase::DuplicateMemberPersistentId(map.next_value()?),
13899                            None => return Err(de::Error::missing_field("duplicate_member_persistent_id")),
13900                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
13901                        }
13902                    }
13903                    "persistent_id_disabled" => {
13904                        match map.next_key()? {
13905                            Some("persistent_id_disabled") => MemberAddResultBase::PersistentIdDisabled(map.next_value()?),
13906                            None => return Err(de::Error::missing_field("persistent_id_disabled")),
13907                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
13908                        }
13909                    }
13910                    "user_creation_failed" => {
13911                        match map.next_key()? {
13912                            Some("user_creation_failed") => MemberAddResultBase::UserCreationFailed(map.next_value()?),
13913                            None => return Err(de::Error::missing_field("user_creation_failed")),
13914                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
13915                        }
13916                    }
13917                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
13918                };
13919                crate::eat_json_fields(&mut map)?;
13920                Ok(value)
13921            }
13922        }
13923        const VARIANTS: &[&str] = &["team_license_limit",
13924                                    "free_team_member_limit_reached",
13925                                    "user_already_on_team",
13926                                    "user_on_another_team",
13927                                    "user_already_paired",
13928                                    "user_migration_failed",
13929                                    "duplicate_external_member_id",
13930                                    "duplicate_member_persistent_id",
13931                                    "persistent_id_disabled",
13932                                    "user_creation_failed"];
13933        deserializer.deserialize_struct("MemberAddResultBase", VARIANTS, EnumVisitor)
13934    }
13935}
13936
13937impl ::serde::ser::Serialize for MemberAddResultBase {
13938    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
13939        // union serializer
13940        use serde::ser::SerializeStruct;
13941        match self {
13942            MemberAddResultBase::TeamLicenseLimit(x) => {
13943                // primitive
13944                let mut s = serializer.serialize_struct("MemberAddResultBase", 2)?;
13945                s.serialize_field(".tag", "team_license_limit")?;
13946                s.serialize_field("team_license_limit", x)?;
13947                s.end()
13948            }
13949            MemberAddResultBase::FreeTeamMemberLimitReached(x) => {
13950                // primitive
13951                let mut s = serializer.serialize_struct("MemberAddResultBase", 2)?;
13952                s.serialize_field(".tag", "free_team_member_limit_reached")?;
13953                s.serialize_field("free_team_member_limit_reached", x)?;
13954                s.end()
13955            }
13956            MemberAddResultBase::UserAlreadyOnTeam(x) => {
13957                // primitive
13958                let mut s = serializer.serialize_struct("MemberAddResultBase", 2)?;
13959                s.serialize_field(".tag", "user_already_on_team")?;
13960                s.serialize_field("user_already_on_team", x)?;
13961                s.end()
13962            }
13963            MemberAddResultBase::UserOnAnotherTeam(x) => {
13964                // primitive
13965                let mut s = serializer.serialize_struct("MemberAddResultBase", 2)?;
13966                s.serialize_field(".tag", "user_on_another_team")?;
13967                s.serialize_field("user_on_another_team", x)?;
13968                s.end()
13969            }
13970            MemberAddResultBase::UserAlreadyPaired(x) => {
13971                // primitive
13972                let mut s = serializer.serialize_struct("MemberAddResultBase", 2)?;
13973                s.serialize_field(".tag", "user_already_paired")?;
13974                s.serialize_field("user_already_paired", x)?;
13975                s.end()
13976            }
13977            MemberAddResultBase::UserMigrationFailed(x) => {
13978                // primitive
13979                let mut s = serializer.serialize_struct("MemberAddResultBase", 2)?;
13980                s.serialize_field(".tag", "user_migration_failed")?;
13981                s.serialize_field("user_migration_failed", x)?;
13982                s.end()
13983            }
13984            MemberAddResultBase::DuplicateExternalMemberId(x) => {
13985                // primitive
13986                let mut s = serializer.serialize_struct("MemberAddResultBase", 2)?;
13987                s.serialize_field(".tag", "duplicate_external_member_id")?;
13988                s.serialize_field("duplicate_external_member_id", x)?;
13989                s.end()
13990            }
13991            MemberAddResultBase::DuplicateMemberPersistentId(x) => {
13992                // primitive
13993                let mut s = serializer.serialize_struct("MemberAddResultBase", 2)?;
13994                s.serialize_field(".tag", "duplicate_member_persistent_id")?;
13995                s.serialize_field("duplicate_member_persistent_id", x)?;
13996                s.end()
13997            }
13998            MemberAddResultBase::PersistentIdDisabled(x) => {
13999                // primitive
14000                let mut s = serializer.serialize_struct("MemberAddResultBase", 2)?;
14001                s.serialize_field(".tag", "persistent_id_disabled")?;
14002                s.serialize_field("persistent_id_disabled", x)?;
14003                s.end()
14004            }
14005            MemberAddResultBase::UserCreationFailed(x) => {
14006                // primitive
14007                let mut s = serializer.serialize_struct("MemberAddResultBase", 2)?;
14008                s.serialize_field(".tag", "user_creation_failed")?;
14009                s.serialize_field("user_creation_failed", x)?;
14010                s.end()
14011            }
14012        }
14013    }
14014}
14015
14016#[derive(Debug, Clone, PartialEq, Eq)]
14017#[non_exhaustive] // structs may have more fields added in the future.
14018pub struct MemberAddV2Arg {
14019    pub member_email: crate::types::common::EmailAddress,
14020    /// Member's first name.
14021    pub member_given_name: Option<crate::types::common::OptionalNamePart>,
14022    /// Member's last name.
14023    pub member_surname: Option<crate::types::common::OptionalNamePart>,
14024    /// External ID for member.
14025    pub member_external_id: Option<crate::types::team_common::MemberExternalId>,
14026    /// Persistent ID for member. This field is only available to teams using persistent ID SAML
14027    /// configuration.
14028    pub member_persistent_id: Option<String>,
14029    /// Whether to send a welcome email to the member. If send_welcome_email is false, no email
14030    /// invitation will be sent to the user. This may be useful for apps using single sign-on (SSO)
14031    /// flows for onboarding that want to handle announcements themselves.
14032    pub send_welcome_email: bool,
14033    /// Whether a user is directory restricted.
14034    pub is_directory_restricted: Option<bool>,
14035    pub role_ids: Option<Vec<TeamMemberRoleId>>,
14036}
14037
14038impl MemberAddV2Arg {
14039    pub fn new(member_email: crate::types::common::EmailAddress) -> Self {
14040        MemberAddV2Arg {
14041            member_email,
14042            member_given_name: None,
14043            member_surname: None,
14044            member_external_id: None,
14045            member_persistent_id: None,
14046            send_welcome_email: true,
14047            is_directory_restricted: None,
14048            role_ids: None,
14049        }
14050    }
14051
14052    pub fn with_member_given_name(
14053        mut self,
14054        value: crate::types::common::OptionalNamePart,
14055    ) -> Self {
14056        self.member_given_name = Some(value);
14057        self
14058    }
14059
14060    pub fn with_member_surname(mut self, value: crate::types::common::OptionalNamePart) -> Self {
14061        self.member_surname = Some(value);
14062        self
14063    }
14064
14065    pub fn with_member_external_id(
14066        mut self,
14067        value: crate::types::team_common::MemberExternalId,
14068    ) -> Self {
14069        self.member_external_id = Some(value);
14070        self
14071    }
14072
14073    pub fn with_member_persistent_id(mut self, value: String) -> Self {
14074        self.member_persistent_id = Some(value);
14075        self
14076    }
14077
14078    pub fn with_send_welcome_email(mut self, value: bool) -> Self {
14079        self.send_welcome_email = value;
14080        self
14081    }
14082
14083    pub fn with_is_directory_restricted(mut self, value: bool) -> Self {
14084        self.is_directory_restricted = Some(value);
14085        self
14086    }
14087
14088    pub fn with_role_ids(mut self, value: Vec<TeamMemberRoleId>) -> Self {
14089        self.role_ids = Some(value);
14090        self
14091    }
14092}
14093
14094const MEMBER_ADD_V2_ARG_FIELDS: &[&str] = &["member_email",
14095                                            "member_given_name",
14096                                            "member_surname",
14097                                            "member_external_id",
14098                                            "member_persistent_id",
14099                                            "send_welcome_email",
14100                                            "is_directory_restricted",
14101                                            "role_ids"];
14102impl MemberAddV2Arg {
14103    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
14104        map: V,
14105    ) -> Result<MemberAddV2Arg, V::Error> {
14106        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
14107    }
14108
14109    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
14110        mut map: V,
14111        optional: bool,
14112    ) -> Result<Option<MemberAddV2Arg>, V::Error> {
14113        let mut field_member_email = None;
14114        let mut field_member_given_name = None;
14115        let mut field_member_surname = None;
14116        let mut field_member_external_id = None;
14117        let mut field_member_persistent_id = None;
14118        let mut field_send_welcome_email = None;
14119        let mut field_is_directory_restricted = None;
14120        let mut field_role_ids = None;
14121        let mut nothing = true;
14122        while let Some(key) = map.next_key::<&str>()? {
14123            nothing = false;
14124            match key {
14125                "member_email" => {
14126                    if field_member_email.is_some() {
14127                        return Err(::serde::de::Error::duplicate_field("member_email"));
14128                    }
14129                    field_member_email = Some(map.next_value()?);
14130                }
14131                "member_given_name" => {
14132                    if field_member_given_name.is_some() {
14133                        return Err(::serde::de::Error::duplicate_field("member_given_name"));
14134                    }
14135                    field_member_given_name = Some(map.next_value()?);
14136                }
14137                "member_surname" => {
14138                    if field_member_surname.is_some() {
14139                        return Err(::serde::de::Error::duplicate_field("member_surname"));
14140                    }
14141                    field_member_surname = Some(map.next_value()?);
14142                }
14143                "member_external_id" => {
14144                    if field_member_external_id.is_some() {
14145                        return Err(::serde::de::Error::duplicate_field("member_external_id"));
14146                    }
14147                    field_member_external_id = Some(map.next_value()?);
14148                }
14149                "member_persistent_id" => {
14150                    if field_member_persistent_id.is_some() {
14151                        return Err(::serde::de::Error::duplicate_field("member_persistent_id"));
14152                    }
14153                    field_member_persistent_id = Some(map.next_value()?);
14154                }
14155                "send_welcome_email" => {
14156                    if field_send_welcome_email.is_some() {
14157                        return Err(::serde::de::Error::duplicate_field("send_welcome_email"));
14158                    }
14159                    field_send_welcome_email = Some(map.next_value()?);
14160                }
14161                "is_directory_restricted" => {
14162                    if field_is_directory_restricted.is_some() {
14163                        return Err(::serde::de::Error::duplicate_field("is_directory_restricted"));
14164                    }
14165                    field_is_directory_restricted = Some(map.next_value()?);
14166                }
14167                "role_ids" => {
14168                    if field_role_ids.is_some() {
14169                        return Err(::serde::de::Error::duplicate_field("role_ids"));
14170                    }
14171                    field_role_ids = Some(map.next_value()?);
14172                }
14173                _ => {
14174                    // unknown field allowed and ignored
14175                    map.next_value::<::serde_json::Value>()?;
14176                }
14177            }
14178        }
14179        if optional && nothing {
14180            return Ok(None);
14181        }
14182        let result = MemberAddV2Arg {
14183            member_email: field_member_email.ok_or_else(|| ::serde::de::Error::missing_field("member_email"))?,
14184            member_given_name: field_member_given_name.and_then(Option::flatten),
14185            member_surname: field_member_surname.and_then(Option::flatten),
14186            member_external_id: field_member_external_id.and_then(Option::flatten),
14187            member_persistent_id: field_member_persistent_id.and_then(Option::flatten),
14188            send_welcome_email: field_send_welcome_email.unwrap_or(true),
14189            is_directory_restricted: field_is_directory_restricted.and_then(Option::flatten),
14190            role_ids: field_role_ids.and_then(Option::flatten),
14191        };
14192        Ok(Some(result))
14193    }
14194
14195    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
14196        &self,
14197        s: &mut S::SerializeStruct,
14198    ) -> Result<(), S::Error> {
14199        use serde::ser::SerializeStruct;
14200        s.serialize_field("member_email", &self.member_email)?;
14201        if let Some(val) = &self.member_given_name {
14202            s.serialize_field("member_given_name", val)?;
14203        }
14204        if let Some(val) = &self.member_surname {
14205            s.serialize_field("member_surname", val)?;
14206        }
14207        if let Some(val) = &self.member_external_id {
14208            s.serialize_field("member_external_id", val)?;
14209        }
14210        if let Some(val) = &self.member_persistent_id {
14211            s.serialize_field("member_persistent_id", val)?;
14212        }
14213        if !self.send_welcome_email {
14214            s.serialize_field("send_welcome_email", &self.send_welcome_email)?;
14215        }
14216        if let Some(val) = &self.is_directory_restricted {
14217            s.serialize_field("is_directory_restricted", val)?;
14218        }
14219        if let Some(val) = &self.role_ids {
14220            s.serialize_field("role_ids", val)?;
14221        }
14222        Ok(())
14223    }
14224}
14225
14226impl<'de> ::serde::de::Deserialize<'de> for MemberAddV2Arg {
14227    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
14228        // struct deserializer
14229        use serde::de::{MapAccess, Visitor};
14230        struct StructVisitor;
14231        impl<'de> Visitor<'de> for StructVisitor {
14232            type Value = MemberAddV2Arg;
14233            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
14234                f.write_str("a MemberAddV2Arg struct")
14235            }
14236            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
14237                MemberAddV2Arg::internal_deserialize(map)
14238            }
14239        }
14240        deserializer.deserialize_struct("MemberAddV2Arg", MEMBER_ADD_V2_ARG_FIELDS, StructVisitor)
14241    }
14242}
14243
14244impl ::serde::ser::Serialize for MemberAddV2Arg {
14245    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
14246        // struct serializer
14247        use serde::ser::SerializeStruct;
14248        let mut s = serializer.serialize_struct("MemberAddV2Arg", 8)?;
14249        self.internal_serialize::<S>(&mut s)?;
14250        s.end()
14251    }
14252}
14253
14254// struct extends MemberAddArgBase
14255impl From<MemberAddV2Arg> for MemberAddArgBase {
14256    fn from(subtype: MemberAddV2Arg) -> Self {
14257        Self {
14258            member_email: subtype.member_email,
14259            member_given_name: subtype.member_given_name,
14260            member_surname: subtype.member_surname,
14261            member_external_id: subtype.member_external_id,
14262            member_persistent_id: subtype.member_persistent_id,
14263            send_welcome_email: subtype.send_welcome_email,
14264            is_directory_restricted: subtype.is_directory_restricted,
14265        }
14266    }
14267}
14268/// Describes the result of attempting to add a single user to the team. 'success' is the only value
14269/// indicating that a user was indeed added to the team - the other values explain the type of
14270/// failure that occurred, and include the email of the user for which the operation has failed.
14271#[derive(Debug, Clone, PartialEq, Eq)]
14272#[non_exhaustive] // variants may be added in the future
14273pub enum MemberAddV2Result {
14274    /// Team is already full. The organization has no available licenses.
14275    TeamLicenseLimit(crate::types::common::EmailAddress),
14276    /// Team is already full. The free team member limit has been reached.
14277    FreeTeamMemberLimitReached(crate::types::common::EmailAddress),
14278    /// User is already on this team. The provided email address is associated with a user who is
14279    /// already a member of (including in recoverable state) or invited to the team.
14280    UserAlreadyOnTeam(crate::types::common::EmailAddress),
14281    /// User is already on another team. The provided email address is associated with a user that
14282    /// is already a member or invited to another team.
14283    UserOnAnotherTeam(crate::types::common::EmailAddress),
14284    /// User is already paired.
14285    UserAlreadyPaired(crate::types::common::EmailAddress),
14286    /// User migration has failed.
14287    UserMigrationFailed(crate::types::common::EmailAddress),
14288    /// A user with the given external member ID already exists on the team (including in
14289    /// recoverable state).
14290    DuplicateExternalMemberId(crate::types::common::EmailAddress),
14291    /// A user with the given persistent ID already exists on the team (including in recoverable
14292    /// state).
14293    DuplicateMemberPersistentId(crate::types::common::EmailAddress),
14294    /// Persistent ID is only available to teams with persistent ID SAML configuration. Please
14295    /// contact Dropbox for more information.
14296    PersistentIdDisabled(crate::types::common::EmailAddress),
14297    /// User creation has failed.
14298    UserCreationFailed(crate::types::common::EmailAddress),
14299    /// Describes a user that was successfully added to the team.
14300    Success(TeamMemberInfoV2),
14301    /// Catch-all used for unrecognized values returned from the server. Encountering this value
14302    /// typically indicates that this SDK version is out of date.
14303    Other,
14304}
14305
14306impl<'de> ::serde::de::Deserialize<'de> for MemberAddV2Result {
14307    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
14308        // union deserializer
14309        use serde::de::{self, MapAccess, Visitor};
14310        struct EnumVisitor;
14311        impl<'de> Visitor<'de> for EnumVisitor {
14312            type Value = MemberAddV2Result;
14313            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
14314                f.write_str("a MemberAddV2Result structure")
14315            }
14316            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
14317                let tag: &str = match map.next_key()? {
14318                    Some(".tag") => map.next_value()?,
14319                    _ => return Err(de::Error::missing_field(".tag"))
14320                };
14321                let value = match tag {
14322                    "team_license_limit" => {
14323                        match map.next_key()? {
14324                            Some("team_license_limit") => MemberAddV2Result::TeamLicenseLimit(map.next_value()?),
14325                            None => return Err(de::Error::missing_field("team_license_limit")),
14326                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
14327                        }
14328                    }
14329                    "free_team_member_limit_reached" => {
14330                        match map.next_key()? {
14331                            Some("free_team_member_limit_reached") => MemberAddV2Result::FreeTeamMemberLimitReached(map.next_value()?),
14332                            None => return Err(de::Error::missing_field("free_team_member_limit_reached")),
14333                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
14334                        }
14335                    }
14336                    "user_already_on_team" => {
14337                        match map.next_key()? {
14338                            Some("user_already_on_team") => MemberAddV2Result::UserAlreadyOnTeam(map.next_value()?),
14339                            None => return Err(de::Error::missing_field("user_already_on_team")),
14340                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
14341                        }
14342                    }
14343                    "user_on_another_team" => {
14344                        match map.next_key()? {
14345                            Some("user_on_another_team") => MemberAddV2Result::UserOnAnotherTeam(map.next_value()?),
14346                            None => return Err(de::Error::missing_field("user_on_another_team")),
14347                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
14348                        }
14349                    }
14350                    "user_already_paired" => {
14351                        match map.next_key()? {
14352                            Some("user_already_paired") => MemberAddV2Result::UserAlreadyPaired(map.next_value()?),
14353                            None => return Err(de::Error::missing_field("user_already_paired")),
14354                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
14355                        }
14356                    }
14357                    "user_migration_failed" => {
14358                        match map.next_key()? {
14359                            Some("user_migration_failed") => MemberAddV2Result::UserMigrationFailed(map.next_value()?),
14360                            None => return Err(de::Error::missing_field("user_migration_failed")),
14361                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
14362                        }
14363                    }
14364                    "duplicate_external_member_id" => {
14365                        match map.next_key()? {
14366                            Some("duplicate_external_member_id") => MemberAddV2Result::DuplicateExternalMemberId(map.next_value()?),
14367                            None => return Err(de::Error::missing_field("duplicate_external_member_id")),
14368                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
14369                        }
14370                    }
14371                    "duplicate_member_persistent_id" => {
14372                        match map.next_key()? {
14373                            Some("duplicate_member_persistent_id") => MemberAddV2Result::DuplicateMemberPersistentId(map.next_value()?),
14374                            None => return Err(de::Error::missing_field("duplicate_member_persistent_id")),
14375                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
14376                        }
14377                    }
14378                    "persistent_id_disabled" => {
14379                        match map.next_key()? {
14380                            Some("persistent_id_disabled") => MemberAddV2Result::PersistentIdDisabled(map.next_value()?),
14381                            None => return Err(de::Error::missing_field("persistent_id_disabled")),
14382                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
14383                        }
14384                    }
14385                    "user_creation_failed" => {
14386                        match map.next_key()? {
14387                            Some("user_creation_failed") => MemberAddV2Result::UserCreationFailed(map.next_value()?),
14388                            None => return Err(de::Error::missing_field("user_creation_failed")),
14389                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
14390                        }
14391                    }
14392                    "success" => MemberAddV2Result::Success(TeamMemberInfoV2::internal_deserialize(&mut map)?),
14393                    _ => MemberAddV2Result::Other,
14394                };
14395                crate::eat_json_fields(&mut map)?;
14396                Ok(value)
14397            }
14398        }
14399        const VARIANTS: &[&str] = &["team_license_limit",
14400                                    "free_team_member_limit_reached",
14401                                    "user_already_on_team",
14402                                    "user_on_another_team",
14403                                    "user_already_paired",
14404                                    "user_migration_failed",
14405                                    "duplicate_external_member_id",
14406                                    "duplicate_member_persistent_id",
14407                                    "persistent_id_disabled",
14408                                    "user_creation_failed",
14409                                    "success",
14410                                    "other"];
14411        deserializer.deserialize_struct("MemberAddV2Result", VARIANTS, EnumVisitor)
14412    }
14413}
14414
14415impl ::serde::ser::Serialize for MemberAddV2Result {
14416    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
14417        // union serializer
14418        use serde::ser::SerializeStruct;
14419        match self {
14420            MemberAddV2Result::TeamLicenseLimit(x) => {
14421                // primitive
14422                let mut s = serializer.serialize_struct("MemberAddV2Result", 2)?;
14423                s.serialize_field(".tag", "team_license_limit")?;
14424                s.serialize_field("team_license_limit", x)?;
14425                s.end()
14426            }
14427            MemberAddV2Result::FreeTeamMemberLimitReached(x) => {
14428                // primitive
14429                let mut s = serializer.serialize_struct("MemberAddV2Result", 2)?;
14430                s.serialize_field(".tag", "free_team_member_limit_reached")?;
14431                s.serialize_field("free_team_member_limit_reached", x)?;
14432                s.end()
14433            }
14434            MemberAddV2Result::UserAlreadyOnTeam(x) => {
14435                // primitive
14436                let mut s = serializer.serialize_struct("MemberAddV2Result", 2)?;
14437                s.serialize_field(".tag", "user_already_on_team")?;
14438                s.serialize_field("user_already_on_team", x)?;
14439                s.end()
14440            }
14441            MemberAddV2Result::UserOnAnotherTeam(x) => {
14442                // primitive
14443                let mut s = serializer.serialize_struct("MemberAddV2Result", 2)?;
14444                s.serialize_field(".tag", "user_on_another_team")?;
14445                s.serialize_field("user_on_another_team", x)?;
14446                s.end()
14447            }
14448            MemberAddV2Result::UserAlreadyPaired(x) => {
14449                // primitive
14450                let mut s = serializer.serialize_struct("MemberAddV2Result", 2)?;
14451                s.serialize_field(".tag", "user_already_paired")?;
14452                s.serialize_field("user_already_paired", x)?;
14453                s.end()
14454            }
14455            MemberAddV2Result::UserMigrationFailed(x) => {
14456                // primitive
14457                let mut s = serializer.serialize_struct("MemberAddV2Result", 2)?;
14458                s.serialize_field(".tag", "user_migration_failed")?;
14459                s.serialize_field("user_migration_failed", x)?;
14460                s.end()
14461            }
14462            MemberAddV2Result::DuplicateExternalMemberId(x) => {
14463                // primitive
14464                let mut s = serializer.serialize_struct("MemberAddV2Result", 2)?;
14465                s.serialize_field(".tag", "duplicate_external_member_id")?;
14466                s.serialize_field("duplicate_external_member_id", x)?;
14467                s.end()
14468            }
14469            MemberAddV2Result::DuplicateMemberPersistentId(x) => {
14470                // primitive
14471                let mut s = serializer.serialize_struct("MemberAddV2Result", 2)?;
14472                s.serialize_field(".tag", "duplicate_member_persistent_id")?;
14473                s.serialize_field("duplicate_member_persistent_id", x)?;
14474                s.end()
14475            }
14476            MemberAddV2Result::PersistentIdDisabled(x) => {
14477                // primitive
14478                let mut s = serializer.serialize_struct("MemberAddV2Result", 2)?;
14479                s.serialize_field(".tag", "persistent_id_disabled")?;
14480                s.serialize_field("persistent_id_disabled", x)?;
14481                s.end()
14482            }
14483            MemberAddV2Result::UserCreationFailed(x) => {
14484                // primitive
14485                let mut s = serializer.serialize_struct("MemberAddV2Result", 2)?;
14486                s.serialize_field(".tag", "user_creation_failed")?;
14487                s.serialize_field("user_creation_failed", x)?;
14488                s.end()
14489            }
14490            MemberAddV2Result::Success(x) => {
14491                // struct
14492                let mut s = serializer.serialize_struct("MemberAddV2Result", 3)?;
14493                s.serialize_field(".tag", "success")?;
14494                x.internal_serialize::<S>(&mut s)?;
14495                s.end()
14496            }
14497            MemberAddV2Result::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
14498        }
14499    }
14500}
14501
14502// union extends MemberAddResultBase
14503impl From<MemberAddResultBase> for MemberAddV2Result {
14504    fn from(parent: MemberAddResultBase) -> Self {
14505        match parent {
14506            MemberAddResultBase::TeamLicenseLimit(x) => MemberAddV2Result::TeamLicenseLimit(x),
14507            MemberAddResultBase::FreeTeamMemberLimitReached(x) => MemberAddV2Result::FreeTeamMemberLimitReached(x),
14508            MemberAddResultBase::UserAlreadyOnTeam(x) => MemberAddV2Result::UserAlreadyOnTeam(x),
14509            MemberAddResultBase::UserOnAnotherTeam(x) => MemberAddV2Result::UserOnAnotherTeam(x),
14510            MemberAddResultBase::UserAlreadyPaired(x) => MemberAddV2Result::UserAlreadyPaired(x),
14511            MemberAddResultBase::UserMigrationFailed(x) => MemberAddV2Result::UserMigrationFailed(x),
14512            MemberAddResultBase::DuplicateExternalMemberId(x) => MemberAddV2Result::DuplicateExternalMemberId(x),
14513            MemberAddResultBase::DuplicateMemberPersistentId(x) => MemberAddV2Result::DuplicateMemberPersistentId(x),
14514            MemberAddResultBase::PersistentIdDisabled(x) => MemberAddV2Result::PersistentIdDisabled(x),
14515            MemberAddResultBase::UserCreationFailed(x) => MemberAddV2Result::UserCreationFailed(x),
14516        }
14517    }
14518}
14519/// Information on devices of a team's member.
14520#[derive(Debug, Clone, PartialEq, Eq)]
14521#[non_exhaustive] // structs may have more fields added in the future.
14522pub struct MemberDevices {
14523    /// The member unique Id.
14524    pub team_member_id: String,
14525    /// List of web sessions made by this team member.
14526    pub web_sessions: Option<Vec<ActiveWebSession>>,
14527    /// List of desktop clients by this team member.
14528    pub desktop_clients: Option<Vec<DesktopClientSession>>,
14529    /// List of mobile clients by this team member.
14530    pub mobile_clients: Option<Vec<MobileClientSession>>,
14531}
14532
14533impl MemberDevices {
14534    pub fn new(team_member_id: String) -> Self {
14535        MemberDevices {
14536            team_member_id,
14537            web_sessions: None,
14538            desktop_clients: None,
14539            mobile_clients: None,
14540        }
14541    }
14542
14543    pub fn with_web_sessions(mut self, value: Vec<ActiveWebSession>) -> Self {
14544        self.web_sessions = Some(value);
14545        self
14546    }
14547
14548    pub fn with_desktop_clients(mut self, value: Vec<DesktopClientSession>) -> Self {
14549        self.desktop_clients = Some(value);
14550        self
14551    }
14552
14553    pub fn with_mobile_clients(mut self, value: Vec<MobileClientSession>) -> Self {
14554        self.mobile_clients = Some(value);
14555        self
14556    }
14557}
14558
14559const MEMBER_DEVICES_FIELDS: &[&str] = &["team_member_id",
14560                                         "web_sessions",
14561                                         "desktop_clients",
14562                                         "mobile_clients"];
14563impl MemberDevices {
14564    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
14565        map: V,
14566    ) -> Result<MemberDevices, V::Error> {
14567        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
14568    }
14569
14570    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
14571        mut map: V,
14572        optional: bool,
14573    ) -> Result<Option<MemberDevices>, V::Error> {
14574        let mut field_team_member_id = None;
14575        let mut field_web_sessions = None;
14576        let mut field_desktop_clients = None;
14577        let mut field_mobile_clients = None;
14578        let mut nothing = true;
14579        while let Some(key) = map.next_key::<&str>()? {
14580            nothing = false;
14581            match key {
14582                "team_member_id" => {
14583                    if field_team_member_id.is_some() {
14584                        return Err(::serde::de::Error::duplicate_field("team_member_id"));
14585                    }
14586                    field_team_member_id = Some(map.next_value()?);
14587                }
14588                "web_sessions" => {
14589                    if field_web_sessions.is_some() {
14590                        return Err(::serde::de::Error::duplicate_field("web_sessions"));
14591                    }
14592                    field_web_sessions = Some(map.next_value()?);
14593                }
14594                "desktop_clients" => {
14595                    if field_desktop_clients.is_some() {
14596                        return Err(::serde::de::Error::duplicate_field("desktop_clients"));
14597                    }
14598                    field_desktop_clients = Some(map.next_value()?);
14599                }
14600                "mobile_clients" => {
14601                    if field_mobile_clients.is_some() {
14602                        return Err(::serde::de::Error::duplicate_field("mobile_clients"));
14603                    }
14604                    field_mobile_clients = Some(map.next_value()?);
14605                }
14606                _ => {
14607                    // unknown field allowed and ignored
14608                    map.next_value::<::serde_json::Value>()?;
14609                }
14610            }
14611        }
14612        if optional && nothing {
14613            return Ok(None);
14614        }
14615        let result = MemberDevices {
14616            team_member_id: field_team_member_id.ok_or_else(|| ::serde::de::Error::missing_field("team_member_id"))?,
14617            web_sessions: field_web_sessions.and_then(Option::flatten),
14618            desktop_clients: field_desktop_clients.and_then(Option::flatten),
14619            mobile_clients: field_mobile_clients.and_then(Option::flatten),
14620        };
14621        Ok(Some(result))
14622    }
14623
14624    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
14625        &self,
14626        s: &mut S::SerializeStruct,
14627    ) -> Result<(), S::Error> {
14628        use serde::ser::SerializeStruct;
14629        s.serialize_field("team_member_id", &self.team_member_id)?;
14630        if let Some(val) = &self.web_sessions {
14631            s.serialize_field("web_sessions", val)?;
14632        }
14633        if let Some(val) = &self.desktop_clients {
14634            s.serialize_field("desktop_clients", val)?;
14635        }
14636        if let Some(val) = &self.mobile_clients {
14637            s.serialize_field("mobile_clients", val)?;
14638        }
14639        Ok(())
14640    }
14641}
14642
14643impl<'de> ::serde::de::Deserialize<'de> for MemberDevices {
14644    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
14645        // struct deserializer
14646        use serde::de::{MapAccess, Visitor};
14647        struct StructVisitor;
14648        impl<'de> Visitor<'de> for StructVisitor {
14649            type Value = MemberDevices;
14650            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
14651                f.write_str("a MemberDevices struct")
14652            }
14653            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
14654                MemberDevices::internal_deserialize(map)
14655            }
14656        }
14657        deserializer.deserialize_struct("MemberDevices", MEMBER_DEVICES_FIELDS, StructVisitor)
14658    }
14659}
14660
14661impl ::serde::ser::Serialize for MemberDevices {
14662    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
14663        // struct serializer
14664        use serde::ser::SerializeStruct;
14665        let mut s = serializer.serialize_struct("MemberDevices", 4)?;
14666        self.internal_serialize::<S>(&mut s)?;
14667        s.end()
14668    }
14669}
14670
14671/// Information on linked applications of a team member.
14672#[derive(Debug, Clone, PartialEq, Eq)]
14673#[non_exhaustive] // structs may have more fields added in the future.
14674pub struct MemberLinkedApps {
14675    /// The member unique Id.
14676    pub team_member_id: String,
14677    /// List of third party applications linked by this team member.
14678    pub linked_api_apps: Vec<ApiApp>,
14679}
14680
14681impl MemberLinkedApps {
14682    pub fn new(team_member_id: String, linked_api_apps: Vec<ApiApp>) -> Self {
14683        MemberLinkedApps {
14684            team_member_id,
14685            linked_api_apps,
14686        }
14687    }
14688}
14689
14690const MEMBER_LINKED_APPS_FIELDS: &[&str] = &["team_member_id",
14691                                             "linked_api_apps"];
14692impl MemberLinkedApps {
14693    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
14694        map: V,
14695    ) -> Result<MemberLinkedApps, V::Error> {
14696        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
14697    }
14698
14699    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
14700        mut map: V,
14701        optional: bool,
14702    ) -> Result<Option<MemberLinkedApps>, V::Error> {
14703        let mut field_team_member_id = None;
14704        let mut field_linked_api_apps = None;
14705        let mut nothing = true;
14706        while let Some(key) = map.next_key::<&str>()? {
14707            nothing = false;
14708            match key {
14709                "team_member_id" => {
14710                    if field_team_member_id.is_some() {
14711                        return Err(::serde::de::Error::duplicate_field("team_member_id"));
14712                    }
14713                    field_team_member_id = Some(map.next_value()?);
14714                }
14715                "linked_api_apps" => {
14716                    if field_linked_api_apps.is_some() {
14717                        return Err(::serde::de::Error::duplicate_field("linked_api_apps"));
14718                    }
14719                    field_linked_api_apps = Some(map.next_value()?);
14720                }
14721                _ => {
14722                    // unknown field allowed and ignored
14723                    map.next_value::<::serde_json::Value>()?;
14724                }
14725            }
14726        }
14727        if optional && nothing {
14728            return Ok(None);
14729        }
14730        let result = MemberLinkedApps {
14731            team_member_id: field_team_member_id.ok_or_else(|| ::serde::de::Error::missing_field("team_member_id"))?,
14732            linked_api_apps: field_linked_api_apps.ok_or_else(|| ::serde::de::Error::missing_field("linked_api_apps"))?,
14733        };
14734        Ok(Some(result))
14735    }
14736
14737    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
14738        &self,
14739        s: &mut S::SerializeStruct,
14740    ) -> Result<(), S::Error> {
14741        use serde::ser::SerializeStruct;
14742        s.serialize_field("team_member_id", &self.team_member_id)?;
14743        s.serialize_field("linked_api_apps", &self.linked_api_apps)?;
14744        Ok(())
14745    }
14746}
14747
14748impl<'de> ::serde::de::Deserialize<'de> for MemberLinkedApps {
14749    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
14750        // struct deserializer
14751        use serde::de::{MapAccess, Visitor};
14752        struct StructVisitor;
14753        impl<'de> Visitor<'de> for StructVisitor {
14754            type Value = MemberLinkedApps;
14755            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
14756                f.write_str("a MemberLinkedApps struct")
14757            }
14758            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
14759                MemberLinkedApps::internal_deserialize(map)
14760            }
14761        }
14762        deserializer.deserialize_struct("MemberLinkedApps", MEMBER_LINKED_APPS_FIELDS, StructVisitor)
14763    }
14764}
14765
14766impl ::serde::ser::Serialize for MemberLinkedApps {
14767    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
14768        // struct serializer
14769        use serde::ser::SerializeStruct;
14770        let mut s = serializer.serialize_struct("MemberLinkedApps", 2)?;
14771        self.internal_serialize::<S>(&mut s)?;
14772        s.end()
14773    }
14774}
14775
14776/// Basic member profile.
14777#[derive(Debug, Clone, PartialEq, Eq)]
14778#[non_exhaustive] // structs may have more fields added in the future.
14779pub struct MemberProfile {
14780    /// ID of user as a member of a team.
14781    pub team_member_id: crate::types::team_common::TeamMemberId,
14782    /// Email address of user.
14783    pub email: String,
14784    /// Is true if the user's email is verified to be owned by the user.
14785    pub email_verified: bool,
14786    /// The user's status as a member of a specific team.
14787    pub status: TeamMemberStatus,
14788    /// Representations for a person's name.
14789    pub name: crate::types::users::Name,
14790    /// The user's membership type: full (normal team member) vs limited (does not use a license; no
14791    /// access to the team's shared quota).
14792    pub membership_type: TeamMembershipType,
14793    /// External ID that a team can attach to the user. An application using the API may find it
14794    /// easier to use their own IDs instead of Dropbox IDs like account_id or team_member_id.
14795    pub external_id: Option<String>,
14796    /// A user's account identifier.
14797    pub account_id: Option<crate::types::users_common::AccountId>,
14798    /// Secondary emails of a user.
14799    pub secondary_emails: Option<Vec<crate::types::secondary_emails::SecondaryEmail>>,
14800    /// The date and time the user was invited to the team (contains value only when the member's
14801    /// status matches [`TeamMemberStatus::Invited`]).
14802    pub invited_on: Option<crate::types::common::DropboxTimestamp>,
14803    /// The date and time the user joined as a member of a specific team.
14804    pub joined_on: Option<crate::types::common::DropboxTimestamp>,
14805    /// The date and time the user was suspended from the team (contains value only when the
14806    /// member's status matches [`TeamMemberStatus::Suspended`]).
14807    pub suspended_on: Option<crate::types::common::DropboxTimestamp>,
14808    /// Persistent ID that a team can attach to the user. The persistent ID is unique ID to be used
14809    /// for SAML authentication.
14810    pub persistent_id: Option<String>,
14811    /// Whether the user is a directory restricted user.
14812    pub is_directory_restricted: Option<bool>,
14813    /// URL for the photo representing the user, if one is set.
14814    pub profile_photo_url: Option<String>,
14815}
14816
14817impl MemberProfile {
14818    pub fn new(
14819        team_member_id: crate::types::team_common::TeamMemberId,
14820        email: String,
14821        email_verified: bool,
14822        status: TeamMemberStatus,
14823        name: crate::types::users::Name,
14824        membership_type: TeamMembershipType,
14825    ) -> Self {
14826        MemberProfile {
14827            team_member_id,
14828            email,
14829            email_verified,
14830            status,
14831            name,
14832            membership_type,
14833            external_id: None,
14834            account_id: None,
14835            secondary_emails: None,
14836            invited_on: None,
14837            joined_on: None,
14838            suspended_on: None,
14839            persistent_id: None,
14840            is_directory_restricted: None,
14841            profile_photo_url: None,
14842        }
14843    }
14844
14845    pub fn with_external_id(mut self, value: String) -> Self {
14846        self.external_id = Some(value);
14847        self
14848    }
14849
14850    pub fn with_account_id(mut self, value: crate::types::users_common::AccountId) -> Self {
14851        self.account_id = Some(value);
14852        self
14853    }
14854
14855    pub fn with_secondary_emails(
14856        mut self,
14857        value: Vec<crate::types::secondary_emails::SecondaryEmail>,
14858    ) -> Self {
14859        self.secondary_emails = Some(value);
14860        self
14861    }
14862
14863    pub fn with_invited_on(mut self, value: crate::types::common::DropboxTimestamp) -> Self {
14864        self.invited_on = Some(value);
14865        self
14866    }
14867
14868    pub fn with_joined_on(mut self, value: crate::types::common::DropboxTimestamp) -> Self {
14869        self.joined_on = Some(value);
14870        self
14871    }
14872
14873    pub fn with_suspended_on(mut self, value: crate::types::common::DropboxTimestamp) -> Self {
14874        self.suspended_on = Some(value);
14875        self
14876    }
14877
14878    pub fn with_persistent_id(mut self, value: String) -> Self {
14879        self.persistent_id = Some(value);
14880        self
14881    }
14882
14883    pub fn with_is_directory_restricted(mut self, value: bool) -> Self {
14884        self.is_directory_restricted = Some(value);
14885        self
14886    }
14887
14888    pub fn with_profile_photo_url(mut self, value: String) -> Self {
14889        self.profile_photo_url = Some(value);
14890        self
14891    }
14892}
14893
14894const MEMBER_PROFILE_FIELDS: &[&str] = &["team_member_id",
14895                                         "email",
14896                                         "email_verified",
14897                                         "status",
14898                                         "name",
14899                                         "membership_type",
14900                                         "external_id",
14901                                         "account_id",
14902                                         "secondary_emails",
14903                                         "invited_on",
14904                                         "joined_on",
14905                                         "suspended_on",
14906                                         "persistent_id",
14907                                         "is_directory_restricted",
14908                                         "profile_photo_url"];
14909impl MemberProfile {
14910    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
14911        map: V,
14912    ) -> Result<MemberProfile, V::Error> {
14913        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
14914    }
14915
14916    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
14917        mut map: V,
14918        optional: bool,
14919    ) -> Result<Option<MemberProfile>, V::Error> {
14920        let mut field_team_member_id = None;
14921        let mut field_email = None;
14922        let mut field_email_verified = None;
14923        let mut field_status = None;
14924        let mut field_name = None;
14925        let mut field_membership_type = None;
14926        let mut field_external_id = None;
14927        let mut field_account_id = None;
14928        let mut field_secondary_emails = None;
14929        let mut field_invited_on = None;
14930        let mut field_joined_on = None;
14931        let mut field_suspended_on = None;
14932        let mut field_persistent_id = None;
14933        let mut field_is_directory_restricted = None;
14934        let mut field_profile_photo_url = None;
14935        let mut nothing = true;
14936        while let Some(key) = map.next_key::<&str>()? {
14937            nothing = false;
14938            match key {
14939                "team_member_id" => {
14940                    if field_team_member_id.is_some() {
14941                        return Err(::serde::de::Error::duplicate_field("team_member_id"));
14942                    }
14943                    field_team_member_id = Some(map.next_value()?);
14944                }
14945                "email" => {
14946                    if field_email.is_some() {
14947                        return Err(::serde::de::Error::duplicate_field("email"));
14948                    }
14949                    field_email = Some(map.next_value()?);
14950                }
14951                "email_verified" => {
14952                    if field_email_verified.is_some() {
14953                        return Err(::serde::de::Error::duplicate_field("email_verified"));
14954                    }
14955                    field_email_verified = Some(map.next_value()?);
14956                }
14957                "status" => {
14958                    if field_status.is_some() {
14959                        return Err(::serde::de::Error::duplicate_field("status"));
14960                    }
14961                    field_status = Some(map.next_value()?);
14962                }
14963                "name" => {
14964                    if field_name.is_some() {
14965                        return Err(::serde::de::Error::duplicate_field("name"));
14966                    }
14967                    field_name = Some(map.next_value()?);
14968                }
14969                "membership_type" => {
14970                    if field_membership_type.is_some() {
14971                        return Err(::serde::de::Error::duplicate_field("membership_type"));
14972                    }
14973                    field_membership_type = Some(map.next_value()?);
14974                }
14975                "external_id" => {
14976                    if field_external_id.is_some() {
14977                        return Err(::serde::de::Error::duplicate_field("external_id"));
14978                    }
14979                    field_external_id = Some(map.next_value()?);
14980                }
14981                "account_id" => {
14982                    if field_account_id.is_some() {
14983                        return Err(::serde::de::Error::duplicate_field("account_id"));
14984                    }
14985                    field_account_id = Some(map.next_value()?);
14986                }
14987                "secondary_emails" => {
14988                    if field_secondary_emails.is_some() {
14989                        return Err(::serde::de::Error::duplicate_field("secondary_emails"));
14990                    }
14991                    field_secondary_emails = Some(map.next_value()?);
14992                }
14993                "invited_on" => {
14994                    if field_invited_on.is_some() {
14995                        return Err(::serde::de::Error::duplicate_field("invited_on"));
14996                    }
14997                    field_invited_on = Some(map.next_value()?);
14998                }
14999                "joined_on" => {
15000                    if field_joined_on.is_some() {
15001                        return Err(::serde::de::Error::duplicate_field("joined_on"));
15002                    }
15003                    field_joined_on = Some(map.next_value()?);
15004                }
15005                "suspended_on" => {
15006                    if field_suspended_on.is_some() {
15007                        return Err(::serde::de::Error::duplicate_field("suspended_on"));
15008                    }
15009                    field_suspended_on = Some(map.next_value()?);
15010                }
15011                "persistent_id" => {
15012                    if field_persistent_id.is_some() {
15013                        return Err(::serde::de::Error::duplicate_field("persistent_id"));
15014                    }
15015                    field_persistent_id = Some(map.next_value()?);
15016                }
15017                "is_directory_restricted" => {
15018                    if field_is_directory_restricted.is_some() {
15019                        return Err(::serde::de::Error::duplicate_field("is_directory_restricted"));
15020                    }
15021                    field_is_directory_restricted = Some(map.next_value()?);
15022                }
15023                "profile_photo_url" => {
15024                    if field_profile_photo_url.is_some() {
15025                        return Err(::serde::de::Error::duplicate_field("profile_photo_url"));
15026                    }
15027                    field_profile_photo_url = Some(map.next_value()?);
15028                }
15029                _ => {
15030                    // unknown field allowed and ignored
15031                    map.next_value::<::serde_json::Value>()?;
15032                }
15033            }
15034        }
15035        if optional && nothing {
15036            return Ok(None);
15037        }
15038        let result = MemberProfile {
15039            team_member_id: field_team_member_id.ok_or_else(|| ::serde::de::Error::missing_field("team_member_id"))?,
15040            email: field_email.ok_or_else(|| ::serde::de::Error::missing_field("email"))?,
15041            email_verified: field_email_verified.ok_or_else(|| ::serde::de::Error::missing_field("email_verified"))?,
15042            status: field_status.ok_or_else(|| ::serde::de::Error::missing_field("status"))?,
15043            name: field_name.ok_or_else(|| ::serde::de::Error::missing_field("name"))?,
15044            membership_type: field_membership_type.ok_or_else(|| ::serde::de::Error::missing_field("membership_type"))?,
15045            external_id: field_external_id.and_then(Option::flatten),
15046            account_id: field_account_id.and_then(Option::flatten),
15047            secondary_emails: field_secondary_emails.and_then(Option::flatten),
15048            invited_on: field_invited_on.and_then(Option::flatten),
15049            joined_on: field_joined_on.and_then(Option::flatten),
15050            suspended_on: field_suspended_on.and_then(Option::flatten),
15051            persistent_id: field_persistent_id.and_then(Option::flatten),
15052            is_directory_restricted: field_is_directory_restricted.and_then(Option::flatten),
15053            profile_photo_url: field_profile_photo_url.and_then(Option::flatten),
15054        };
15055        Ok(Some(result))
15056    }
15057
15058    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
15059        &self,
15060        s: &mut S::SerializeStruct,
15061    ) -> Result<(), S::Error> {
15062        use serde::ser::SerializeStruct;
15063        s.serialize_field("team_member_id", &self.team_member_id)?;
15064        s.serialize_field("email", &self.email)?;
15065        s.serialize_field("email_verified", &self.email_verified)?;
15066        s.serialize_field("status", &self.status)?;
15067        s.serialize_field("name", &self.name)?;
15068        s.serialize_field("membership_type", &self.membership_type)?;
15069        if let Some(val) = &self.external_id {
15070            s.serialize_field("external_id", val)?;
15071        }
15072        if let Some(val) = &self.account_id {
15073            s.serialize_field("account_id", val)?;
15074        }
15075        if let Some(val) = &self.secondary_emails {
15076            s.serialize_field("secondary_emails", val)?;
15077        }
15078        if let Some(val) = &self.invited_on {
15079            s.serialize_field("invited_on", val)?;
15080        }
15081        if let Some(val) = &self.joined_on {
15082            s.serialize_field("joined_on", val)?;
15083        }
15084        if let Some(val) = &self.suspended_on {
15085            s.serialize_field("suspended_on", val)?;
15086        }
15087        if let Some(val) = &self.persistent_id {
15088            s.serialize_field("persistent_id", val)?;
15089        }
15090        if let Some(val) = &self.is_directory_restricted {
15091            s.serialize_field("is_directory_restricted", val)?;
15092        }
15093        if let Some(val) = &self.profile_photo_url {
15094            s.serialize_field("profile_photo_url", val)?;
15095        }
15096        Ok(())
15097    }
15098}
15099
15100impl<'de> ::serde::de::Deserialize<'de> for MemberProfile {
15101    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
15102        // struct deserializer
15103        use serde::de::{MapAccess, Visitor};
15104        struct StructVisitor;
15105        impl<'de> Visitor<'de> for StructVisitor {
15106            type Value = MemberProfile;
15107            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
15108                f.write_str("a MemberProfile struct")
15109            }
15110            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
15111                MemberProfile::internal_deserialize(map)
15112            }
15113        }
15114        deserializer.deserialize_struct("MemberProfile", MEMBER_PROFILE_FIELDS, StructVisitor)
15115    }
15116}
15117
15118impl ::serde::ser::Serialize for MemberProfile {
15119    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
15120        // struct serializer
15121        use serde::ser::SerializeStruct;
15122        let mut s = serializer.serialize_struct("MemberProfile", 15)?;
15123        self.internal_serialize::<S>(&mut s)?;
15124        s.end()
15125    }
15126}
15127
15128#[derive(Debug, Clone, PartialEq, Eq)]
15129pub enum MemberSelectorError {
15130    /// No matching user found. The provided team_member_id, email, or external_id does not exist on
15131    /// this team.
15132    UserNotFound,
15133    /// The user is not a member of the team.
15134    UserNotInTeam,
15135}
15136
15137impl<'de> ::serde::de::Deserialize<'de> for MemberSelectorError {
15138    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
15139        // union deserializer
15140        use serde::de::{self, MapAccess, Visitor};
15141        struct EnumVisitor;
15142        impl<'de> Visitor<'de> for EnumVisitor {
15143            type Value = MemberSelectorError;
15144            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
15145                f.write_str("a MemberSelectorError structure")
15146            }
15147            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
15148                let tag: &str = match map.next_key()? {
15149                    Some(".tag") => map.next_value()?,
15150                    _ => return Err(de::Error::missing_field(".tag"))
15151                };
15152                let value = match tag {
15153                    "user_not_found" => MemberSelectorError::UserNotFound,
15154                    "user_not_in_team" => MemberSelectorError::UserNotInTeam,
15155                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
15156                };
15157                crate::eat_json_fields(&mut map)?;
15158                Ok(value)
15159            }
15160        }
15161        const VARIANTS: &[&str] = &["user_not_found",
15162                                    "user_not_in_team"];
15163        deserializer.deserialize_struct("MemberSelectorError", VARIANTS, EnumVisitor)
15164    }
15165}
15166
15167impl ::serde::ser::Serialize for MemberSelectorError {
15168    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
15169        // union serializer
15170        use serde::ser::SerializeStruct;
15171        match self {
15172            MemberSelectorError::UserNotFound => {
15173                // unit
15174                let mut s = serializer.serialize_struct("MemberSelectorError", 1)?;
15175                s.serialize_field(".tag", "user_not_found")?;
15176                s.end()
15177            }
15178            MemberSelectorError::UserNotInTeam => {
15179                // unit
15180                let mut s = serializer.serialize_struct("MemberSelectorError", 1)?;
15181                s.serialize_field(".tag", "user_not_in_team")?;
15182                s.end()
15183            }
15184        }
15185    }
15186}
15187
15188impl ::std::error::Error for MemberSelectorError {
15189}
15190
15191impl ::std::fmt::Display for MemberSelectorError {
15192    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
15193        match self {
15194            MemberSelectorError::UserNotFound => f.write_str("No matching user found. The provided team_member_id, email, or external_id does not exist on this team."),
15195            MemberSelectorError::UserNotInTeam => f.write_str("The user is not a member of the team."),
15196        }
15197    }
15198}
15199
15200// union extends UserSelectorError
15201impl From<UserSelectorError> for MemberSelectorError {
15202    fn from(parent: UserSelectorError) -> Self {
15203        match parent {
15204            UserSelectorError::UserNotFound => MemberSelectorError::UserNotFound,
15205        }
15206    }
15207}
15208#[derive(Debug, Clone, PartialEq, Eq)]
15209#[non_exhaustive] // structs may have more fields added in the future.
15210pub struct MembersAddArg {
15211    /// Details of new members to be added to the team.
15212    pub new_members: Vec<MemberAddArg>,
15213    /// Whether to force the add to happen asynchronously.
15214    pub force_async: bool,
15215}
15216
15217impl MembersAddArg {
15218    pub fn new(new_members: Vec<MemberAddArg>) -> Self {
15219        MembersAddArg {
15220            new_members,
15221            force_async: false,
15222        }
15223    }
15224
15225    pub fn with_force_async(mut self, value: bool) -> Self {
15226        self.force_async = value;
15227        self
15228    }
15229}
15230
15231const MEMBERS_ADD_ARG_FIELDS: &[&str] = &["new_members",
15232                                          "force_async"];
15233impl MembersAddArg {
15234    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
15235        map: V,
15236    ) -> Result<MembersAddArg, V::Error> {
15237        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
15238    }
15239
15240    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
15241        mut map: V,
15242        optional: bool,
15243    ) -> Result<Option<MembersAddArg>, V::Error> {
15244        let mut field_new_members = None;
15245        let mut field_force_async = None;
15246        let mut nothing = true;
15247        while let Some(key) = map.next_key::<&str>()? {
15248            nothing = false;
15249            match key {
15250                "new_members" => {
15251                    if field_new_members.is_some() {
15252                        return Err(::serde::de::Error::duplicate_field("new_members"));
15253                    }
15254                    field_new_members = Some(map.next_value()?);
15255                }
15256                "force_async" => {
15257                    if field_force_async.is_some() {
15258                        return Err(::serde::de::Error::duplicate_field("force_async"));
15259                    }
15260                    field_force_async = Some(map.next_value()?);
15261                }
15262                _ => {
15263                    // unknown field allowed and ignored
15264                    map.next_value::<::serde_json::Value>()?;
15265                }
15266            }
15267        }
15268        if optional && nothing {
15269            return Ok(None);
15270        }
15271        let result = MembersAddArg {
15272            new_members: field_new_members.ok_or_else(|| ::serde::de::Error::missing_field("new_members"))?,
15273            force_async: field_force_async.unwrap_or(false),
15274        };
15275        Ok(Some(result))
15276    }
15277
15278    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
15279        &self,
15280        s: &mut S::SerializeStruct,
15281    ) -> Result<(), S::Error> {
15282        use serde::ser::SerializeStruct;
15283        s.serialize_field("new_members", &self.new_members)?;
15284        if self.force_async {
15285            s.serialize_field("force_async", &self.force_async)?;
15286        }
15287        Ok(())
15288    }
15289}
15290
15291impl<'de> ::serde::de::Deserialize<'de> for MembersAddArg {
15292    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
15293        // struct deserializer
15294        use serde::de::{MapAccess, Visitor};
15295        struct StructVisitor;
15296        impl<'de> Visitor<'de> for StructVisitor {
15297            type Value = MembersAddArg;
15298            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
15299                f.write_str("a MembersAddArg struct")
15300            }
15301            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
15302                MembersAddArg::internal_deserialize(map)
15303            }
15304        }
15305        deserializer.deserialize_struct("MembersAddArg", MEMBERS_ADD_ARG_FIELDS, StructVisitor)
15306    }
15307}
15308
15309impl ::serde::ser::Serialize for MembersAddArg {
15310    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
15311        // struct serializer
15312        use serde::ser::SerializeStruct;
15313        let mut s = serializer.serialize_struct("MembersAddArg", 2)?;
15314        self.internal_serialize::<S>(&mut s)?;
15315        s.end()
15316    }
15317}
15318
15319// struct extends MembersAddArgBase
15320impl From<MembersAddArg> for MembersAddArgBase {
15321    fn from(subtype: MembersAddArg) -> Self {
15322        Self {
15323            force_async: subtype.force_async,
15324        }
15325    }
15326}
15327#[derive(Debug, Clone, PartialEq, Eq, Default)]
15328#[non_exhaustive] // structs may have more fields added in the future.
15329pub struct MembersAddArgBase {
15330    /// Whether to force the add to happen asynchronously.
15331    pub force_async: bool,
15332}
15333
15334impl MembersAddArgBase {
15335    pub fn with_force_async(mut self, value: bool) -> Self {
15336        self.force_async = value;
15337        self
15338    }
15339}
15340
15341const MEMBERS_ADD_ARG_BASE_FIELDS: &[&str] = &["force_async"];
15342impl MembersAddArgBase {
15343    // no _opt deserializer
15344    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
15345        mut map: V,
15346    ) -> Result<MembersAddArgBase, V::Error> {
15347        let mut field_force_async = None;
15348        while let Some(key) = map.next_key::<&str>()? {
15349            match key {
15350                "force_async" => {
15351                    if field_force_async.is_some() {
15352                        return Err(::serde::de::Error::duplicate_field("force_async"));
15353                    }
15354                    field_force_async = Some(map.next_value()?);
15355                }
15356                _ => {
15357                    // unknown field allowed and ignored
15358                    map.next_value::<::serde_json::Value>()?;
15359                }
15360            }
15361        }
15362        let result = MembersAddArgBase {
15363            force_async: field_force_async.unwrap_or(false),
15364        };
15365        Ok(result)
15366    }
15367
15368    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
15369        &self,
15370        s: &mut S::SerializeStruct,
15371    ) -> Result<(), S::Error> {
15372        use serde::ser::SerializeStruct;
15373        if self.force_async {
15374            s.serialize_field("force_async", &self.force_async)?;
15375        }
15376        Ok(())
15377    }
15378}
15379
15380impl<'de> ::serde::de::Deserialize<'de> for MembersAddArgBase {
15381    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
15382        // struct deserializer
15383        use serde::de::{MapAccess, Visitor};
15384        struct StructVisitor;
15385        impl<'de> Visitor<'de> for StructVisitor {
15386            type Value = MembersAddArgBase;
15387            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
15388                f.write_str("a MembersAddArgBase struct")
15389            }
15390            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
15391                MembersAddArgBase::internal_deserialize(map)
15392            }
15393        }
15394        deserializer.deserialize_struct("MembersAddArgBase", MEMBERS_ADD_ARG_BASE_FIELDS, StructVisitor)
15395    }
15396}
15397
15398impl ::serde::ser::Serialize for MembersAddArgBase {
15399    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
15400        // struct serializer
15401        use serde::ser::SerializeStruct;
15402        let mut s = serializer.serialize_struct("MembersAddArgBase", 1)?;
15403        self.internal_serialize::<S>(&mut s)?;
15404        s.end()
15405    }
15406}
15407
15408#[derive(Debug, Clone, PartialEq, Eq)]
15409pub enum MembersAddJobStatus {
15410    /// The asynchronous job is still in progress.
15411    InProgress,
15412    /// The asynchronous job has finished. For each member that was specified in the parameter
15413    /// [`MembersAddArg`] that was provided to [`members_add()`](crate::team::members_add), a
15414    /// corresponding item is returned in this list.
15415    Complete(Vec<MemberAddResult>),
15416    /// The asynchronous job returned an error. The string contains an error message.
15417    Failed(String),
15418}
15419
15420impl<'de> ::serde::de::Deserialize<'de> for MembersAddJobStatus {
15421    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
15422        // union deserializer
15423        use serde::de::{self, MapAccess, Visitor};
15424        struct EnumVisitor;
15425        impl<'de> Visitor<'de> for EnumVisitor {
15426            type Value = MembersAddJobStatus;
15427            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
15428                f.write_str("a MembersAddJobStatus structure")
15429            }
15430            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
15431                let tag: &str = match map.next_key()? {
15432                    Some(".tag") => map.next_value()?,
15433                    _ => return Err(de::Error::missing_field(".tag"))
15434                };
15435                let value = match tag {
15436                    "in_progress" => MembersAddJobStatus::InProgress,
15437                    "complete" => {
15438                        match map.next_key()? {
15439                            Some("complete") => MembersAddJobStatus::Complete(map.next_value()?),
15440                            None => return Err(de::Error::missing_field("complete")),
15441                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
15442                        }
15443                    }
15444                    "failed" => {
15445                        match map.next_key()? {
15446                            Some("failed") => MembersAddJobStatus::Failed(map.next_value()?),
15447                            None => return Err(de::Error::missing_field("failed")),
15448                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
15449                        }
15450                    }
15451                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
15452                };
15453                crate::eat_json_fields(&mut map)?;
15454                Ok(value)
15455            }
15456        }
15457        const VARIANTS: &[&str] = &["in_progress",
15458                                    "complete",
15459                                    "failed"];
15460        deserializer.deserialize_struct("MembersAddJobStatus", VARIANTS, EnumVisitor)
15461    }
15462}
15463
15464impl ::serde::ser::Serialize for MembersAddJobStatus {
15465    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
15466        // union serializer
15467        use serde::ser::SerializeStruct;
15468        match self {
15469            MembersAddJobStatus::InProgress => {
15470                // unit
15471                let mut s = serializer.serialize_struct("MembersAddJobStatus", 1)?;
15472                s.serialize_field(".tag", "in_progress")?;
15473                s.end()
15474            }
15475            MembersAddJobStatus::Complete(x) => {
15476                // primitive
15477                let mut s = serializer.serialize_struct("MembersAddJobStatus", 2)?;
15478                s.serialize_field(".tag", "complete")?;
15479                s.serialize_field("complete", x)?;
15480                s.end()
15481            }
15482            MembersAddJobStatus::Failed(x) => {
15483                // primitive
15484                let mut s = serializer.serialize_struct("MembersAddJobStatus", 2)?;
15485                s.serialize_field(".tag", "failed")?;
15486                s.serialize_field("failed", x)?;
15487                s.end()
15488            }
15489        }
15490    }
15491}
15492
15493// union extends crate::types::dbx_async::PollResultBase
15494impl From<crate::types::dbx_async::PollResultBase> for MembersAddJobStatus {
15495    fn from(parent: crate::types::dbx_async::PollResultBase) -> Self {
15496        match parent {
15497            crate::types::dbx_async::PollResultBase::InProgress => MembersAddJobStatus::InProgress,
15498        }
15499    }
15500}
15501#[derive(Debug, Clone, PartialEq, Eq)]
15502#[non_exhaustive] // variants may be added in the future
15503pub enum MembersAddJobStatusV2Result {
15504    /// The asynchronous job is still in progress.
15505    InProgress,
15506    /// The asynchronous job has finished. For each member that was specified in the parameter
15507    /// [`MembersAddArg`] that was provided to [`members_add_v2()`](crate::team::members_add_v2), a
15508    /// corresponding item is returned in this list.
15509    Complete(Vec<MemberAddV2Result>),
15510    /// The asynchronous job returned an error. The string contains an error message.
15511    Failed(String),
15512    /// Catch-all used for unrecognized values returned from the server. Encountering this value
15513    /// typically indicates that this SDK version is out of date.
15514    Other,
15515}
15516
15517impl<'de> ::serde::de::Deserialize<'de> for MembersAddJobStatusV2Result {
15518    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
15519        // union deserializer
15520        use serde::de::{self, MapAccess, Visitor};
15521        struct EnumVisitor;
15522        impl<'de> Visitor<'de> for EnumVisitor {
15523            type Value = MembersAddJobStatusV2Result;
15524            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
15525                f.write_str("a MembersAddJobStatusV2Result structure")
15526            }
15527            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
15528                let tag: &str = match map.next_key()? {
15529                    Some(".tag") => map.next_value()?,
15530                    _ => return Err(de::Error::missing_field(".tag"))
15531                };
15532                let value = match tag {
15533                    "in_progress" => MembersAddJobStatusV2Result::InProgress,
15534                    "complete" => {
15535                        match map.next_key()? {
15536                            Some("complete") => MembersAddJobStatusV2Result::Complete(map.next_value()?),
15537                            None => return Err(de::Error::missing_field("complete")),
15538                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
15539                        }
15540                    }
15541                    "failed" => {
15542                        match map.next_key()? {
15543                            Some("failed") => MembersAddJobStatusV2Result::Failed(map.next_value()?),
15544                            None => return Err(de::Error::missing_field("failed")),
15545                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
15546                        }
15547                    }
15548                    _ => MembersAddJobStatusV2Result::Other,
15549                };
15550                crate::eat_json_fields(&mut map)?;
15551                Ok(value)
15552            }
15553        }
15554        const VARIANTS: &[&str] = &["in_progress",
15555                                    "complete",
15556                                    "failed",
15557                                    "other"];
15558        deserializer.deserialize_struct("MembersAddJobStatusV2Result", VARIANTS, EnumVisitor)
15559    }
15560}
15561
15562impl ::serde::ser::Serialize for MembersAddJobStatusV2Result {
15563    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
15564        // union serializer
15565        use serde::ser::SerializeStruct;
15566        match self {
15567            MembersAddJobStatusV2Result::InProgress => {
15568                // unit
15569                let mut s = serializer.serialize_struct("MembersAddJobStatusV2Result", 1)?;
15570                s.serialize_field(".tag", "in_progress")?;
15571                s.end()
15572            }
15573            MembersAddJobStatusV2Result::Complete(x) => {
15574                // primitive
15575                let mut s = serializer.serialize_struct("MembersAddJobStatusV2Result", 2)?;
15576                s.serialize_field(".tag", "complete")?;
15577                s.serialize_field("complete", x)?;
15578                s.end()
15579            }
15580            MembersAddJobStatusV2Result::Failed(x) => {
15581                // primitive
15582                let mut s = serializer.serialize_struct("MembersAddJobStatusV2Result", 2)?;
15583                s.serialize_field(".tag", "failed")?;
15584                s.serialize_field("failed", x)?;
15585                s.end()
15586            }
15587            MembersAddJobStatusV2Result::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
15588        }
15589    }
15590}
15591
15592// union extends crate::types::dbx_async::PollResultBase
15593impl From<crate::types::dbx_async::PollResultBase> for MembersAddJobStatusV2Result {
15594    fn from(parent: crate::types::dbx_async::PollResultBase) -> Self {
15595        match parent {
15596            crate::types::dbx_async::PollResultBase::InProgress => MembersAddJobStatusV2Result::InProgress,
15597        }
15598    }
15599}
15600#[derive(Debug, Clone, PartialEq, Eq)]
15601pub enum MembersAddLaunch {
15602    /// This response indicates that the processing is asynchronous. The string is an id that can be
15603    /// used to obtain the status of the asynchronous job.
15604    AsyncJobId(crate::types::dbx_async::AsyncJobId),
15605    Complete(Vec<MemberAddResult>),
15606}
15607
15608impl<'de> ::serde::de::Deserialize<'de> for MembersAddLaunch {
15609    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
15610        // union deserializer
15611        use serde::de::{self, MapAccess, Visitor};
15612        struct EnumVisitor;
15613        impl<'de> Visitor<'de> for EnumVisitor {
15614            type Value = MembersAddLaunch;
15615            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
15616                f.write_str("a MembersAddLaunch structure")
15617            }
15618            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
15619                let tag: &str = match map.next_key()? {
15620                    Some(".tag") => map.next_value()?,
15621                    _ => return Err(de::Error::missing_field(".tag"))
15622                };
15623                let value = match tag {
15624                    "async_job_id" => {
15625                        match map.next_key()? {
15626                            Some("async_job_id") => MembersAddLaunch::AsyncJobId(map.next_value()?),
15627                            None => return Err(de::Error::missing_field("async_job_id")),
15628                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
15629                        }
15630                    }
15631                    "complete" => {
15632                        match map.next_key()? {
15633                            Some("complete") => MembersAddLaunch::Complete(map.next_value()?),
15634                            None => return Err(de::Error::missing_field("complete")),
15635                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
15636                        }
15637                    }
15638                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
15639                };
15640                crate::eat_json_fields(&mut map)?;
15641                Ok(value)
15642            }
15643        }
15644        const VARIANTS: &[&str] = &["async_job_id",
15645                                    "complete"];
15646        deserializer.deserialize_struct("MembersAddLaunch", VARIANTS, EnumVisitor)
15647    }
15648}
15649
15650impl ::serde::ser::Serialize for MembersAddLaunch {
15651    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
15652        // union serializer
15653        use serde::ser::SerializeStruct;
15654        match self {
15655            MembersAddLaunch::AsyncJobId(x) => {
15656                // primitive
15657                let mut s = serializer.serialize_struct("MembersAddLaunch", 2)?;
15658                s.serialize_field(".tag", "async_job_id")?;
15659                s.serialize_field("async_job_id", x)?;
15660                s.end()
15661            }
15662            MembersAddLaunch::Complete(x) => {
15663                // primitive
15664                let mut s = serializer.serialize_struct("MembersAddLaunch", 2)?;
15665                s.serialize_field(".tag", "complete")?;
15666                s.serialize_field("complete", x)?;
15667                s.end()
15668            }
15669        }
15670    }
15671}
15672
15673// union extends crate::types::dbx_async::LaunchResultBase
15674impl From<crate::types::dbx_async::LaunchResultBase> for MembersAddLaunch {
15675    fn from(parent: crate::types::dbx_async::LaunchResultBase) -> Self {
15676        match parent {
15677            crate::types::dbx_async::LaunchResultBase::AsyncJobId(x) => MembersAddLaunch::AsyncJobId(x),
15678        }
15679    }
15680}
15681#[derive(Debug, Clone, PartialEq, Eq)]
15682#[non_exhaustive] // variants may be added in the future
15683pub enum MembersAddLaunchV2Result {
15684    /// This response indicates that the processing is asynchronous. The string is an id that can be
15685    /// used to obtain the status of the asynchronous job.
15686    AsyncJobId(crate::types::dbx_async::AsyncJobId),
15687    Complete(Vec<MemberAddV2Result>),
15688    /// Catch-all used for unrecognized values returned from the server. Encountering this value
15689    /// typically indicates that this SDK version is out of date.
15690    Other,
15691}
15692
15693impl<'de> ::serde::de::Deserialize<'de> for MembersAddLaunchV2Result {
15694    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
15695        // union deserializer
15696        use serde::de::{self, MapAccess, Visitor};
15697        struct EnumVisitor;
15698        impl<'de> Visitor<'de> for EnumVisitor {
15699            type Value = MembersAddLaunchV2Result;
15700            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
15701                f.write_str("a MembersAddLaunchV2Result structure")
15702            }
15703            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
15704                let tag: &str = match map.next_key()? {
15705                    Some(".tag") => map.next_value()?,
15706                    _ => return Err(de::Error::missing_field(".tag"))
15707                };
15708                let value = match tag {
15709                    "async_job_id" => {
15710                        match map.next_key()? {
15711                            Some("async_job_id") => MembersAddLaunchV2Result::AsyncJobId(map.next_value()?),
15712                            None => return Err(de::Error::missing_field("async_job_id")),
15713                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
15714                        }
15715                    }
15716                    "complete" => {
15717                        match map.next_key()? {
15718                            Some("complete") => MembersAddLaunchV2Result::Complete(map.next_value()?),
15719                            None => return Err(de::Error::missing_field("complete")),
15720                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
15721                        }
15722                    }
15723                    _ => MembersAddLaunchV2Result::Other,
15724                };
15725                crate::eat_json_fields(&mut map)?;
15726                Ok(value)
15727            }
15728        }
15729        const VARIANTS: &[&str] = &["async_job_id",
15730                                    "complete",
15731                                    "other"];
15732        deserializer.deserialize_struct("MembersAddLaunchV2Result", VARIANTS, EnumVisitor)
15733    }
15734}
15735
15736impl ::serde::ser::Serialize for MembersAddLaunchV2Result {
15737    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
15738        // union serializer
15739        use serde::ser::SerializeStruct;
15740        match self {
15741            MembersAddLaunchV2Result::AsyncJobId(x) => {
15742                // primitive
15743                let mut s = serializer.serialize_struct("MembersAddLaunchV2Result", 2)?;
15744                s.serialize_field(".tag", "async_job_id")?;
15745                s.serialize_field("async_job_id", x)?;
15746                s.end()
15747            }
15748            MembersAddLaunchV2Result::Complete(x) => {
15749                // primitive
15750                let mut s = serializer.serialize_struct("MembersAddLaunchV2Result", 2)?;
15751                s.serialize_field(".tag", "complete")?;
15752                s.serialize_field("complete", x)?;
15753                s.end()
15754            }
15755            MembersAddLaunchV2Result::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
15756        }
15757    }
15758}
15759
15760// union extends crate::types::dbx_async::LaunchResultBase
15761impl From<crate::types::dbx_async::LaunchResultBase> for MembersAddLaunchV2Result {
15762    fn from(parent: crate::types::dbx_async::LaunchResultBase) -> Self {
15763        match parent {
15764            crate::types::dbx_async::LaunchResultBase::AsyncJobId(x) => MembersAddLaunchV2Result::AsyncJobId(x),
15765        }
15766    }
15767}
15768#[derive(Debug, Clone, PartialEq, Eq)]
15769#[non_exhaustive] // structs may have more fields added in the future.
15770pub struct MembersAddV2Arg {
15771    /// Details of new members to be added to the team.
15772    pub new_members: Vec<MemberAddV2Arg>,
15773    /// Whether to force the add to happen asynchronously.
15774    pub force_async: bool,
15775}
15776
15777impl MembersAddV2Arg {
15778    pub fn new(new_members: Vec<MemberAddV2Arg>) -> Self {
15779        MembersAddV2Arg {
15780            new_members,
15781            force_async: false,
15782        }
15783    }
15784
15785    pub fn with_force_async(mut self, value: bool) -> Self {
15786        self.force_async = value;
15787        self
15788    }
15789}
15790
15791const MEMBERS_ADD_V2_ARG_FIELDS: &[&str] = &["new_members",
15792                                             "force_async"];
15793impl MembersAddV2Arg {
15794    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
15795        map: V,
15796    ) -> Result<MembersAddV2Arg, V::Error> {
15797        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
15798    }
15799
15800    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
15801        mut map: V,
15802        optional: bool,
15803    ) -> Result<Option<MembersAddV2Arg>, V::Error> {
15804        let mut field_new_members = None;
15805        let mut field_force_async = None;
15806        let mut nothing = true;
15807        while let Some(key) = map.next_key::<&str>()? {
15808            nothing = false;
15809            match key {
15810                "new_members" => {
15811                    if field_new_members.is_some() {
15812                        return Err(::serde::de::Error::duplicate_field("new_members"));
15813                    }
15814                    field_new_members = Some(map.next_value()?);
15815                }
15816                "force_async" => {
15817                    if field_force_async.is_some() {
15818                        return Err(::serde::de::Error::duplicate_field("force_async"));
15819                    }
15820                    field_force_async = Some(map.next_value()?);
15821                }
15822                _ => {
15823                    // unknown field allowed and ignored
15824                    map.next_value::<::serde_json::Value>()?;
15825                }
15826            }
15827        }
15828        if optional && nothing {
15829            return Ok(None);
15830        }
15831        let result = MembersAddV2Arg {
15832            new_members: field_new_members.ok_or_else(|| ::serde::de::Error::missing_field("new_members"))?,
15833            force_async: field_force_async.unwrap_or(false),
15834        };
15835        Ok(Some(result))
15836    }
15837
15838    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
15839        &self,
15840        s: &mut S::SerializeStruct,
15841    ) -> Result<(), S::Error> {
15842        use serde::ser::SerializeStruct;
15843        s.serialize_field("new_members", &self.new_members)?;
15844        if self.force_async {
15845            s.serialize_field("force_async", &self.force_async)?;
15846        }
15847        Ok(())
15848    }
15849}
15850
15851impl<'de> ::serde::de::Deserialize<'de> for MembersAddV2Arg {
15852    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
15853        // struct deserializer
15854        use serde::de::{MapAccess, Visitor};
15855        struct StructVisitor;
15856        impl<'de> Visitor<'de> for StructVisitor {
15857            type Value = MembersAddV2Arg;
15858            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
15859                f.write_str("a MembersAddV2Arg struct")
15860            }
15861            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
15862                MembersAddV2Arg::internal_deserialize(map)
15863            }
15864        }
15865        deserializer.deserialize_struct("MembersAddV2Arg", MEMBERS_ADD_V2_ARG_FIELDS, StructVisitor)
15866    }
15867}
15868
15869impl ::serde::ser::Serialize for MembersAddV2Arg {
15870    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
15871        // struct serializer
15872        use serde::ser::SerializeStruct;
15873        let mut s = serializer.serialize_struct("MembersAddV2Arg", 2)?;
15874        self.internal_serialize::<S>(&mut s)?;
15875        s.end()
15876    }
15877}
15878
15879// struct extends MembersAddArgBase
15880impl From<MembersAddV2Arg> for MembersAddArgBase {
15881    fn from(subtype: MembersAddV2Arg) -> Self {
15882        Self {
15883            force_async: subtype.force_async,
15884        }
15885    }
15886}
15887#[derive(Debug, Clone, PartialEq, Eq)]
15888#[non_exhaustive] // structs may have more fields added in the future.
15889pub struct MembersDataTransferArg {
15890    /// Identity of user to remove/suspend/have their files moved.
15891    pub user: UserSelectorArg,
15892    /// Files from the deleted member account will be transferred to this user.
15893    pub transfer_dest_id: UserSelectorArg,
15894    /// Errors during the transfer process will be sent via email to this user.
15895    pub transfer_admin_id: UserSelectorArg,
15896}
15897
15898impl MembersDataTransferArg {
15899    pub fn new(
15900        user: UserSelectorArg,
15901        transfer_dest_id: UserSelectorArg,
15902        transfer_admin_id: UserSelectorArg,
15903    ) -> Self {
15904        MembersDataTransferArg {
15905            user,
15906            transfer_dest_id,
15907            transfer_admin_id,
15908        }
15909    }
15910}
15911
15912const MEMBERS_DATA_TRANSFER_ARG_FIELDS: &[&str] = &["user",
15913                                                    "transfer_dest_id",
15914                                                    "transfer_admin_id"];
15915impl MembersDataTransferArg {
15916    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
15917        map: V,
15918    ) -> Result<MembersDataTransferArg, V::Error> {
15919        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
15920    }
15921
15922    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
15923        mut map: V,
15924        optional: bool,
15925    ) -> Result<Option<MembersDataTransferArg>, V::Error> {
15926        let mut field_user = None;
15927        let mut field_transfer_dest_id = None;
15928        let mut field_transfer_admin_id = None;
15929        let mut nothing = true;
15930        while let Some(key) = map.next_key::<&str>()? {
15931            nothing = false;
15932            match key {
15933                "user" => {
15934                    if field_user.is_some() {
15935                        return Err(::serde::de::Error::duplicate_field("user"));
15936                    }
15937                    field_user = Some(map.next_value()?);
15938                }
15939                "transfer_dest_id" => {
15940                    if field_transfer_dest_id.is_some() {
15941                        return Err(::serde::de::Error::duplicate_field("transfer_dest_id"));
15942                    }
15943                    field_transfer_dest_id = Some(map.next_value()?);
15944                }
15945                "transfer_admin_id" => {
15946                    if field_transfer_admin_id.is_some() {
15947                        return Err(::serde::de::Error::duplicate_field("transfer_admin_id"));
15948                    }
15949                    field_transfer_admin_id = Some(map.next_value()?);
15950                }
15951                _ => {
15952                    // unknown field allowed and ignored
15953                    map.next_value::<::serde_json::Value>()?;
15954                }
15955            }
15956        }
15957        if optional && nothing {
15958            return Ok(None);
15959        }
15960        let result = MembersDataTransferArg {
15961            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
15962            transfer_dest_id: field_transfer_dest_id.ok_or_else(|| ::serde::de::Error::missing_field("transfer_dest_id"))?,
15963            transfer_admin_id: field_transfer_admin_id.ok_or_else(|| ::serde::de::Error::missing_field("transfer_admin_id"))?,
15964        };
15965        Ok(Some(result))
15966    }
15967
15968    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
15969        &self,
15970        s: &mut S::SerializeStruct,
15971    ) -> Result<(), S::Error> {
15972        use serde::ser::SerializeStruct;
15973        s.serialize_field("user", &self.user)?;
15974        s.serialize_field("transfer_dest_id", &self.transfer_dest_id)?;
15975        s.serialize_field("transfer_admin_id", &self.transfer_admin_id)?;
15976        Ok(())
15977    }
15978}
15979
15980impl<'de> ::serde::de::Deserialize<'de> for MembersDataTransferArg {
15981    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
15982        // struct deserializer
15983        use serde::de::{MapAccess, Visitor};
15984        struct StructVisitor;
15985        impl<'de> Visitor<'de> for StructVisitor {
15986            type Value = MembersDataTransferArg;
15987            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
15988                f.write_str("a MembersDataTransferArg struct")
15989            }
15990            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
15991                MembersDataTransferArg::internal_deserialize(map)
15992            }
15993        }
15994        deserializer.deserialize_struct("MembersDataTransferArg", MEMBERS_DATA_TRANSFER_ARG_FIELDS, StructVisitor)
15995    }
15996}
15997
15998impl ::serde::ser::Serialize for MembersDataTransferArg {
15999    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
16000        // struct serializer
16001        use serde::ser::SerializeStruct;
16002        let mut s = serializer.serialize_struct("MembersDataTransferArg", 3)?;
16003        self.internal_serialize::<S>(&mut s)?;
16004        s.end()
16005    }
16006}
16007
16008// struct extends MembersDeactivateBaseArg
16009impl From<MembersDataTransferArg> for MembersDeactivateBaseArg {
16010    fn from(subtype: MembersDataTransferArg) -> Self {
16011        Self {
16012            user: subtype.user,
16013        }
16014    }
16015}
16016#[derive(Debug, Clone, PartialEq, Eq)]
16017#[non_exhaustive] // structs may have more fields added in the future.
16018pub struct MembersDeactivateArg {
16019    /// Identity of user to remove/suspend/have their files moved.
16020    pub user: UserSelectorArg,
16021    /// If provided, controls if the user's data will be deleted on their linked devices.
16022    pub wipe_data: bool,
16023}
16024
16025impl MembersDeactivateArg {
16026    pub fn new(user: UserSelectorArg) -> Self {
16027        MembersDeactivateArg {
16028            user,
16029            wipe_data: true,
16030        }
16031    }
16032
16033    pub fn with_wipe_data(mut self, value: bool) -> Self {
16034        self.wipe_data = value;
16035        self
16036    }
16037}
16038
16039const MEMBERS_DEACTIVATE_ARG_FIELDS: &[&str] = &["user",
16040                                                 "wipe_data"];
16041impl MembersDeactivateArg {
16042    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
16043        map: V,
16044    ) -> Result<MembersDeactivateArg, V::Error> {
16045        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
16046    }
16047
16048    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
16049        mut map: V,
16050        optional: bool,
16051    ) -> Result<Option<MembersDeactivateArg>, V::Error> {
16052        let mut field_user = None;
16053        let mut field_wipe_data = None;
16054        let mut nothing = true;
16055        while let Some(key) = map.next_key::<&str>()? {
16056            nothing = false;
16057            match key {
16058                "user" => {
16059                    if field_user.is_some() {
16060                        return Err(::serde::de::Error::duplicate_field("user"));
16061                    }
16062                    field_user = Some(map.next_value()?);
16063                }
16064                "wipe_data" => {
16065                    if field_wipe_data.is_some() {
16066                        return Err(::serde::de::Error::duplicate_field("wipe_data"));
16067                    }
16068                    field_wipe_data = Some(map.next_value()?);
16069                }
16070                _ => {
16071                    // unknown field allowed and ignored
16072                    map.next_value::<::serde_json::Value>()?;
16073                }
16074            }
16075        }
16076        if optional && nothing {
16077            return Ok(None);
16078        }
16079        let result = MembersDeactivateArg {
16080            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
16081            wipe_data: field_wipe_data.unwrap_or(true),
16082        };
16083        Ok(Some(result))
16084    }
16085
16086    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
16087        &self,
16088        s: &mut S::SerializeStruct,
16089    ) -> Result<(), S::Error> {
16090        use serde::ser::SerializeStruct;
16091        s.serialize_field("user", &self.user)?;
16092        if !self.wipe_data {
16093            s.serialize_field("wipe_data", &self.wipe_data)?;
16094        }
16095        Ok(())
16096    }
16097}
16098
16099impl<'de> ::serde::de::Deserialize<'de> for MembersDeactivateArg {
16100    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
16101        // struct deserializer
16102        use serde::de::{MapAccess, Visitor};
16103        struct StructVisitor;
16104        impl<'de> Visitor<'de> for StructVisitor {
16105            type Value = MembersDeactivateArg;
16106            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
16107                f.write_str("a MembersDeactivateArg struct")
16108            }
16109            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
16110                MembersDeactivateArg::internal_deserialize(map)
16111            }
16112        }
16113        deserializer.deserialize_struct("MembersDeactivateArg", MEMBERS_DEACTIVATE_ARG_FIELDS, StructVisitor)
16114    }
16115}
16116
16117impl ::serde::ser::Serialize for MembersDeactivateArg {
16118    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
16119        // struct serializer
16120        use serde::ser::SerializeStruct;
16121        let mut s = serializer.serialize_struct("MembersDeactivateArg", 2)?;
16122        self.internal_serialize::<S>(&mut s)?;
16123        s.end()
16124    }
16125}
16126
16127// struct extends MembersDeactivateBaseArg
16128impl From<MembersDeactivateArg> for MembersDeactivateBaseArg {
16129    fn from(subtype: MembersDeactivateArg) -> Self {
16130        Self {
16131            user: subtype.user,
16132        }
16133    }
16134}
16135/// Exactly one of team_member_id, email, or external_id must be provided to identify the user
16136/// account.
16137#[derive(Debug, Clone, PartialEq, Eq)]
16138#[non_exhaustive] // structs may have more fields added in the future.
16139pub struct MembersDeactivateBaseArg {
16140    /// Identity of user to remove/suspend/have their files moved.
16141    pub user: UserSelectorArg,
16142}
16143
16144impl MembersDeactivateBaseArg {
16145    pub fn new(user: UserSelectorArg) -> Self {
16146        MembersDeactivateBaseArg {
16147            user,
16148        }
16149    }
16150}
16151
16152const MEMBERS_DEACTIVATE_BASE_ARG_FIELDS: &[&str] = &["user"];
16153impl MembersDeactivateBaseArg {
16154    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
16155        map: V,
16156    ) -> Result<MembersDeactivateBaseArg, V::Error> {
16157        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
16158    }
16159
16160    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
16161        mut map: V,
16162        optional: bool,
16163    ) -> Result<Option<MembersDeactivateBaseArg>, V::Error> {
16164        let mut field_user = None;
16165        let mut nothing = true;
16166        while let Some(key) = map.next_key::<&str>()? {
16167            nothing = false;
16168            match key {
16169                "user" => {
16170                    if field_user.is_some() {
16171                        return Err(::serde::de::Error::duplicate_field("user"));
16172                    }
16173                    field_user = Some(map.next_value()?);
16174                }
16175                _ => {
16176                    // unknown field allowed and ignored
16177                    map.next_value::<::serde_json::Value>()?;
16178                }
16179            }
16180        }
16181        if optional && nothing {
16182            return Ok(None);
16183        }
16184        let result = MembersDeactivateBaseArg {
16185            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
16186        };
16187        Ok(Some(result))
16188    }
16189
16190    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
16191        &self,
16192        s: &mut S::SerializeStruct,
16193    ) -> Result<(), S::Error> {
16194        use serde::ser::SerializeStruct;
16195        s.serialize_field("user", &self.user)?;
16196        Ok(())
16197    }
16198}
16199
16200impl<'de> ::serde::de::Deserialize<'de> for MembersDeactivateBaseArg {
16201    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
16202        // struct deserializer
16203        use serde::de::{MapAccess, Visitor};
16204        struct StructVisitor;
16205        impl<'de> Visitor<'de> for StructVisitor {
16206            type Value = MembersDeactivateBaseArg;
16207            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
16208                f.write_str("a MembersDeactivateBaseArg struct")
16209            }
16210            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
16211                MembersDeactivateBaseArg::internal_deserialize(map)
16212            }
16213        }
16214        deserializer.deserialize_struct("MembersDeactivateBaseArg", MEMBERS_DEACTIVATE_BASE_ARG_FIELDS, StructVisitor)
16215    }
16216}
16217
16218impl ::serde::ser::Serialize for MembersDeactivateBaseArg {
16219    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
16220        // struct serializer
16221        use serde::ser::SerializeStruct;
16222        let mut s = serializer.serialize_struct("MembersDeactivateBaseArg", 1)?;
16223        self.internal_serialize::<S>(&mut s)?;
16224        s.end()
16225    }
16226}
16227
16228#[derive(Debug, Clone, PartialEq, Eq)]
16229#[non_exhaustive] // variants may be added in the future
16230pub enum MembersDeactivateError {
16231    /// No matching user found. The provided team_member_id, email, or external_id does not exist on
16232    /// this team.
16233    UserNotFound,
16234    /// The user is not a member of the team.
16235    UserNotInTeam,
16236    /// Catch-all used for unrecognized values returned from the server. Encountering this value
16237    /// typically indicates that this SDK version is out of date.
16238    Other,
16239}
16240
16241impl<'de> ::serde::de::Deserialize<'de> for MembersDeactivateError {
16242    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
16243        // union deserializer
16244        use serde::de::{self, MapAccess, Visitor};
16245        struct EnumVisitor;
16246        impl<'de> Visitor<'de> for EnumVisitor {
16247            type Value = MembersDeactivateError;
16248            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
16249                f.write_str("a MembersDeactivateError structure")
16250            }
16251            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
16252                let tag: &str = match map.next_key()? {
16253                    Some(".tag") => map.next_value()?,
16254                    _ => return Err(de::Error::missing_field(".tag"))
16255                };
16256                let value = match tag {
16257                    "user_not_found" => MembersDeactivateError::UserNotFound,
16258                    "user_not_in_team" => MembersDeactivateError::UserNotInTeam,
16259                    _ => MembersDeactivateError::Other,
16260                };
16261                crate::eat_json_fields(&mut map)?;
16262                Ok(value)
16263            }
16264        }
16265        const VARIANTS: &[&str] = &["user_not_found",
16266                                    "user_not_in_team",
16267                                    "other"];
16268        deserializer.deserialize_struct("MembersDeactivateError", VARIANTS, EnumVisitor)
16269    }
16270}
16271
16272impl ::serde::ser::Serialize for MembersDeactivateError {
16273    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
16274        // union serializer
16275        use serde::ser::SerializeStruct;
16276        match self {
16277            MembersDeactivateError::UserNotFound => {
16278                // unit
16279                let mut s = serializer.serialize_struct("MembersDeactivateError", 1)?;
16280                s.serialize_field(".tag", "user_not_found")?;
16281                s.end()
16282            }
16283            MembersDeactivateError::UserNotInTeam => {
16284                // unit
16285                let mut s = serializer.serialize_struct("MembersDeactivateError", 1)?;
16286                s.serialize_field(".tag", "user_not_in_team")?;
16287                s.end()
16288            }
16289            MembersDeactivateError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
16290        }
16291    }
16292}
16293
16294impl ::std::error::Error for MembersDeactivateError {
16295}
16296
16297impl ::std::fmt::Display for MembersDeactivateError {
16298    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
16299        match self {
16300            MembersDeactivateError::UserNotFound => f.write_str("No matching user found. The provided team_member_id, email, or external_id does not exist on this team."),
16301            MembersDeactivateError::UserNotInTeam => f.write_str("The user is not a member of the team."),
16302            _ => write!(f, "{:?}", *self),
16303        }
16304    }
16305}
16306
16307// union extends UserSelectorError
16308impl From<UserSelectorError> for MembersDeactivateError {
16309    fn from(parent: UserSelectorError) -> Self {
16310        match parent {
16311            UserSelectorError::UserNotFound => MembersDeactivateError::UserNotFound,
16312        }
16313    }
16314}
16315#[derive(Debug, Clone, PartialEq, Eq)]
16316#[non_exhaustive] // structs may have more fields added in the future.
16317pub struct MembersDeleteProfilePhotoArg {
16318    /// Identity of the user whose profile photo will be deleted.
16319    pub user: UserSelectorArg,
16320}
16321
16322impl MembersDeleteProfilePhotoArg {
16323    pub fn new(user: UserSelectorArg) -> Self {
16324        MembersDeleteProfilePhotoArg {
16325            user,
16326        }
16327    }
16328}
16329
16330const MEMBERS_DELETE_PROFILE_PHOTO_ARG_FIELDS: &[&str] = &["user"];
16331impl MembersDeleteProfilePhotoArg {
16332    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
16333        map: V,
16334    ) -> Result<MembersDeleteProfilePhotoArg, V::Error> {
16335        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
16336    }
16337
16338    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
16339        mut map: V,
16340        optional: bool,
16341    ) -> Result<Option<MembersDeleteProfilePhotoArg>, V::Error> {
16342        let mut field_user = None;
16343        let mut nothing = true;
16344        while let Some(key) = map.next_key::<&str>()? {
16345            nothing = false;
16346            match key {
16347                "user" => {
16348                    if field_user.is_some() {
16349                        return Err(::serde::de::Error::duplicate_field("user"));
16350                    }
16351                    field_user = Some(map.next_value()?);
16352                }
16353                _ => {
16354                    // unknown field allowed and ignored
16355                    map.next_value::<::serde_json::Value>()?;
16356                }
16357            }
16358        }
16359        if optional && nothing {
16360            return Ok(None);
16361        }
16362        let result = MembersDeleteProfilePhotoArg {
16363            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
16364        };
16365        Ok(Some(result))
16366    }
16367
16368    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
16369        &self,
16370        s: &mut S::SerializeStruct,
16371    ) -> Result<(), S::Error> {
16372        use serde::ser::SerializeStruct;
16373        s.serialize_field("user", &self.user)?;
16374        Ok(())
16375    }
16376}
16377
16378impl<'de> ::serde::de::Deserialize<'de> for MembersDeleteProfilePhotoArg {
16379    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
16380        // struct deserializer
16381        use serde::de::{MapAccess, Visitor};
16382        struct StructVisitor;
16383        impl<'de> Visitor<'de> for StructVisitor {
16384            type Value = MembersDeleteProfilePhotoArg;
16385            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
16386                f.write_str("a MembersDeleteProfilePhotoArg struct")
16387            }
16388            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
16389                MembersDeleteProfilePhotoArg::internal_deserialize(map)
16390            }
16391        }
16392        deserializer.deserialize_struct("MembersDeleteProfilePhotoArg", MEMBERS_DELETE_PROFILE_PHOTO_ARG_FIELDS, StructVisitor)
16393    }
16394}
16395
16396impl ::serde::ser::Serialize for MembersDeleteProfilePhotoArg {
16397    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
16398        // struct serializer
16399        use serde::ser::SerializeStruct;
16400        let mut s = serializer.serialize_struct("MembersDeleteProfilePhotoArg", 1)?;
16401        self.internal_serialize::<S>(&mut s)?;
16402        s.end()
16403    }
16404}
16405
16406#[derive(Debug, Clone, PartialEq, Eq)]
16407#[non_exhaustive] // variants may be added in the future
16408pub enum MembersDeleteProfilePhotoError {
16409    /// No matching user found. The provided team_member_id, email, or external_id does not exist on
16410    /// this team.
16411    UserNotFound,
16412    /// The user is not a member of the team.
16413    UserNotInTeam,
16414    /// Modifying deleted users is not allowed.
16415    SetProfileDisallowed,
16416    /// Catch-all used for unrecognized values returned from the server. Encountering this value
16417    /// typically indicates that this SDK version is out of date.
16418    Other,
16419}
16420
16421impl<'de> ::serde::de::Deserialize<'de> for MembersDeleteProfilePhotoError {
16422    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
16423        // union deserializer
16424        use serde::de::{self, MapAccess, Visitor};
16425        struct EnumVisitor;
16426        impl<'de> Visitor<'de> for EnumVisitor {
16427            type Value = MembersDeleteProfilePhotoError;
16428            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
16429                f.write_str("a MembersDeleteProfilePhotoError structure")
16430            }
16431            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
16432                let tag: &str = match map.next_key()? {
16433                    Some(".tag") => map.next_value()?,
16434                    _ => return Err(de::Error::missing_field(".tag"))
16435                };
16436                let value = match tag {
16437                    "user_not_found" => MembersDeleteProfilePhotoError::UserNotFound,
16438                    "user_not_in_team" => MembersDeleteProfilePhotoError::UserNotInTeam,
16439                    "set_profile_disallowed" => MembersDeleteProfilePhotoError::SetProfileDisallowed,
16440                    _ => MembersDeleteProfilePhotoError::Other,
16441                };
16442                crate::eat_json_fields(&mut map)?;
16443                Ok(value)
16444            }
16445        }
16446        const VARIANTS: &[&str] = &["user_not_found",
16447                                    "user_not_in_team",
16448                                    "set_profile_disallowed",
16449                                    "other"];
16450        deserializer.deserialize_struct("MembersDeleteProfilePhotoError", VARIANTS, EnumVisitor)
16451    }
16452}
16453
16454impl ::serde::ser::Serialize for MembersDeleteProfilePhotoError {
16455    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
16456        // union serializer
16457        use serde::ser::SerializeStruct;
16458        match self {
16459            MembersDeleteProfilePhotoError::UserNotFound => {
16460                // unit
16461                let mut s = serializer.serialize_struct("MembersDeleteProfilePhotoError", 1)?;
16462                s.serialize_field(".tag", "user_not_found")?;
16463                s.end()
16464            }
16465            MembersDeleteProfilePhotoError::UserNotInTeam => {
16466                // unit
16467                let mut s = serializer.serialize_struct("MembersDeleteProfilePhotoError", 1)?;
16468                s.serialize_field(".tag", "user_not_in_team")?;
16469                s.end()
16470            }
16471            MembersDeleteProfilePhotoError::SetProfileDisallowed => {
16472                // unit
16473                let mut s = serializer.serialize_struct("MembersDeleteProfilePhotoError", 1)?;
16474                s.serialize_field(".tag", "set_profile_disallowed")?;
16475                s.end()
16476            }
16477            MembersDeleteProfilePhotoError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
16478        }
16479    }
16480}
16481
16482impl ::std::error::Error for MembersDeleteProfilePhotoError {
16483}
16484
16485impl ::std::fmt::Display for MembersDeleteProfilePhotoError {
16486    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
16487        match self {
16488            MembersDeleteProfilePhotoError::UserNotFound => f.write_str("No matching user found. The provided team_member_id, email, or external_id does not exist on this team."),
16489            MembersDeleteProfilePhotoError::UserNotInTeam => f.write_str("The user is not a member of the team."),
16490            MembersDeleteProfilePhotoError::SetProfileDisallowed => f.write_str("Modifying deleted users is not allowed."),
16491            _ => write!(f, "{:?}", *self),
16492        }
16493    }
16494}
16495
16496// union extends MemberSelectorError
16497impl From<MemberSelectorError> for MembersDeleteProfilePhotoError {
16498    fn from(parent: MemberSelectorError) -> Self {
16499        match parent {
16500            MemberSelectorError::UserNotFound => MembersDeleteProfilePhotoError::UserNotFound,
16501            MemberSelectorError::UserNotInTeam => MembersDeleteProfilePhotoError::UserNotInTeam,
16502        }
16503    }
16504}
16505/// Available TeamMemberRole for the connected team. To be used with
16506/// [`members_set_admin_permissions_v2()`](crate::team::members_set_admin_permissions_v2).
16507#[derive(Debug, Clone, PartialEq, Eq)]
16508#[non_exhaustive] // structs may have more fields added in the future.
16509pub struct MembersGetAvailableTeamMemberRolesResult {
16510    /// Available roles.
16511    pub roles: Vec<TeamMemberRole>,
16512}
16513
16514impl MembersGetAvailableTeamMemberRolesResult {
16515    pub fn new(roles: Vec<TeamMemberRole>) -> Self {
16516        MembersGetAvailableTeamMemberRolesResult {
16517            roles,
16518        }
16519    }
16520}
16521
16522const MEMBERS_GET_AVAILABLE_TEAM_MEMBER_ROLES_RESULT_FIELDS: &[&str] = &["roles"];
16523impl MembersGetAvailableTeamMemberRolesResult {
16524    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
16525        map: V,
16526    ) -> Result<MembersGetAvailableTeamMemberRolesResult, V::Error> {
16527        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
16528    }
16529
16530    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
16531        mut map: V,
16532        optional: bool,
16533    ) -> Result<Option<MembersGetAvailableTeamMemberRolesResult>, V::Error> {
16534        let mut field_roles = None;
16535        let mut nothing = true;
16536        while let Some(key) = map.next_key::<&str>()? {
16537            nothing = false;
16538            match key {
16539                "roles" => {
16540                    if field_roles.is_some() {
16541                        return Err(::serde::de::Error::duplicate_field("roles"));
16542                    }
16543                    field_roles = Some(map.next_value()?);
16544                }
16545                _ => {
16546                    // unknown field allowed and ignored
16547                    map.next_value::<::serde_json::Value>()?;
16548                }
16549            }
16550        }
16551        if optional && nothing {
16552            return Ok(None);
16553        }
16554        let result = MembersGetAvailableTeamMemberRolesResult {
16555            roles: field_roles.ok_or_else(|| ::serde::de::Error::missing_field("roles"))?,
16556        };
16557        Ok(Some(result))
16558    }
16559
16560    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
16561        &self,
16562        s: &mut S::SerializeStruct,
16563    ) -> Result<(), S::Error> {
16564        use serde::ser::SerializeStruct;
16565        s.serialize_field("roles", &self.roles)?;
16566        Ok(())
16567    }
16568}
16569
16570impl<'de> ::serde::de::Deserialize<'de> for MembersGetAvailableTeamMemberRolesResult {
16571    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
16572        // struct deserializer
16573        use serde::de::{MapAccess, Visitor};
16574        struct StructVisitor;
16575        impl<'de> Visitor<'de> for StructVisitor {
16576            type Value = MembersGetAvailableTeamMemberRolesResult;
16577            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
16578                f.write_str("a MembersGetAvailableTeamMemberRolesResult struct")
16579            }
16580            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
16581                MembersGetAvailableTeamMemberRolesResult::internal_deserialize(map)
16582            }
16583        }
16584        deserializer.deserialize_struct("MembersGetAvailableTeamMemberRolesResult", MEMBERS_GET_AVAILABLE_TEAM_MEMBER_ROLES_RESULT_FIELDS, StructVisitor)
16585    }
16586}
16587
16588impl ::serde::ser::Serialize for MembersGetAvailableTeamMemberRolesResult {
16589    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
16590        // struct serializer
16591        use serde::ser::SerializeStruct;
16592        let mut s = serializer.serialize_struct("MembersGetAvailableTeamMemberRolesResult", 1)?;
16593        self.internal_serialize::<S>(&mut s)?;
16594        s.end()
16595    }
16596}
16597
16598#[derive(Debug, Clone, PartialEq, Eq)]
16599#[non_exhaustive] // structs may have more fields added in the future.
16600pub struct MembersGetInfoArgs {
16601    /// List of team members.
16602    pub members: Vec<UserSelectorArg>,
16603}
16604
16605impl MembersGetInfoArgs {
16606    pub fn new(members: Vec<UserSelectorArg>) -> Self {
16607        MembersGetInfoArgs {
16608            members,
16609        }
16610    }
16611}
16612
16613const MEMBERS_GET_INFO_ARGS_FIELDS: &[&str] = &["members"];
16614impl MembersGetInfoArgs {
16615    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
16616        map: V,
16617    ) -> Result<MembersGetInfoArgs, V::Error> {
16618        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
16619    }
16620
16621    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
16622        mut map: V,
16623        optional: bool,
16624    ) -> Result<Option<MembersGetInfoArgs>, V::Error> {
16625        let mut field_members = None;
16626        let mut nothing = true;
16627        while let Some(key) = map.next_key::<&str>()? {
16628            nothing = false;
16629            match key {
16630                "members" => {
16631                    if field_members.is_some() {
16632                        return Err(::serde::de::Error::duplicate_field("members"));
16633                    }
16634                    field_members = Some(map.next_value()?);
16635                }
16636                _ => {
16637                    // unknown field allowed and ignored
16638                    map.next_value::<::serde_json::Value>()?;
16639                }
16640            }
16641        }
16642        if optional && nothing {
16643            return Ok(None);
16644        }
16645        let result = MembersGetInfoArgs {
16646            members: field_members.ok_or_else(|| ::serde::de::Error::missing_field("members"))?,
16647        };
16648        Ok(Some(result))
16649    }
16650
16651    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
16652        &self,
16653        s: &mut S::SerializeStruct,
16654    ) -> Result<(), S::Error> {
16655        use serde::ser::SerializeStruct;
16656        s.serialize_field("members", &self.members)?;
16657        Ok(())
16658    }
16659}
16660
16661impl<'de> ::serde::de::Deserialize<'de> for MembersGetInfoArgs {
16662    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
16663        // struct deserializer
16664        use serde::de::{MapAccess, Visitor};
16665        struct StructVisitor;
16666        impl<'de> Visitor<'de> for StructVisitor {
16667            type Value = MembersGetInfoArgs;
16668            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
16669                f.write_str("a MembersGetInfoArgs struct")
16670            }
16671            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
16672                MembersGetInfoArgs::internal_deserialize(map)
16673            }
16674        }
16675        deserializer.deserialize_struct("MembersGetInfoArgs", MEMBERS_GET_INFO_ARGS_FIELDS, StructVisitor)
16676    }
16677}
16678
16679impl ::serde::ser::Serialize for MembersGetInfoArgs {
16680    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
16681        // struct serializer
16682        use serde::ser::SerializeStruct;
16683        let mut s = serializer.serialize_struct("MembersGetInfoArgs", 1)?;
16684        self.internal_serialize::<S>(&mut s)?;
16685        s.end()
16686    }
16687}
16688
16689
16690#[derive(Debug, Clone, PartialEq, Eq)]
16691#[non_exhaustive] // variants may be added in the future
16692pub enum MembersGetInfoError {
16693    /// Catch-all used for unrecognized values returned from the server. Encountering this value
16694    /// typically indicates that this SDK version is out of date.
16695    Other,
16696}
16697
16698impl<'de> ::serde::de::Deserialize<'de> for MembersGetInfoError {
16699    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
16700        // union deserializer
16701        use serde::de::{self, MapAccess, Visitor};
16702        struct EnumVisitor;
16703        impl<'de> Visitor<'de> for EnumVisitor {
16704            type Value = MembersGetInfoError;
16705            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
16706                f.write_str("a MembersGetInfoError structure")
16707            }
16708            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
16709                let tag: &str = match map.next_key()? {
16710                    Some(".tag") => map.next_value()?,
16711                    _ => return Err(de::Error::missing_field(".tag"))
16712                };
16713                // open enum with no defined variants
16714                let _ = tag;
16715                crate::eat_json_fields(&mut map)?;
16716                Ok(MembersGetInfoError::Other)
16717            }
16718        }
16719        const VARIANTS: &[&str] = &["other"];
16720        deserializer.deserialize_struct("MembersGetInfoError", VARIANTS, EnumVisitor)
16721    }
16722}
16723
16724impl ::serde::ser::Serialize for MembersGetInfoError {
16725    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
16726        // union serializer
16727        #![allow(unused_variables)]
16728        Err(::serde::ser::Error::custom("cannot serialize an open union with no defined variants"))
16729    }
16730}
16731
16732impl ::std::error::Error for MembersGetInfoError {
16733}
16734
16735impl ::std::fmt::Display for MembersGetInfoError {
16736    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
16737        write!(f, "{:?}", *self)
16738    }
16739}
16740
16741/// Describes a result obtained for a single user whose id was specified in the parameter of
16742/// [`members_get_info()`](crate::team::members_get_info).
16743#[derive(Debug, Clone, PartialEq, Eq)]
16744pub enum MembersGetInfoItem {
16745    /// An ID that was provided as a parameter to
16746    /// [`members_get_info()`](crate::team::members_get_info) or
16747    /// [`members_get_info_v2()`](crate::team::members_get_info_v2), and did not match a
16748    /// corresponding user. This might be a team_member_id, an email, or an external ID, depending
16749    /// on how the method was called.
16750    IdNotFound(String),
16751    /// Info about a team member.
16752    MemberInfo(TeamMemberInfo),
16753}
16754
16755impl<'de> ::serde::de::Deserialize<'de> for MembersGetInfoItem {
16756    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
16757        // union deserializer
16758        use serde::de::{self, MapAccess, Visitor};
16759        struct EnumVisitor;
16760        impl<'de> Visitor<'de> for EnumVisitor {
16761            type Value = MembersGetInfoItem;
16762            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
16763                f.write_str("a MembersGetInfoItem structure")
16764            }
16765            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
16766                let tag: &str = match map.next_key()? {
16767                    Some(".tag") => map.next_value()?,
16768                    _ => return Err(de::Error::missing_field(".tag"))
16769                };
16770                let value = match tag {
16771                    "id_not_found" => {
16772                        match map.next_key()? {
16773                            Some("id_not_found") => MembersGetInfoItem::IdNotFound(map.next_value()?),
16774                            None => return Err(de::Error::missing_field("id_not_found")),
16775                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
16776                        }
16777                    }
16778                    "member_info" => MembersGetInfoItem::MemberInfo(TeamMemberInfo::internal_deserialize(&mut map)?),
16779                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
16780                };
16781                crate::eat_json_fields(&mut map)?;
16782                Ok(value)
16783            }
16784        }
16785        const VARIANTS: &[&str] = &["id_not_found",
16786                                    "member_info"];
16787        deserializer.deserialize_struct("MembersGetInfoItem", VARIANTS, EnumVisitor)
16788    }
16789}
16790
16791impl ::serde::ser::Serialize for MembersGetInfoItem {
16792    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
16793        // union serializer
16794        use serde::ser::SerializeStruct;
16795        match self {
16796            MembersGetInfoItem::IdNotFound(x) => {
16797                // primitive
16798                let mut s = serializer.serialize_struct("MembersGetInfoItem", 2)?;
16799                s.serialize_field(".tag", "id_not_found")?;
16800                s.serialize_field("id_not_found", x)?;
16801                s.end()
16802            }
16803            MembersGetInfoItem::MemberInfo(x) => {
16804                // struct
16805                let mut s = serializer.serialize_struct("MembersGetInfoItem", 3)?;
16806                s.serialize_field(".tag", "member_info")?;
16807                x.internal_serialize::<S>(&mut s)?;
16808                s.end()
16809            }
16810        }
16811    }
16812}
16813
16814// union extends MembersGetInfoItemBase
16815impl From<MembersGetInfoItemBase> for MembersGetInfoItem {
16816    fn from(parent: MembersGetInfoItemBase) -> Self {
16817        match parent {
16818            MembersGetInfoItemBase::IdNotFound(x) => MembersGetInfoItem::IdNotFound(x),
16819        }
16820    }
16821}
16822#[derive(Debug, Clone, PartialEq, Eq)]
16823pub enum MembersGetInfoItemBase {
16824    /// An ID that was provided as a parameter to
16825    /// [`members_get_info()`](crate::team::members_get_info) or
16826    /// [`members_get_info_v2()`](crate::team::members_get_info_v2), and did not match a
16827    /// corresponding user. This might be a team_member_id, an email, or an external ID, depending
16828    /// on how the method was called.
16829    IdNotFound(String),
16830}
16831
16832impl<'de> ::serde::de::Deserialize<'de> for MembersGetInfoItemBase {
16833    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
16834        // union deserializer
16835        use serde::de::{self, MapAccess, Visitor};
16836        struct EnumVisitor;
16837        impl<'de> Visitor<'de> for EnumVisitor {
16838            type Value = MembersGetInfoItemBase;
16839            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
16840                f.write_str("a MembersGetInfoItemBase structure")
16841            }
16842            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
16843                let tag: &str = match map.next_key()? {
16844                    Some(".tag") => map.next_value()?,
16845                    _ => return Err(de::Error::missing_field(".tag"))
16846                };
16847                let value = match tag {
16848                    "id_not_found" => {
16849                        match map.next_key()? {
16850                            Some("id_not_found") => MembersGetInfoItemBase::IdNotFound(map.next_value()?),
16851                            None => return Err(de::Error::missing_field("id_not_found")),
16852                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
16853                        }
16854                    }
16855                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
16856                };
16857                crate::eat_json_fields(&mut map)?;
16858                Ok(value)
16859            }
16860        }
16861        const VARIANTS: &[&str] = &["id_not_found"];
16862        deserializer.deserialize_struct("MembersGetInfoItemBase", VARIANTS, EnumVisitor)
16863    }
16864}
16865
16866impl ::serde::ser::Serialize for MembersGetInfoItemBase {
16867    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
16868        // union serializer
16869        use serde::ser::SerializeStruct;
16870        match self {
16871            MembersGetInfoItemBase::IdNotFound(x) => {
16872                // primitive
16873                let mut s = serializer.serialize_struct("MembersGetInfoItemBase", 2)?;
16874                s.serialize_field(".tag", "id_not_found")?;
16875                s.serialize_field("id_not_found", x)?;
16876                s.end()
16877            }
16878        }
16879    }
16880}
16881
16882/// Describes a result obtained for a single user whose id was specified in the parameter of
16883/// [`members_get_info_v2()`](crate::team::members_get_info_v2).
16884#[derive(Debug, Clone, PartialEq, Eq)]
16885#[non_exhaustive] // variants may be added in the future
16886pub enum MembersGetInfoItemV2 {
16887    /// An ID that was provided as a parameter to
16888    /// [`members_get_info()`](crate::team::members_get_info) or
16889    /// [`members_get_info_v2()`](crate::team::members_get_info_v2), and did not match a
16890    /// corresponding user. This might be a team_member_id, an email, or an external ID, depending
16891    /// on how the method was called.
16892    IdNotFound(String),
16893    /// Info about a team member.
16894    MemberInfo(TeamMemberInfoV2),
16895    /// Catch-all used for unrecognized values returned from the server. Encountering this value
16896    /// typically indicates that this SDK version is out of date.
16897    Other,
16898}
16899
16900impl<'de> ::serde::de::Deserialize<'de> for MembersGetInfoItemV2 {
16901    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
16902        // union deserializer
16903        use serde::de::{self, MapAccess, Visitor};
16904        struct EnumVisitor;
16905        impl<'de> Visitor<'de> for EnumVisitor {
16906            type Value = MembersGetInfoItemV2;
16907            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
16908                f.write_str("a MembersGetInfoItemV2 structure")
16909            }
16910            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
16911                let tag: &str = match map.next_key()? {
16912                    Some(".tag") => map.next_value()?,
16913                    _ => return Err(de::Error::missing_field(".tag"))
16914                };
16915                let value = match tag {
16916                    "id_not_found" => {
16917                        match map.next_key()? {
16918                            Some("id_not_found") => MembersGetInfoItemV2::IdNotFound(map.next_value()?),
16919                            None => return Err(de::Error::missing_field("id_not_found")),
16920                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
16921                        }
16922                    }
16923                    "member_info" => MembersGetInfoItemV2::MemberInfo(TeamMemberInfoV2::internal_deserialize(&mut map)?),
16924                    _ => MembersGetInfoItemV2::Other,
16925                };
16926                crate::eat_json_fields(&mut map)?;
16927                Ok(value)
16928            }
16929        }
16930        const VARIANTS: &[&str] = &["id_not_found",
16931                                    "member_info",
16932                                    "other"];
16933        deserializer.deserialize_struct("MembersGetInfoItemV2", VARIANTS, EnumVisitor)
16934    }
16935}
16936
16937impl ::serde::ser::Serialize for MembersGetInfoItemV2 {
16938    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
16939        // union serializer
16940        use serde::ser::SerializeStruct;
16941        match self {
16942            MembersGetInfoItemV2::IdNotFound(x) => {
16943                // primitive
16944                let mut s = serializer.serialize_struct("MembersGetInfoItemV2", 2)?;
16945                s.serialize_field(".tag", "id_not_found")?;
16946                s.serialize_field("id_not_found", x)?;
16947                s.end()
16948            }
16949            MembersGetInfoItemV2::MemberInfo(x) => {
16950                // struct
16951                let mut s = serializer.serialize_struct("MembersGetInfoItemV2", 3)?;
16952                s.serialize_field(".tag", "member_info")?;
16953                x.internal_serialize::<S>(&mut s)?;
16954                s.end()
16955            }
16956            MembersGetInfoItemV2::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
16957        }
16958    }
16959}
16960
16961// union extends MembersGetInfoItemBase
16962impl From<MembersGetInfoItemBase> for MembersGetInfoItemV2 {
16963    fn from(parent: MembersGetInfoItemBase) -> Self {
16964        match parent {
16965            MembersGetInfoItemBase::IdNotFound(x) => MembersGetInfoItemV2::IdNotFound(x),
16966        }
16967    }
16968}
16969#[derive(Debug, Clone, PartialEq, Eq)]
16970#[non_exhaustive] // structs may have more fields added in the future.
16971pub struct MembersGetInfoV2Arg {
16972    /// List of team members.
16973    pub members: Vec<UserSelectorArg>,
16974}
16975
16976impl MembersGetInfoV2Arg {
16977    pub fn new(members: Vec<UserSelectorArg>) -> Self {
16978        MembersGetInfoV2Arg {
16979            members,
16980        }
16981    }
16982}
16983
16984const MEMBERS_GET_INFO_V2_ARG_FIELDS: &[&str] = &["members"];
16985impl MembersGetInfoV2Arg {
16986    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
16987        map: V,
16988    ) -> Result<MembersGetInfoV2Arg, V::Error> {
16989        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
16990    }
16991
16992    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
16993        mut map: V,
16994        optional: bool,
16995    ) -> Result<Option<MembersGetInfoV2Arg>, V::Error> {
16996        let mut field_members = None;
16997        let mut nothing = true;
16998        while let Some(key) = map.next_key::<&str>()? {
16999            nothing = false;
17000            match key {
17001                "members" => {
17002                    if field_members.is_some() {
17003                        return Err(::serde::de::Error::duplicate_field("members"));
17004                    }
17005                    field_members = Some(map.next_value()?);
17006                }
17007                _ => {
17008                    // unknown field allowed and ignored
17009                    map.next_value::<::serde_json::Value>()?;
17010                }
17011            }
17012        }
17013        if optional && nothing {
17014            return Ok(None);
17015        }
17016        let result = MembersGetInfoV2Arg {
17017            members: field_members.ok_or_else(|| ::serde::de::Error::missing_field("members"))?,
17018        };
17019        Ok(Some(result))
17020    }
17021
17022    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
17023        &self,
17024        s: &mut S::SerializeStruct,
17025    ) -> Result<(), S::Error> {
17026        use serde::ser::SerializeStruct;
17027        s.serialize_field("members", &self.members)?;
17028        Ok(())
17029    }
17030}
17031
17032impl<'de> ::serde::de::Deserialize<'de> for MembersGetInfoV2Arg {
17033    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
17034        // struct deserializer
17035        use serde::de::{MapAccess, Visitor};
17036        struct StructVisitor;
17037        impl<'de> Visitor<'de> for StructVisitor {
17038            type Value = MembersGetInfoV2Arg;
17039            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
17040                f.write_str("a MembersGetInfoV2Arg struct")
17041            }
17042            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
17043                MembersGetInfoV2Arg::internal_deserialize(map)
17044            }
17045        }
17046        deserializer.deserialize_struct("MembersGetInfoV2Arg", MEMBERS_GET_INFO_V2_ARG_FIELDS, StructVisitor)
17047    }
17048}
17049
17050impl ::serde::ser::Serialize for MembersGetInfoV2Arg {
17051    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
17052        // struct serializer
17053        use serde::ser::SerializeStruct;
17054        let mut s = serializer.serialize_struct("MembersGetInfoV2Arg", 1)?;
17055        self.internal_serialize::<S>(&mut s)?;
17056        s.end()
17057    }
17058}
17059
17060#[derive(Debug, Clone, PartialEq, Eq)]
17061#[non_exhaustive] // structs may have more fields added in the future.
17062pub struct MembersGetInfoV2Result {
17063    /// List of team members info.
17064    pub members_info: Vec<MembersGetInfoItemV2>,
17065}
17066
17067impl MembersGetInfoV2Result {
17068    pub fn new(members_info: Vec<MembersGetInfoItemV2>) -> Self {
17069        MembersGetInfoV2Result {
17070            members_info,
17071        }
17072    }
17073}
17074
17075const MEMBERS_GET_INFO_V2_RESULT_FIELDS: &[&str] = &["members_info"];
17076impl MembersGetInfoV2Result {
17077    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
17078        map: V,
17079    ) -> Result<MembersGetInfoV2Result, V::Error> {
17080        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
17081    }
17082
17083    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
17084        mut map: V,
17085        optional: bool,
17086    ) -> Result<Option<MembersGetInfoV2Result>, V::Error> {
17087        let mut field_members_info = None;
17088        let mut nothing = true;
17089        while let Some(key) = map.next_key::<&str>()? {
17090            nothing = false;
17091            match key {
17092                "members_info" => {
17093                    if field_members_info.is_some() {
17094                        return Err(::serde::de::Error::duplicate_field("members_info"));
17095                    }
17096                    field_members_info = Some(map.next_value()?);
17097                }
17098                _ => {
17099                    // unknown field allowed and ignored
17100                    map.next_value::<::serde_json::Value>()?;
17101                }
17102            }
17103        }
17104        if optional && nothing {
17105            return Ok(None);
17106        }
17107        let result = MembersGetInfoV2Result {
17108            members_info: field_members_info.ok_or_else(|| ::serde::de::Error::missing_field("members_info"))?,
17109        };
17110        Ok(Some(result))
17111    }
17112
17113    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
17114        &self,
17115        s: &mut S::SerializeStruct,
17116    ) -> Result<(), S::Error> {
17117        use serde::ser::SerializeStruct;
17118        s.serialize_field("members_info", &self.members_info)?;
17119        Ok(())
17120    }
17121}
17122
17123impl<'de> ::serde::de::Deserialize<'de> for MembersGetInfoV2Result {
17124    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
17125        // struct deserializer
17126        use serde::de::{MapAccess, Visitor};
17127        struct StructVisitor;
17128        impl<'de> Visitor<'de> for StructVisitor {
17129            type Value = MembersGetInfoV2Result;
17130            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
17131                f.write_str("a MembersGetInfoV2Result struct")
17132            }
17133            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
17134                MembersGetInfoV2Result::internal_deserialize(map)
17135            }
17136        }
17137        deserializer.deserialize_struct("MembersGetInfoV2Result", MEMBERS_GET_INFO_V2_RESULT_FIELDS, StructVisitor)
17138    }
17139}
17140
17141impl ::serde::ser::Serialize for MembersGetInfoV2Result {
17142    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
17143        // struct serializer
17144        use serde::ser::SerializeStruct;
17145        let mut s = serializer.serialize_struct("MembersGetInfoV2Result", 1)?;
17146        self.internal_serialize::<S>(&mut s)?;
17147        s.end()
17148    }
17149}
17150
17151#[derive(Debug, Clone, PartialEq, Eq)]
17152#[non_exhaustive] // structs may have more fields added in the future.
17153pub struct MembersInfo {
17154    /// Team member IDs of the users under this hold.
17155    pub team_member_ids: Vec<crate::types::team_common::TeamMemberId>,
17156    /// The number of permanently deleted users that were under this hold.
17157    pub permanently_deleted_users: u64,
17158}
17159
17160impl MembersInfo {
17161    pub fn new(
17162        team_member_ids: Vec<crate::types::team_common::TeamMemberId>,
17163        permanently_deleted_users: u64,
17164    ) -> Self {
17165        MembersInfo {
17166            team_member_ids,
17167            permanently_deleted_users,
17168        }
17169    }
17170}
17171
17172const MEMBERS_INFO_FIELDS: &[&str] = &["team_member_ids",
17173                                       "permanently_deleted_users"];
17174impl MembersInfo {
17175    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
17176        map: V,
17177    ) -> Result<MembersInfo, V::Error> {
17178        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
17179    }
17180
17181    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
17182        mut map: V,
17183        optional: bool,
17184    ) -> Result<Option<MembersInfo>, V::Error> {
17185        let mut field_team_member_ids = None;
17186        let mut field_permanently_deleted_users = None;
17187        let mut nothing = true;
17188        while let Some(key) = map.next_key::<&str>()? {
17189            nothing = false;
17190            match key {
17191                "team_member_ids" => {
17192                    if field_team_member_ids.is_some() {
17193                        return Err(::serde::de::Error::duplicate_field("team_member_ids"));
17194                    }
17195                    field_team_member_ids = Some(map.next_value()?);
17196                }
17197                "permanently_deleted_users" => {
17198                    if field_permanently_deleted_users.is_some() {
17199                        return Err(::serde::de::Error::duplicate_field("permanently_deleted_users"));
17200                    }
17201                    field_permanently_deleted_users = Some(map.next_value()?);
17202                }
17203                _ => {
17204                    // unknown field allowed and ignored
17205                    map.next_value::<::serde_json::Value>()?;
17206                }
17207            }
17208        }
17209        if optional && nothing {
17210            return Ok(None);
17211        }
17212        let result = MembersInfo {
17213            team_member_ids: field_team_member_ids.ok_or_else(|| ::serde::de::Error::missing_field("team_member_ids"))?,
17214            permanently_deleted_users: field_permanently_deleted_users.ok_or_else(|| ::serde::de::Error::missing_field("permanently_deleted_users"))?,
17215        };
17216        Ok(Some(result))
17217    }
17218
17219    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
17220        &self,
17221        s: &mut S::SerializeStruct,
17222    ) -> Result<(), S::Error> {
17223        use serde::ser::SerializeStruct;
17224        s.serialize_field("team_member_ids", &self.team_member_ids)?;
17225        s.serialize_field("permanently_deleted_users", &self.permanently_deleted_users)?;
17226        Ok(())
17227    }
17228}
17229
17230impl<'de> ::serde::de::Deserialize<'de> for MembersInfo {
17231    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
17232        // struct deserializer
17233        use serde::de::{MapAccess, Visitor};
17234        struct StructVisitor;
17235        impl<'de> Visitor<'de> for StructVisitor {
17236            type Value = MembersInfo;
17237            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
17238                f.write_str("a MembersInfo struct")
17239            }
17240            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
17241                MembersInfo::internal_deserialize(map)
17242            }
17243        }
17244        deserializer.deserialize_struct("MembersInfo", MEMBERS_INFO_FIELDS, StructVisitor)
17245    }
17246}
17247
17248impl ::serde::ser::Serialize for MembersInfo {
17249    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
17250        // struct serializer
17251        use serde::ser::SerializeStruct;
17252        let mut s = serializer.serialize_struct("MembersInfo", 2)?;
17253        self.internal_serialize::<S>(&mut s)?;
17254        s.end()
17255    }
17256}
17257
17258#[derive(Debug, Clone, PartialEq, Eq)]
17259#[non_exhaustive] // structs may have more fields added in the future.
17260pub struct MembersListArg {
17261    /// Number of results to return per call.
17262    pub limit: u32,
17263    /// Whether to return removed members.
17264    pub include_removed: bool,
17265}
17266
17267impl Default for MembersListArg {
17268    fn default() -> Self {
17269        MembersListArg {
17270            limit: 1000,
17271            include_removed: false,
17272        }
17273    }
17274}
17275
17276impl MembersListArg {
17277    pub fn with_limit(mut self, value: u32) -> Self {
17278        self.limit = value;
17279        self
17280    }
17281
17282    pub fn with_include_removed(mut self, value: bool) -> Self {
17283        self.include_removed = value;
17284        self
17285    }
17286}
17287
17288const MEMBERS_LIST_ARG_FIELDS: &[&str] = &["limit",
17289                                           "include_removed"];
17290impl MembersListArg {
17291    // no _opt deserializer
17292    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
17293        mut map: V,
17294    ) -> Result<MembersListArg, V::Error> {
17295        let mut field_limit = None;
17296        let mut field_include_removed = None;
17297        while let Some(key) = map.next_key::<&str>()? {
17298            match key {
17299                "limit" => {
17300                    if field_limit.is_some() {
17301                        return Err(::serde::de::Error::duplicate_field("limit"));
17302                    }
17303                    field_limit = Some(map.next_value()?);
17304                }
17305                "include_removed" => {
17306                    if field_include_removed.is_some() {
17307                        return Err(::serde::de::Error::duplicate_field("include_removed"));
17308                    }
17309                    field_include_removed = Some(map.next_value()?);
17310                }
17311                _ => {
17312                    // unknown field allowed and ignored
17313                    map.next_value::<::serde_json::Value>()?;
17314                }
17315            }
17316        }
17317        let result = MembersListArg {
17318            limit: field_limit.unwrap_or(1000),
17319            include_removed: field_include_removed.unwrap_or(false),
17320        };
17321        Ok(result)
17322    }
17323
17324    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
17325        &self,
17326        s: &mut S::SerializeStruct,
17327    ) -> Result<(), S::Error> {
17328        use serde::ser::SerializeStruct;
17329        if self.limit != 1000 {
17330            s.serialize_field("limit", &self.limit)?;
17331        }
17332        if self.include_removed {
17333            s.serialize_field("include_removed", &self.include_removed)?;
17334        }
17335        Ok(())
17336    }
17337}
17338
17339impl<'de> ::serde::de::Deserialize<'de> for MembersListArg {
17340    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
17341        // struct deserializer
17342        use serde::de::{MapAccess, Visitor};
17343        struct StructVisitor;
17344        impl<'de> Visitor<'de> for StructVisitor {
17345            type Value = MembersListArg;
17346            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
17347                f.write_str("a MembersListArg struct")
17348            }
17349            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
17350                MembersListArg::internal_deserialize(map)
17351            }
17352        }
17353        deserializer.deserialize_struct("MembersListArg", MEMBERS_LIST_ARG_FIELDS, StructVisitor)
17354    }
17355}
17356
17357impl ::serde::ser::Serialize for MembersListArg {
17358    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
17359        // struct serializer
17360        use serde::ser::SerializeStruct;
17361        let mut s = serializer.serialize_struct("MembersListArg", 2)?;
17362        self.internal_serialize::<S>(&mut s)?;
17363        s.end()
17364    }
17365}
17366
17367#[derive(Debug, Clone, PartialEq, Eq)]
17368#[non_exhaustive] // structs may have more fields added in the future.
17369pub struct MembersListContinueArg {
17370    /// Indicates from what point to get the next set of members.
17371    pub cursor: String,
17372}
17373
17374impl MembersListContinueArg {
17375    pub fn new(cursor: String) -> Self {
17376        MembersListContinueArg {
17377            cursor,
17378        }
17379    }
17380}
17381
17382const MEMBERS_LIST_CONTINUE_ARG_FIELDS: &[&str] = &["cursor"];
17383impl MembersListContinueArg {
17384    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
17385        map: V,
17386    ) -> Result<MembersListContinueArg, V::Error> {
17387        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
17388    }
17389
17390    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
17391        mut map: V,
17392        optional: bool,
17393    ) -> Result<Option<MembersListContinueArg>, V::Error> {
17394        let mut field_cursor = None;
17395        let mut nothing = true;
17396        while let Some(key) = map.next_key::<&str>()? {
17397            nothing = false;
17398            match key {
17399                "cursor" => {
17400                    if field_cursor.is_some() {
17401                        return Err(::serde::de::Error::duplicate_field("cursor"));
17402                    }
17403                    field_cursor = Some(map.next_value()?);
17404                }
17405                _ => {
17406                    // unknown field allowed and ignored
17407                    map.next_value::<::serde_json::Value>()?;
17408                }
17409            }
17410        }
17411        if optional && nothing {
17412            return Ok(None);
17413        }
17414        let result = MembersListContinueArg {
17415            cursor: field_cursor.ok_or_else(|| ::serde::de::Error::missing_field("cursor"))?,
17416        };
17417        Ok(Some(result))
17418    }
17419
17420    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
17421        &self,
17422        s: &mut S::SerializeStruct,
17423    ) -> Result<(), S::Error> {
17424        use serde::ser::SerializeStruct;
17425        s.serialize_field("cursor", &self.cursor)?;
17426        Ok(())
17427    }
17428}
17429
17430impl<'de> ::serde::de::Deserialize<'de> for MembersListContinueArg {
17431    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
17432        // struct deserializer
17433        use serde::de::{MapAccess, Visitor};
17434        struct StructVisitor;
17435        impl<'de> Visitor<'de> for StructVisitor {
17436            type Value = MembersListContinueArg;
17437            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
17438                f.write_str("a MembersListContinueArg struct")
17439            }
17440            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
17441                MembersListContinueArg::internal_deserialize(map)
17442            }
17443        }
17444        deserializer.deserialize_struct("MembersListContinueArg", MEMBERS_LIST_CONTINUE_ARG_FIELDS, StructVisitor)
17445    }
17446}
17447
17448impl ::serde::ser::Serialize for MembersListContinueArg {
17449    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
17450        // struct serializer
17451        use serde::ser::SerializeStruct;
17452        let mut s = serializer.serialize_struct("MembersListContinueArg", 1)?;
17453        self.internal_serialize::<S>(&mut s)?;
17454        s.end()
17455    }
17456}
17457
17458#[derive(Debug, Clone, PartialEq, Eq)]
17459#[non_exhaustive] // variants may be added in the future
17460pub enum MembersListContinueError {
17461    /// The cursor is invalid.
17462    InvalidCursor,
17463    /// Catch-all used for unrecognized values returned from the server. Encountering this value
17464    /// typically indicates that this SDK version is out of date.
17465    Other,
17466}
17467
17468impl<'de> ::serde::de::Deserialize<'de> for MembersListContinueError {
17469    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
17470        // union deserializer
17471        use serde::de::{self, MapAccess, Visitor};
17472        struct EnumVisitor;
17473        impl<'de> Visitor<'de> for EnumVisitor {
17474            type Value = MembersListContinueError;
17475            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
17476                f.write_str("a MembersListContinueError structure")
17477            }
17478            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
17479                let tag: &str = match map.next_key()? {
17480                    Some(".tag") => map.next_value()?,
17481                    _ => return Err(de::Error::missing_field(".tag"))
17482                };
17483                let value = match tag {
17484                    "invalid_cursor" => MembersListContinueError::InvalidCursor,
17485                    _ => MembersListContinueError::Other,
17486                };
17487                crate::eat_json_fields(&mut map)?;
17488                Ok(value)
17489            }
17490        }
17491        const VARIANTS: &[&str] = &["invalid_cursor",
17492                                    "other"];
17493        deserializer.deserialize_struct("MembersListContinueError", VARIANTS, EnumVisitor)
17494    }
17495}
17496
17497impl ::serde::ser::Serialize for MembersListContinueError {
17498    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
17499        // union serializer
17500        use serde::ser::SerializeStruct;
17501        match self {
17502            MembersListContinueError::InvalidCursor => {
17503                // unit
17504                let mut s = serializer.serialize_struct("MembersListContinueError", 1)?;
17505                s.serialize_field(".tag", "invalid_cursor")?;
17506                s.end()
17507            }
17508            MembersListContinueError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
17509        }
17510    }
17511}
17512
17513impl ::std::error::Error for MembersListContinueError {
17514}
17515
17516impl ::std::fmt::Display for MembersListContinueError {
17517    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
17518        match self {
17519            MembersListContinueError::InvalidCursor => f.write_str("The cursor is invalid."),
17520            _ => write!(f, "{:?}", *self),
17521        }
17522    }
17523}
17524
17525
17526#[derive(Debug, Clone, PartialEq, Eq)]
17527#[non_exhaustive] // variants may be added in the future
17528pub enum MembersListError {
17529    /// Catch-all used for unrecognized values returned from the server. Encountering this value
17530    /// typically indicates that this SDK version is out of date.
17531    Other,
17532}
17533
17534impl<'de> ::serde::de::Deserialize<'de> for MembersListError {
17535    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
17536        // union deserializer
17537        use serde::de::{self, MapAccess, Visitor};
17538        struct EnumVisitor;
17539        impl<'de> Visitor<'de> for EnumVisitor {
17540            type Value = MembersListError;
17541            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
17542                f.write_str("a MembersListError structure")
17543            }
17544            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
17545                let tag: &str = match map.next_key()? {
17546                    Some(".tag") => map.next_value()?,
17547                    _ => return Err(de::Error::missing_field(".tag"))
17548                };
17549                // open enum with no defined variants
17550                let _ = tag;
17551                crate::eat_json_fields(&mut map)?;
17552                Ok(MembersListError::Other)
17553            }
17554        }
17555        const VARIANTS: &[&str] = &["other"];
17556        deserializer.deserialize_struct("MembersListError", VARIANTS, EnumVisitor)
17557    }
17558}
17559
17560impl ::serde::ser::Serialize for MembersListError {
17561    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
17562        // union serializer
17563        #![allow(unused_variables)]
17564        Err(::serde::ser::Error::custom("cannot serialize an open union with no defined variants"))
17565    }
17566}
17567
17568impl ::std::error::Error for MembersListError {
17569}
17570
17571impl ::std::fmt::Display for MembersListError {
17572    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
17573        write!(f, "{:?}", *self)
17574    }
17575}
17576
17577#[derive(Debug, Clone, PartialEq, Eq)]
17578#[non_exhaustive] // structs may have more fields added in the future.
17579pub struct MembersListResult {
17580    /// List of team members.
17581    pub members: Vec<TeamMemberInfo>,
17582    /// Pass the cursor into [`members_list_continue()`](crate::team::members_list_continue) to
17583    /// obtain the additional members.
17584    pub cursor: String,
17585    /// Is true if there are additional team members that have not been returned yet. An additional
17586    /// call to [`members_list_continue()`](crate::team::members_list_continue) can retrieve them.
17587    pub has_more: bool,
17588}
17589
17590impl MembersListResult {
17591    pub fn new(members: Vec<TeamMemberInfo>, cursor: String, has_more: bool) -> Self {
17592        MembersListResult {
17593            members,
17594            cursor,
17595            has_more,
17596        }
17597    }
17598}
17599
17600const MEMBERS_LIST_RESULT_FIELDS: &[&str] = &["members",
17601                                              "cursor",
17602                                              "has_more"];
17603impl MembersListResult {
17604    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
17605        map: V,
17606    ) -> Result<MembersListResult, V::Error> {
17607        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
17608    }
17609
17610    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
17611        mut map: V,
17612        optional: bool,
17613    ) -> Result<Option<MembersListResult>, V::Error> {
17614        let mut field_members = None;
17615        let mut field_cursor = None;
17616        let mut field_has_more = None;
17617        let mut nothing = true;
17618        while let Some(key) = map.next_key::<&str>()? {
17619            nothing = false;
17620            match key {
17621                "members" => {
17622                    if field_members.is_some() {
17623                        return Err(::serde::de::Error::duplicate_field("members"));
17624                    }
17625                    field_members = Some(map.next_value()?);
17626                }
17627                "cursor" => {
17628                    if field_cursor.is_some() {
17629                        return Err(::serde::de::Error::duplicate_field("cursor"));
17630                    }
17631                    field_cursor = Some(map.next_value()?);
17632                }
17633                "has_more" => {
17634                    if field_has_more.is_some() {
17635                        return Err(::serde::de::Error::duplicate_field("has_more"));
17636                    }
17637                    field_has_more = Some(map.next_value()?);
17638                }
17639                _ => {
17640                    // unknown field allowed and ignored
17641                    map.next_value::<::serde_json::Value>()?;
17642                }
17643            }
17644        }
17645        if optional && nothing {
17646            return Ok(None);
17647        }
17648        let result = MembersListResult {
17649            members: field_members.ok_or_else(|| ::serde::de::Error::missing_field("members"))?,
17650            cursor: field_cursor.ok_or_else(|| ::serde::de::Error::missing_field("cursor"))?,
17651            has_more: field_has_more.ok_or_else(|| ::serde::de::Error::missing_field("has_more"))?,
17652        };
17653        Ok(Some(result))
17654    }
17655
17656    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
17657        &self,
17658        s: &mut S::SerializeStruct,
17659    ) -> Result<(), S::Error> {
17660        use serde::ser::SerializeStruct;
17661        s.serialize_field("members", &self.members)?;
17662        s.serialize_field("cursor", &self.cursor)?;
17663        s.serialize_field("has_more", &self.has_more)?;
17664        Ok(())
17665    }
17666}
17667
17668impl<'de> ::serde::de::Deserialize<'de> for MembersListResult {
17669    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
17670        // struct deserializer
17671        use serde::de::{MapAccess, Visitor};
17672        struct StructVisitor;
17673        impl<'de> Visitor<'de> for StructVisitor {
17674            type Value = MembersListResult;
17675            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
17676                f.write_str("a MembersListResult struct")
17677            }
17678            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
17679                MembersListResult::internal_deserialize(map)
17680            }
17681        }
17682        deserializer.deserialize_struct("MembersListResult", MEMBERS_LIST_RESULT_FIELDS, StructVisitor)
17683    }
17684}
17685
17686impl ::serde::ser::Serialize for MembersListResult {
17687    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
17688        // struct serializer
17689        use serde::ser::SerializeStruct;
17690        let mut s = serializer.serialize_struct("MembersListResult", 3)?;
17691        self.internal_serialize::<S>(&mut s)?;
17692        s.end()
17693    }
17694}
17695
17696#[derive(Debug, Clone, PartialEq, Eq)]
17697#[non_exhaustive] // structs may have more fields added in the future.
17698pub struct MembersListV2Result {
17699    /// List of team members.
17700    pub members: Vec<TeamMemberInfoV2>,
17701    /// Pass the cursor into [`members_list_continue_v2()`](crate::team::members_list_continue_v2)
17702    /// to obtain the additional members.
17703    pub cursor: String,
17704    /// Is true if there are additional team members that have not been returned yet. An additional
17705    /// call to [`members_list_continue_v2()`](crate::team::members_list_continue_v2) can retrieve
17706    /// them.
17707    pub has_more: bool,
17708}
17709
17710impl MembersListV2Result {
17711    pub fn new(members: Vec<TeamMemberInfoV2>, cursor: String, has_more: bool) -> Self {
17712        MembersListV2Result {
17713            members,
17714            cursor,
17715            has_more,
17716        }
17717    }
17718}
17719
17720const MEMBERS_LIST_V2_RESULT_FIELDS: &[&str] = &["members",
17721                                                 "cursor",
17722                                                 "has_more"];
17723impl MembersListV2Result {
17724    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
17725        map: V,
17726    ) -> Result<MembersListV2Result, V::Error> {
17727        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
17728    }
17729
17730    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
17731        mut map: V,
17732        optional: bool,
17733    ) -> Result<Option<MembersListV2Result>, V::Error> {
17734        let mut field_members = None;
17735        let mut field_cursor = None;
17736        let mut field_has_more = None;
17737        let mut nothing = true;
17738        while let Some(key) = map.next_key::<&str>()? {
17739            nothing = false;
17740            match key {
17741                "members" => {
17742                    if field_members.is_some() {
17743                        return Err(::serde::de::Error::duplicate_field("members"));
17744                    }
17745                    field_members = Some(map.next_value()?);
17746                }
17747                "cursor" => {
17748                    if field_cursor.is_some() {
17749                        return Err(::serde::de::Error::duplicate_field("cursor"));
17750                    }
17751                    field_cursor = Some(map.next_value()?);
17752                }
17753                "has_more" => {
17754                    if field_has_more.is_some() {
17755                        return Err(::serde::de::Error::duplicate_field("has_more"));
17756                    }
17757                    field_has_more = Some(map.next_value()?);
17758                }
17759                _ => {
17760                    // unknown field allowed and ignored
17761                    map.next_value::<::serde_json::Value>()?;
17762                }
17763            }
17764        }
17765        if optional && nothing {
17766            return Ok(None);
17767        }
17768        let result = MembersListV2Result {
17769            members: field_members.ok_or_else(|| ::serde::de::Error::missing_field("members"))?,
17770            cursor: field_cursor.ok_or_else(|| ::serde::de::Error::missing_field("cursor"))?,
17771            has_more: field_has_more.ok_or_else(|| ::serde::de::Error::missing_field("has_more"))?,
17772        };
17773        Ok(Some(result))
17774    }
17775
17776    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
17777        &self,
17778        s: &mut S::SerializeStruct,
17779    ) -> Result<(), S::Error> {
17780        use serde::ser::SerializeStruct;
17781        s.serialize_field("members", &self.members)?;
17782        s.serialize_field("cursor", &self.cursor)?;
17783        s.serialize_field("has_more", &self.has_more)?;
17784        Ok(())
17785    }
17786}
17787
17788impl<'de> ::serde::de::Deserialize<'de> for MembersListV2Result {
17789    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
17790        // struct deserializer
17791        use serde::de::{MapAccess, Visitor};
17792        struct StructVisitor;
17793        impl<'de> Visitor<'de> for StructVisitor {
17794            type Value = MembersListV2Result;
17795            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
17796                f.write_str("a MembersListV2Result struct")
17797            }
17798            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
17799                MembersListV2Result::internal_deserialize(map)
17800            }
17801        }
17802        deserializer.deserialize_struct("MembersListV2Result", MEMBERS_LIST_V2_RESULT_FIELDS, StructVisitor)
17803    }
17804}
17805
17806impl ::serde::ser::Serialize for MembersListV2Result {
17807    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
17808        // struct serializer
17809        use serde::ser::SerializeStruct;
17810        let mut s = serializer.serialize_struct("MembersListV2Result", 3)?;
17811        self.internal_serialize::<S>(&mut s)?;
17812        s.end()
17813    }
17814}
17815
17816/// Exactly one of team_member_id, email, or external_id must be provided to identify the user
17817/// account.
17818#[derive(Debug, Clone, PartialEq, Eq)]
17819#[non_exhaustive] // structs may have more fields added in the future.
17820pub struct MembersRecoverArg {
17821    /// Identity of user to recover.
17822    pub user: UserSelectorArg,
17823}
17824
17825impl MembersRecoverArg {
17826    pub fn new(user: UserSelectorArg) -> Self {
17827        MembersRecoverArg {
17828            user,
17829        }
17830    }
17831}
17832
17833const MEMBERS_RECOVER_ARG_FIELDS: &[&str] = &["user"];
17834impl MembersRecoverArg {
17835    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
17836        map: V,
17837    ) -> Result<MembersRecoverArg, V::Error> {
17838        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
17839    }
17840
17841    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
17842        mut map: V,
17843        optional: bool,
17844    ) -> Result<Option<MembersRecoverArg>, V::Error> {
17845        let mut field_user = None;
17846        let mut nothing = true;
17847        while let Some(key) = map.next_key::<&str>()? {
17848            nothing = false;
17849            match key {
17850                "user" => {
17851                    if field_user.is_some() {
17852                        return Err(::serde::de::Error::duplicate_field("user"));
17853                    }
17854                    field_user = Some(map.next_value()?);
17855                }
17856                _ => {
17857                    // unknown field allowed and ignored
17858                    map.next_value::<::serde_json::Value>()?;
17859                }
17860            }
17861        }
17862        if optional && nothing {
17863            return Ok(None);
17864        }
17865        let result = MembersRecoverArg {
17866            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
17867        };
17868        Ok(Some(result))
17869    }
17870
17871    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
17872        &self,
17873        s: &mut S::SerializeStruct,
17874    ) -> Result<(), S::Error> {
17875        use serde::ser::SerializeStruct;
17876        s.serialize_field("user", &self.user)?;
17877        Ok(())
17878    }
17879}
17880
17881impl<'de> ::serde::de::Deserialize<'de> for MembersRecoverArg {
17882    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
17883        // struct deserializer
17884        use serde::de::{MapAccess, Visitor};
17885        struct StructVisitor;
17886        impl<'de> Visitor<'de> for StructVisitor {
17887            type Value = MembersRecoverArg;
17888            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
17889                f.write_str("a MembersRecoverArg struct")
17890            }
17891            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
17892                MembersRecoverArg::internal_deserialize(map)
17893            }
17894        }
17895        deserializer.deserialize_struct("MembersRecoverArg", MEMBERS_RECOVER_ARG_FIELDS, StructVisitor)
17896    }
17897}
17898
17899impl ::serde::ser::Serialize for MembersRecoverArg {
17900    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
17901        // struct serializer
17902        use serde::ser::SerializeStruct;
17903        let mut s = serializer.serialize_struct("MembersRecoverArg", 1)?;
17904        self.internal_serialize::<S>(&mut s)?;
17905        s.end()
17906    }
17907}
17908
17909#[derive(Debug, Clone, PartialEq, Eq)]
17910#[non_exhaustive] // variants may be added in the future
17911pub enum MembersRecoverError {
17912    /// No matching user found. The provided team_member_id, email, or external_id does not exist on
17913    /// this team.
17914    UserNotFound,
17915    /// The user is not recoverable.
17916    UserUnrecoverable,
17917    /// The user is not a member of the team.
17918    UserNotInTeam,
17919    /// Team is full. The organization has no available licenses.
17920    TeamLicenseLimit,
17921    /// Catch-all used for unrecognized values returned from the server. Encountering this value
17922    /// typically indicates that this SDK version is out of date.
17923    Other,
17924}
17925
17926impl<'de> ::serde::de::Deserialize<'de> for MembersRecoverError {
17927    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
17928        // union deserializer
17929        use serde::de::{self, MapAccess, Visitor};
17930        struct EnumVisitor;
17931        impl<'de> Visitor<'de> for EnumVisitor {
17932            type Value = MembersRecoverError;
17933            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
17934                f.write_str("a MembersRecoverError structure")
17935            }
17936            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
17937                let tag: &str = match map.next_key()? {
17938                    Some(".tag") => map.next_value()?,
17939                    _ => return Err(de::Error::missing_field(".tag"))
17940                };
17941                let value = match tag {
17942                    "user_not_found" => MembersRecoverError::UserNotFound,
17943                    "user_unrecoverable" => MembersRecoverError::UserUnrecoverable,
17944                    "user_not_in_team" => MembersRecoverError::UserNotInTeam,
17945                    "team_license_limit" => MembersRecoverError::TeamLicenseLimit,
17946                    _ => MembersRecoverError::Other,
17947                };
17948                crate::eat_json_fields(&mut map)?;
17949                Ok(value)
17950            }
17951        }
17952        const VARIANTS: &[&str] = &["user_not_found",
17953                                    "user_unrecoverable",
17954                                    "user_not_in_team",
17955                                    "team_license_limit",
17956                                    "other"];
17957        deserializer.deserialize_struct("MembersRecoverError", VARIANTS, EnumVisitor)
17958    }
17959}
17960
17961impl ::serde::ser::Serialize for MembersRecoverError {
17962    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
17963        // union serializer
17964        use serde::ser::SerializeStruct;
17965        match self {
17966            MembersRecoverError::UserNotFound => {
17967                // unit
17968                let mut s = serializer.serialize_struct("MembersRecoverError", 1)?;
17969                s.serialize_field(".tag", "user_not_found")?;
17970                s.end()
17971            }
17972            MembersRecoverError::UserUnrecoverable => {
17973                // unit
17974                let mut s = serializer.serialize_struct("MembersRecoverError", 1)?;
17975                s.serialize_field(".tag", "user_unrecoverable")?;
17976                s.end()
17977            }
17978            MembersRecoverError::UserNotInTeam => {
17979                // unit
17980                let mut s = serializer.serialize_struct("MembersRecoverError", 1)?;
17981                s.serialize_field(".tag", "user_not_in_team")?;
17982                s.end()
17983            }
17984            MembersRecoverError::TeamLicenseLimit => {
17985                // unit
17986                let mut s = serializer.serialize_struct("MembersRecoverError", 1)?;
17987                s.serialize_field(".tag", "team_license_limit")?;
17988                s.end()
17989            }
17990            MembersRecoverError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
17991        }
17992    }
17993}
17994
17995impl ::std::error::Error for MembersRecoverError {
17996}
17997
17998impl ::std::fmt::Display for MembersRecoverError {
17999    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
18000        match self {
18001            MembersRecoverError::UserNotFound => f.write_str("No matching user found. The provided team_member_id, email, or external_id does not exist on this team."),
18002            MembersRecoverError::UserUnrecoverable => f.write_str("The user is not recoverable."),
18003            MembersRecoverError::UserNotInTeam => f.write_str("The user is not a member of the team."),
18004            MembersRecoverError::TeamLicenseLimit => f.write_str("Team is full. The organization has no available licenses."),
18005            _ => write!(f, "{:?}", *self),
18006        }
18007    }
18008}
18009
18010// union extends UserSelectorError
18011impl From<UserSelectorError> for MembersRecoverError {
18012    fn from(parent: UserSelectorError) -> Self {
18013        match parent {
18014            UserSelectorError::UserNotFound => MembersRecoverError::UserNotFound,
18015        }
18016    }
18017}
18018#[derive(Debug, Clone, PartialEq, Eq)]
18019#[non_exhaustive] // structs may have more fields added in the future.
18020pub struct MembersRemoveArg {
18021    /// Identity of user to remove/suspend/have their files moved.
18022    pub user: UserSelectorArg,
18023    /// If provided, controls if the user's data will be deleted on their linked devices.
18024    pub wipe_data: bool,
18025    /// If provided, files from the deleted member account will be transferred to this user.
18026    pub transfer_dest_id: Option<UserSelectorArg>,
18027    /// If provided, errors during the transfer process will be sent via email to this user. If the
18028    /// transfer_dest_id argument was provided, then this argument must be provided as well.
18029    pub transfer_admin_id: Option<UserSelectorArg>,
18030    /// Downgrade the member to a Basic account. The user will retain the email address associated
18031    /// with their Dropbox  account and data in their account that is not restricted to team
18032    /// members. In order to keep the account the argument `wipe_data` should be set to `false`.
18033    pub keep_account: bool,
18034    /// If provided, allows removed users to keep access to Dropbox folders (not Dropbox Paper
18035    /// folders) already explicitly shared with them (not via a group) when they are downgraded to a
18036    /// Basic account. Users will not retain access to folders that do not allow external sharing.
18037    /// In order to keep the sharing relationships, the arguments `wipe_data` should be set to
18038    /// `false` and `keep_account` should be set to `true`.
18039    pub retain_team_shares: bool,
18040}
18041
18042impl MembersRemoveArg {
18043    pub fn new(user: UserSelectorArg) -> Self {
18044        MembersRemoveArg {
18045            user,
18046            wipe_data: true,
18047            transfer_dest_id: None,
18048            transfer_admin_id: None,
18049            keep_account: false,
18050            retain_team_shares: false,
18051        }
18052    }
18053
18054    pub fn with_wipe_data(mut self, value: bool) -> Self {
18055        self.wipe_data = value;
18056        self
18057    }
18058
18059    pub fn with_transfer_dest_id(mut self, value: UserSelectorArg) -> Self {
18060        self.transfer_dest_id = Some(value);
18061        self
18062    }
18063
18064    pub fn with_transfer_admin_id(mut self, value: UserSelectorArg) -> Self {
18065        self.transfer_admin_id = Some(value);
18066        self
18067    }
18068
18069    pub fn with_keep_account(mut self, value: bool) -> Self {
18070        self.keep_account = value;
18071        self
18072    }
18073
18074    pub fn with_retain_team_shares(mut self, value: bool) -> Self {
18075        self.retain_team_shares = value;
18076        self
18077    }
18078}
18079
18080const MEMBERS_REMOVE_ARG_FIELDS: &[&str] = &["user",
18081                                             "wipe_data",
18082                                             "transfer_dest_id",
18083                                             "transfer_admin_id",
18084                                             "keep_account",
18085                                             "retain_team_shares"];
18086impl MembersRemoveArg {
18087    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
18088        map: V,
18089    ) -> Result<MembersRemoveArg, V::Error> {
18090        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
18091    }
18092
18093    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
18094        mut map: V,
18095        optional: bool,
18096    ) -> Result<Option<MembersRemoveArg>, V::Error> {
18097        let mut field_user = None;
18098        let mut field_wipe_data = None;
18099        let mut field_transfer_dest_id = None;
18100        let mut field_transfer_admin_id = None;
18101        let mut field_keep_account = None;
18102        let mut field_retain_team_shares = None;
18103        let mut nothing = true;
18104        while let Some(key) = map.next_key::<&str>()? {
18105            nothing = false;
18106            match key {
18107                "user" => {
18108                    if field_user.is_some() {
18109                        return Err(::serde::de::Error::duplicate_field("user"));
18110                    }
18111                    field_user = Some(map.next_value()?);
18112                }
18113                "wipe_data" => {
18114                    if field_wipe_data.is_some() {
18115                        return Err(::serde::de::Error::duplicate_field("wipe_data"));
18116                    }
18117                    field_wipe_data = Some(map.next_value()?);
18118                }
18119                "transfer_dest_id" => {
18120                    if field_transfer_dest_id.is_some() {
18121                        return Err(::serde::de::Error::duplicate_field("transfer_dest_id"));
18122                    }
18123                    field_transfer_dest_id = Some(map.next_value()?);
18124                }
18125                "transfer_admin_id" => {
18126                    if field_transfer_admin_id.is_some() {
18127                        return Err(::serde::de::Error::duplicate_field("transfer_admin_id"));
18128                    }
18129                    field_transfer_admin_id = Some(map.next_value()?);
18130                }
18131                "keep_account" => {
18132                    if field_keep_account.is_some() {
18133                        return Err(::serde::de::Error::duplicate_field("keep_account"));
18134                    }
18135                    field_keep_account = Some(map.next_value()?);
18136                }
18137                "retain_team_shares" => {
18138                    if field_retain_team_shares.is_some() {
18139                        return Err(::serde::de::Error::duplicate_field("retain_team_shares"));
18140                    }
18141                    field_retain_team_shares = Some(map.next_value()?);
18142                }
18143                _ => {
18144                    // unknown field allowed and ignored
18145                    map.next_value::<::serde_json::Value>()?;
18146                }
18147            }
18148        }
18149        if optional && nothing {
18150            return Ok(None);
18151        }
18152        let result = MembersRemoveArg {
18153            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
18154            wipe_data: field_wipe_data.unwrap_or(true),
18155            transfer_dest_id: field_transfer_dest_id.and_then(Option::flatten),
18156            transfer_admin_id: field_transfer_admin_id.and_then(Option::flatten),
18157            keep_account: field_keep_account.unwrap_or(false),
18158            retain_team_shares: field_retain_team_shares.unwrap_or(false),
18159        };
18160        Ok(Some(result))
18161    }
18162
18163    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
18164        &self,
18165        s: &mut S::SerializeStruct,
18166    ) -> Result<(), S::Error> {
18167        use serde::ser::SerializeStruct;
18168        s.serialize_field("user", &self.user)?;
18169        if !self.wipe_data {
18170            s.serialize_field("wipe_data", &self.wipe_data)?;
18171        }
18172        if let Some(val) = &self.transfer_dest_id {
18173            s.serialize_field("transfer_dest_id", val)?;
18174        }
18175        if let Some(val) = &self.transfer_admin_id {
18176            s.serialize_field("transfer_admin_id", val)?;
18177        }
18178        if self.keep_account {
18179            s.serialize_field("keep_account", &self.keep_account)?;
18180        }
18181        if self.retain_team_shares {
18182            s.serialize_field("retain_team_shares", &self.retain_team_shares)?;
18183        }
18184        Ok(())
18185    }
18186}
18187
18188impl<'de> ::serde::de::Deserialize<'de> for MembersRemoveArg {
18189    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
18190        // struct deserializer
18191        use serde::de::{MapAccess, Visitor};
18192        struct StructVisitor;
18193        impl<'de> Visitor<'de> for StructVisitor {
18194            type Value = MembersRemoveArg;
18195            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
18196                f.write_str("a MembersRemoveArg struct")
18197            }
18198            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
18199                MembersRemoveArg::internal_deserialize(map)
18200            }
18201        }
18202        deserializer.deserialize_struct("MembersRemoveArg", MEMBERS_REMOVE_ARG_FIELDS, StructVisitor)
18203    }
18204}
18205
18206impl ::serde::ser::Serialize for MembersRemoveArg {
18207    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
18208        // struct serializer
18209        use serde::ser::SerializeStruct;
18210        let mut s = serializer.serialize_struct("MembersRemoveArg", 6)?;
18211        self.internal_serialize::<S>(&mut s)?;
18212        s.end()
18213    }
18214}
18215
18216// struct extends MembersDeactivateArg
18217impl From<MembersRemoveArg> for MembersDeactivateArg {
18218    fn from(subtype: MembersRemoveArg) -> Self {
18219        Self {
18220            user: subtype.user,
18221            wipe_data: subtype.wipe_data,
18222        }
18223    }
18224}
18225#[derive(Debug, Clone, PartialEq, Eq)]
18226#[non_exhaustive] // variants may be added in the future
18227pub enum MembersRemoveError {
18228    /// No matching user found. The provided team_member_id, email, or external_id does not exist on
18229    /// this team.
18230    UserNotFound,
18231    /// The user is not a member of the team.
18232    UserNotInTeam,
18233    /// Expected removed user and transfer_dest user to be different.
18234    RemovedAndTransferDestShouldDiffer,
18235    /// Expected removed user and transfer_admin user to be different.
18236    RemovedAndTransferAdminShouldDiffer,
18237    /// No matching user found for the argument transfer_dest_id.
18238    TransferDestUserNotFound,
18239    /// The provided transfer_dest_id does not exist on this team.
18240    TransferDestUserNotInTeam,
18241    /// The provided transfer_admin_id does not exist on this team.
18242    TransferAdminUserNotInTeam,
18243    /// No matching user found for the argument transfer_admin_id.
18244    TransferAdminUserNotFound,
18245    /// The transfer_admin_id argument must be provided when file transfer is requested.
18246    UnspecifiedTransferAdminId,
18247    /// Specified transfer_admin user is not a team admin.
18248    TransferAdminIsNotAdmin,
18249    /// The recipient user's email is not verified.
18250    RecipientNotVerified,
18251    /// The user is the last admin of the team, so it cannot be removed from it.
18252    RemoveLastAdmin,
18253    /// Cannot keep account and transfer the data to another user at the same time.
18254    CannotKeepAccountAndTransfer,
18255    /// Cannot keep account and delete the data at the same time. To keep the account the argument
18256    /// wipe_data should be set to `false`.
18257    CannotKeepAccountAndDeleteData,
18258    /// The email address of the user is too long to be disabled.
18259    EmailAddressTooLongToBeDisabled,
18260    /// Cannot keep account of an invited user.
18261    CannotKeepInvitedUserAccount,
18262    /// Cannot retain team shares when the user's data is marked for deletion on their linked
18263    /// devices. The argument wipe_data should be set to `false`.
18264    CannotRetainSharesWhenDataWiped,
18265    /// The user's account must be kept in order to retain team shares. The argument keep_account
18266    /// should be set to `true`.
18267    CannotRetainSharesWhenNoAccountKept,
18268    /// Externally sharing files, folders, and links must be enabled in team settings in order to
18269    /// retain team shares for the user.
18270    CannotRetainSharesWhenTeamExternalSharingOff,
18271    /// Only a team admin, can convert this account to a Basic account.
18272    CannotKeepAccount,
18273    /// This user content is currently being held. To convert this member's account to a Basic
18274    /// account, you'll first need to remove them from the hold.
18275    CannotKeepAccountUnderLegalHold,
18276    /// To convert this member to a Basic account, they'll first need to sign in to Dropbox and
18277    /// agree to the terms of service.
18278    CannotKeepAccountRequiredToSignTos,
18279    /// Catch-all used for unrecognized values returned from the server. Encountering this value
18280    /// typically indicates that this SDK version is out of date.
18281    Other,
18282}
18283
18284impl<'de> ::serde::de::Deserialize<'de> for MembersRemoveError {
18285    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
18286        // union deserializer
18287        use serde::de::{self, MapAccess, Visitor};
18288        struct EnumVisitor;
18289        impl<'de> Visitor<'de> for EnumVisitor {
18290            type Value = MembersRemoveError;
18291            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
18292                f.write_str("a MembersRemoveError structure")
18293            }
18294            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
18295                let tag: &str = match map.next_key()? {
18296                    Some(".tag") => map.next_value()?,
18297                    _ => return Err(de::Error::missing_field(".tag"))
18298                };
18299                let value = match tag {
18300                    "user_not_found" => MembersRemoveError::UserNotFound,
18301                    "user_not_in_team" => MembersRemoveError::UserNotInTeam,
18302                    "removed_and_transfer_dest_should_differ" => MembersRemoveError::RemovedAndTransferDestShouldDiffer,
18303                    "removed_and_transfer_admin_should_differ" => MembersRemoveError::RemovedAndTransferAdminShouldDiffer,
18304                    "transfer_dest_user_not_found" => MembersRemoveError::TransferDestUserNotFound,
18305                    "transfer_dest_user_not_in_team" => MembersRemoveError::TransferDestUserNotInTeam,
18306                    "transfer_admin_user_not_in_team" => MembersRemoveError::TransferAdminUserNotInTeam,
18307                    "transfer_admin_user_not_found" => MembersRemoveError::TransferAdminUserNotFound,
18308                    "unspecified_transfer_admin_id" => MembersRemoveError::UnspecifiedTransferAdminId,
18309                    "transfer_admin_is_not_admin" => MembersRemoveError::TransferAdminIsNotAdmin,
18310                    "recipient_not_verified" => MembersRemoveError::RecipientNotVerified,
18311                    "remove_last_admin" => MembersRemoveError::RemoveLastAdmin,
18312                    "cannot_keep_account_and_transfer" => MembersRemoveError::CannotKeepAccountAndTransfer,
18313                    "cannot_keep_account_and_delete_data" => MembersRemoveError::CannotKeepAccountAndDeleteData,
18314                    "email_address_too_long_to_be_disabled" => MembersRemoveError::EmailAddressTooLongToBeDisabled,
18315                    "cannot_keep_invited_user_account" => MembersRemoveError::CannotKeepInvitedUserAccount,
18316                    "cannot_retain_shares_when_data_wiped" => MembersRemoveError::CannotRetainSharesWhenDataWiped,
18317                    "cannot_retain_shares_when_no_account_kept" => MembersRemoveError::CannotRetainSharesWhenNoAccountKept,
18318                    "cannot_retain_shares_when_team_external_sharing_off" => MembersRemoveError::CannotRetainSharesWhenTeamExternalSharingOff,
18319                    "cannot_keep_account" => MembersRemoveError::CannotKeepAccount,
18320                    "cannot_keep_account_under_legal_hold" => MembersRemoveError::CannotKeepAccountUnderLegalHold,
18321                    "cannot_keep_account_required_to_sign_tos" => MembersRemoveError::CannotKeepAccountRequiredToSignTos,
18322                    _ => MembersRemoveError::Other,
18323                };
18324                crate::eat_json_fields(&mut map)?;
18325                Ok(value)
18326            }
18327        }
18328        const VARIANTS: &[&str] = &["user_not_found",
18329                                    "user_not_in_team",
18330                                    "other",
18331                                    "removed_and_transfer_dest_should_differ",
18332                                    "removed_and_transfer_admin_should_differ",
18333                                    "transfer_dest_user_not_found",
18334                                    "transfer_dest_user_not_in_team",
18335                                    "transfer_admin_user_not_in_team",
18336                                    "transfer_admin_user_not_found",
18337                                    "unspecified_transfer_admin_id",
18338                                    "transfer_admin_is_not_admin",
18339                                    "recipient_not_verified",
18340                                    "remove_last_admin",
18341                                    "cannot_keep_account_and_transfer",
18342                                    "cannot_keep_account_and_delete_data",
18343                                    "email_address_too_long_to_be_disabled",
18344                                    "cannot_keep_invited_user_account",
18345                                    "cannot_retain_shares_when_data_wiped",
18346                                    "cannot_retain_shares_when_no_account_kept",
18347                                    "cannot_retain_shares_when_team_external_sharing_off",
18348                                    "cannot_keep_account",
18349                                    "cannot_keep_account_under_legal_hold",
18350                                    "cannot_keep_account_required_to_sign_tos"];
18351        deserializer.deserialize_struct("MembersRemoveError", VARIANTS, EnumVisitor)
18352    }
18353}
18354
18355impl ::serde::ser::Serialize for MembersRemoveError {
18356    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
18357        // union serializer
18358        use serde::ser::SerializeStruct;
18359        match self {
18360            MembersRemoveError::UserNotFound => {
18361                // unit
18362                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
18363                s.serialize_field(".tag", "user_not_found")?;
18364                s.end()
18365            }
18366            MembersRemoveError::UserNotInTeam => {
18367                // unit
18368                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
18369                s.serialize_field(".tag", "user_not_in_team")?;
18370                s.end()
18371            }
18372            MembersRemoveError::RemovedAndTransferDestShouldDiffer => {
18373                // unit
18374                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
18375                s.serialize_field(".tag", "removed_and_transfer_dest_should_differ")?;
18376                s.end()
18377            }
18378            MembersRemoveError::RemovedAndTransferAdminShouldDiffer => {
18379                // unit
18380                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
18381                s.serialize_field(".tag", "removed_and_transfer_admin_should_differ")?;
18382                s.end()
18383            }
18384            MembersRemoveError::TransferDestUserNotFound => {
18385                // unit
18386                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
18387                s.serialize_field(".tag", "transfer_dest_user_not_found")?;
18388                s.end()
18389            }
18390            MembersRemoveError::TransferDestUserNotInTeam => {
18391                // unit
18392                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
18393                s.serialize_field(".tag", "transfer_dest_user_not_in_team")?;
18394                s.end()
18395            }
18396            MembersRemoveError::TransferAdminUserNotInTeam => {
18397                // unit
18398                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
18399                s.serialize_field(".tag", "transfer_admin_user_not_in_team")?;
18400                s.end()
18401            }
18402            MembersRemoveError::TransferAdminUserNotFound => {
18403                // unit
18404                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
18405                s.serialize_field(".tag", "transfer_admin_user_not_found")?;
18406                s.end()
18407            }
18408            MembersRemoveError::UnspecifiedTransferAdminId => {
18409                // unit
18410                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
18411                s.serialize_field(".tag", "unspecified_transfer_admin_id")?;
18412                s.end()
18413            }
18414            MembersRemoveError::TransferAdminIsNotAdmin => {
18415                // unit
18416                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
18417                s.serialize_field(".tag", "transfer_admin_is_not_admin")?;
18418                s.end()
18419            }
18420            MembersRemoveError::RecipientNotVerified => {
18421                // unit
18422                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
18423                s.serialize_field(".tag", "recipient_not_verified")?;
18424                s.end()
18425            }
18426            MembersRemoveError::RemoveLastAdmin => {
18427                // unit
18428                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
18429                s.serialize_field(".tag", "remove_last_admin")?;
18430                s.end()
18431            }
18432            MembersRemoveError::CannotKeepAccountAndTransfer => {
18433                // unit
18434                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
18435                s.serialize_field(".tag", "cannot_keep_account_and_transfer")?;
18436                s.end()
18437            }
18438            MembersRemoveError::CannotKeepAccountAndDeleteData => {
18439                // unit
18440                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
18441                s.serialize_field(".tag", "cannot_keep_account_and_delete_data")?;
18442                s.end()
18443            }
18444            MembersRemoveError::EmailAddressTooLongToBeDisabled => {
18445                // unit
18446                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
18447                s.serialize_field(".tag", "email_address_too_long_to_be_disabled")?;
18448                s.end()
18449            }
18450            MembersRemoveError::CannotKeepInvitedUserAccount => {
18451                // unit
18452                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
18453                s.serialize_field(".tag", "cannot_keep_invited_user_account")?;
18454                s.end()
18455            }
18456            MembersRemoveError::CannotRetainSharesWhenDataWiped => {
18457                // unit
18458                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
18459                s.serialize_field(".tag", "cannot_retain_shares_when_data_wiped")?;
18460                s.end()
18461            }
18462            MembersRemoveError::CannotRetainSharesWhenNoAccountKept => {
18463                // unit
18464                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
18465                s.serialize_field(".tag", "cannot_retain_shares_when_no_account_kept")?;
18466                s.end()
18467            }
18468            MembersRemoveError::CannotRetainSharesWhenTeamExternalSharingOff => {
18469                // unit
18470                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
18471                s.serialize_field(".tag", "cannot_retain_shares_when_team_external_sharing_off")?;
18472                s.end()
18473            }
18474            MembersRemoveError::CannotKeepAccount => {
18475                // unit
18476                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
18477                s.serialize_field(".tag", "cannot_keep_account")?;
18478                s.end()
18479            }
18480            MembersRemoveError::CannotKeepAccountUnderLegalHold => {
18481                // unit
18482                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
18483                s.serialize_field(".tag", "cannot_keep_account_under_legal_hold")?;
18484                s.end()
18485            }
18486            MembersRemoveError::CannotKeepAccountRequiredToSignTos => {
18487                // unit
18488                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
18489                s.serialize_field(".tag", "cannot_keep_account_required_to_sign_tos")?;
18490                s.end()
18491            }
18492            MembersRemoveError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
18493        }
18494    }
18495}
18496
18497impl ::std::error::Error for MembersRemoveError {
18498}
18499
18500impl ::std::fmt::Display for MembersRemoveError {
18501    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
18502        match self {
18503            MembersRemoveError::UserNotFound => f.write_str("No matching user found. The provided team_member_id, email, or external_id does not exist on this team."),
18504            MembersRemoveError::UserNotInTeam => f.write_str("The user is not a member of the team."),
18505            MembersRemoveError::RemovedAndTransferDestShouldDiffer => f.write_str("Expected removed user and transfer_dest user to be different."),
18506            MembersRemoveError::RemovedAndTransferAdminShouldDiffer => f.write_str("Expected removed user and transfer_admin user to be different."),
18507            MembersRemoveError::TransferDestUserNotFound => f.write_str("No matching user found for the argument transfer_dest_id."),
18508            MembersRemoveError::TransferDestUserNotInTeam => f.write_str("The provided transfer_dest_id does not exist on this team."),
18509            MembersRemoveError::TransferAdminUserNotInTeam => f.write_str("The provided transfer_admin_id does not exist on this team."),
18510            MembersRemoveError::TransferAdminUserNotFound => f.write_str("No matching user found for the argument transfer_admin_id."),
18511            MembersRemoveError::UnspecifiedTransferAdminId => f.write_str("The transfer_admin_id argument must be provided when file transfer is requested."),
18512            MembersRemoveError::TransferAdminIsNotAdmin => f.write_str("Specified transfer_admin user is not a team admin."),
18513            MembersRemoveError::RecipientNotVerified => f.write_str("The recipient user's email is not verified."),
18514            MembersRemoveError::RemoveLastAdmin => f.write_str("The user is the last admin of the team, so it cannot be removed from it."),
18515            MembersRemoveError::CannotKeepAccountAndTransfer => f.write_str("Cannot keep account and transfer the data to another user at the same time."),
18516            MembersRemoveError::EmailAddressTooLongToBeDisabled => f.write_str("The email address of the user is too long to be disabled."),
18517            MembersRemoveError::CannotKeepInvitedUserAccount => f.write_str("Cannot keep account of an invited user."),
18518            MembersRemoveError::CannotRetainSharesWhenTeamExternalSharingOff => f.write_str("Externally sharing files, folders, and links must be enabled in team settings in order to retain team shares for the user."),
18519            MembersRemoveError::CannotKeepAccount => f.write_str("Only a team admin, can convert this account to a Basic account."),
18520            MembersRemoveError::CannotKeepAccountUnderLegalHold => f.write_str("This user content is currently being held. To convert this member's account to a Basic account, you'll first need to remove them from the hold."),
18521            MembersRemoveError::CannotKeepAccountRequiredToSignTos => f.write_str("To convert this member to a Basic account, they'll first need to sign in to Dropbox and agree to the terms of service."),
18522            _ => write!(f, "{:?}", *self),
18523        }
18524    }
18525}
18526
18527// union extends MembersTransferFilesError
18528impl From<MembersTransferFilesError> for MembersRemoveError {
18529    fn from(parent: MembersTransferFilesError) -> Self {
18530        match parent {
18531            MembersTransferFilesError::UserNotFound => MembersRemoveError::UserNotFound,
18532            MembersTransferFilesError::UserNotInTeam => MembersRemoveError::UserNotInTeam,
18533            MembersTransferFilesError::Other => MembersRemoveError::Other,
18534            MembersTransferFilesError::RemovedAndTransferDestShouldDiffer => MembersRemoveError::RemovedAndTransferDestShouldDiffer,
18535            MembersTransferFilesError::RemovedAndTransferAdminShouldDiffer => MembersRemoveError::RemovedAndTransferAdminShouldDiffer,
18536            MembersTransferFilesError::TransferDestUserNotFound => MembersRemoveError::TransferDestUserNotFound,
18537            MembersTransferFilesError::TransferDestUserNotInTeam => MembersRemoveError::TransferDestUserNotInTeam,
18538            MembersTransferFilesError::TransferAdminUserNotInTeam => MembersRemoveError::TransferAdminUserNotInTeam,
18539            MembersTransferFilesError::TransferAdminUserNotFound => MembersRemoveError::TransferAdminUserNotFound,
18540            MembersTransferFilesError::UnspecifiedTransferAdminId => MembersRemoveError::UnspecifiedTransferAdminId,
18541            MembersTransferFilesError::TransferAdminIsNotAdmin => MembersRemoveError::TransferAdminIsNotAdmin,
18542            MembersTransferFilesError::RecipientNotVerified => MembersRemoveError::RecipientNotVerified,
18543        }
18544    }
18545}
18546
18547#[derive(Debug, Clone, PartialEq, Eq)]
18548#[non_exhaustive] // variants may be added in the future
18549pub enum MembersSendWelcomeError {
18550    /// No matching user found. The provided team_member_id, email, or external_id does not exist on
18551    /// this team.
18552    UserNotFound,
18553    /// The user is not a member of the team.
18554    UserNotInTeam,
18555    /// Catch-all used for unrecognized values returned from the server. Encountering this value
18556    /// typically indicates that this SDK version is out of date.
18557    Other,
18558}
18559
18560impl<'de> ::serde::de::Deserialize<'de> for MembersSendWelcomeError {
18561    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
18562        // union deserializer
18563        use serde::de::{self, MapAccess, Visitor};
18564        struct EnumVisitor;
18565        impl<'de> Visitor<'de> for EnumVisitor {
18566            type Value = MembersSendWelcomeError;
18567            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
18568                f.write_str("a MembersSendWelcomeError structure")
18569            }
18570            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
18571                let tag: &str = match map.next_key()? {
18572                    Some(".tag") => map.next_value()?,
18573                    _ => return Err(de::Error::missing_field(".tag"))
18574                };
18575                let value = match tag {
18576                    "user_not_found" => MembersSendWelcomeError::UserNotFound,
18577                    "user_not_in_team" => MembersSendWelcomeError::UserNotInTeam,
18578                    _ => MembersSendWelcomeError::Other,
18579                };
18580                crate::eat_json_fields(&mut map)?;
18581                Ok(value)
18582            }
18583        }
18584        const VARIANTS: &[&str] = &["user_not_found",
18585                                    "user_not_in_team",
18586                                    "other"];
18587        deserializer.deserialize_struct("MembersSendWelcomeError", VARIANTS, EnumVisitor)
18588    }
18589}
18590
18591impl ::serde::ser::Serialize for MembersSendWelcomeError {
18592    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
18593        // union serializer
18594        use serde::ser::SerializeStruct;
18595        match self {
18596            MembersSendWelcomeError::UserNotFound => {
18597                // unit
18598                let mut s = serializer.serialize_struct("MembersSendWelcomeError", 1)?;
18599                s.serialize_field(".tag", "user_not_found")?;
18600                s.end()
18601            }
18602            MembersSendWelcomeError::UserNotInTeam => {
18603                // unit
18604                let mut s = serializer.serialize_struct("MembersSendWelcomeError", 1)?;
18605                s.serialize_field(".tag", "user_not_in_team")?;
18606                s.end()
18607            }
18608            MembersSendWelcomeError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
18609        }
18610    }
18611}
18612
18613impl ::std::error::Error for MembersSendWelcomeError {
18614}
18615
18616impl ::std::fmt::Display for MembersSendWelcomeError {
18617    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
18618        match self {
18619            MembersSendWelcomeError::UserNotFound => f.write_str("No matching user found. The provided team_member_id, email, or external_id does not exist on this team."),
18620            MembersSendWelcomeError::UserNotInTeam => f.write_str("The user is not a member of the team."),
18621            _ => write!(f, "{:?}", *self),
18622        }
18623    }
18624}
18625
18626// union extends MemberSelectorError
18627impl From<MemberSelectorError> for MembersSendWelcomeError {
18628    fn from(parent: MemberSelectorError) -> Self {
18629        match parent {
18630            MemberSelectorError::UserNotFound => MembersSendWelcomeError::UserNotFound,
18631            MemberSelectorError::UserNotInTeam => MembersSendWelcomeError::UserNotInTeam,
18632        }
18633    }
18634}
18635/// Exactly one of team_member_id, email, or external_id must be provided to identify the user
18636/// account.
18637#[derive(Debug, Clone, PartialEq, Eq)]
18638#[non_exhaustive] // structs may have more fields added in the future.
18639pub struct MembersSetPermissions2Arg {
18640    /// Identity of user whose role will be set.
18641    pub user: UserSelectorArg,
18642    /// The new roles for the member. Send empty list to make user member only. For now, only up to
18643    /// one role is allowed.
18644    pub new_roles: Option<Vec<TeamMemberRoleId>>,
18645}
18646
18647impl MembersSetPermissions2Arg {
18648    pub fn new(user: UserSelectorArg) -> Self {
18649        MembersSetPermissions2Arg {
18650            user,
18651            new_roles: None,
18652        }
18653    }
18654
18655    pub fn with_new_roles(mut self, value: Vec<TeamMemberRoleId>) -> Self {
18656        self.new_roles = Some(value);
18657        self
18658    }
18659}
18660
18661const MEMBERS_SET_PERMISSIONS2_ARG_FIELDS: &[&str] = &["user",
18662                                                       "new_roles"];
18663impl MembersSetPermissions2Arg {
18664    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
18665        map: V,
18666    ) -> Result<MembersSetPermissions2Arg, V::Error> {
18667        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
18668    }
18669
18670    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
18671        mut map: V,
18672        optional: bool,
18673    ) -> Result<Option<MembersSetPermissions2Arg>, V::Error> {
18674        let mut field_user = None;
18675        let mut field_new_roles = None;
18676        let mut nothing = true;
18677        while let Some(key) = map.next_key::<&str>()? {
18678            nothing = false;
18679            match key {
18680                "user" => {
18681                    if field_user.is_some() {
18682                        return Err(::serde::de::Error::duplicate_field("user"));
18683                    }
18684                    field_user = Some(map.next_value()?);
18685                }
18686                "new_roles" => {
18687                    if field_new_roles.is_some() {
18688                        return Err(::serde::de::Error::duplicate_field("new_roles"));
18689                    }
18690                    field_new_roles = Some(map.next_value()?);
18691                }
18692                _ => {
18693                    // unknown field allowed and ignored
18694                    map.next_value::<::serde_json::Value>()?;
18695                }
18696            }
18697        }
18698        if optional && nothing {
18699            return Ok(None);
18700        }
18701        let result = MembersSetPermissions2Arg {
18702            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
18703            new_roles: field_new_roles.and_then(Option::flatten),
18704        };
18705        Ok(Some(result))
18706    }
18707
18708    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
18709        &self,
18710        s: &mut S::SerializeStruct,
18711    ) -> Result<(), S::Error> {
18712        use serde::ser::SerializeStruct;
18713        s.serialize_field("user", &self.user)?;
18714        if let Some(val) = &self.new_roles {
18715            s.serialize_field("new_roles", val)?;
18716        }
18717        Ok(())
18718    }
18719}
18720
18721impl<'de> ::serde::de::Deserialize<'de> for MembersSetPermissions2Arg {
18722    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
18723        // struct deserializer
18724        use serde::de::{MapAccess, Visitor};
18725        struct StructVisitor;
18726        impl<'de> Visitor<'de> for StructVisitor {
18727            type Value = MembersSetPermissions2Arg;
18728            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
18729                f.write_str("a MembersSetPermissions2Arg struct")
18730            }
18731            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
18732                MembersSetPermissions2Arg::internal_deserialize(map)
18733            }
18734        }
18735        deserializer.deserialize_struct("MembersSetPermissions2Arg", MEMBERS_SET_PERMISSIONS2_ARG_FIELDS, StructVisitor)
18736    }
18737}
18738
18739impl ::serde::ser::Serialize for MembersSetPermissions2Arg {
18740    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
18741        // struct serializer
18742        use serde::ser::SerializeStruct;
18743        let mut s = serializer.serialize_struct("MembersSetPermissions2Arg", 2)?;
18744        self.internal_serialize::<S>(&mut s)?;
18745        s.end()
18746    }
18747}
18748
18749#[derive(Debug, Clone, PartialEq, Eq)]
18750#[non_exhaustive] // variants may be added in the future
18751pub enum MembersSetPermissions2Error {
18752    /// No matching user found. The provided team_member_id, email, or external_id does not exist on
18753    /// this team.
18754    UserNotFound,
18755    /// Cannot remove the admin setting of the last admin.
18756    LastAdmin,
18757    /// The user is not a member of the team.
18758    UserNotInTeam,
18759    /// Cannot remove/grant permissions. This can happen if the team member is suspended.
18760    CannotSetPermissions,
18761    /// No matching role found. At least one of the provided new_roles does not exist on this team.
18762    RoleNotFound,
18763    /// Catch-all used for unrecognized values returned from the server. Encountering this value
18764    /// typically indicates that this SDK version is out of date.
18765    Other,
18766}
18767
18768impl<'de> ::serde::de::Deserialize<'de> for MembersSetPermissions2Error {
18769    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
18770        // union deserializer
18771        use serde::de::{self, MapAccess, Visitor};
18772        struct EnumVisitor;
18773        impl<'de> Visitor<'de> for EnumVisitor {
18774            type Value = MembersSetPermissions2Error;
18775            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
18776                f.write_str("a MembersSetPermissions2Error structure")
18777            }
18778            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
18779                let tag: &str = match map.next_key()? {
18780                    Some(".tag") => map.next_value()?,
18781                    _ => return Err(de::Error::missing_field(".tag"))
18782                };
18783                let value = match tag {
18784                    "user_not_found" => MembersSetPermissions2Error::UserNotFound,
18785                    "last_admin" => MembersSetPermissions2Error::LastAdmin,
18786                    "user_not_in_team" => MembersSetPermissions2Error::UserNotInTeam,
18787                    "cannot_set_permissions" => MembersSetPermissions2Error::CannotSetPermissions,
18788                    "role_not_found" => MembersSetPermissions2Error::RoleNotFound,
18789                    _ => MembersSetPermissions2Error::Other,
18790                };
18791                crate::eat_json_fields(&mut map)?;
18792                Ok(value)
18793            }
18794        }
18795        const VARIANTS: &[&str] = &["user_not_found",
18796                                    "last_admin",
18797                                    "user_not_in_team",
18798                                    "cannot_set_permissions",
18799                                    "role_not_found",
18800                                    "other"];
18801        deserializer.deserialize_struct("MembersSetPermissions2Error", VARIANTS, EnumVisitor)
18802    }
18803}
18804
18805impl ::serde::ser::Serialize for MembersSetPermissions2Error {
18806    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
18807        // union serializer
18808        use serde::ser::SerializeStruct;
18809        match self {
18810            MembersSetPermissions2Error::UserNotFound => {
18811                // unit
18812                let mut s = serializer.serialize_struct("MembersSetPermissions2Error", 1)?;
18813                s.serialize_field(".tag", "user_not_found")?;
18814                s.end()
18815            }
18816            MembersSetPermissions2Error::LastAdmin => {
18817                // unit
18818                let mut s = serializer.serialize_struct("MembersSetPermissions2Error", 1)?;
18819                s.serialize_field(".tag", "last_admin")?;
18820                s.end()
18821            }
18822            MembersSetPermissions2Error::UserNotInTeam => {
18823                // unit
18824                let mut s = serializer.serialize_struct("MembersSetPermissions2Error", 1)?;
18825                s.serialize_field(".tag", "user_not_in_team")?;
18826                s.end()
18827            }
18828            MembersSetPermissions2Error::CannotSetPermissions => {
18829                // unit
18830                let mut s = serializer.serialize_struct("MembersSetPermissions2Error", 1)?;
18831                s.serialize_field(".tag", "cannot_set_permissions")?;
18832                s.end()
18833            }
18834            MembersSetPermissions2Error::RoleNotFound => {
18835                // unit
18836                let mut s = serializer.serialize_struct("MembersSetPermissions2Error", 1)?;
18837                s.serialize_field(".tag", "role_not_found")?;
18838                s.end()
18839            }
18840            MembersSetPermissions2Error::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
18841        }
18842    }
18843}
18844
18845impl ::std::error::Error for MembersSetPermissions2Error {
18846}
18847
18848impl ::std::fmt::Display for MembersSetPermissions2Error {
18849    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
18850        match self {
18851            MembersSetPermissions2Error::UserNotFound => f.write_str("No matching user found. The provided team_member_id, email, or external_id does not exist on this team."),
18852            MembersSetPermissions2Error::LastAdmin => f.write_str("Cannot remove the admin setting of the last admin."),
18853            MembersSetPermissions2Error::UserNotInTeam => f.write_str("The user is not a member of the team."),
18854            MembersSetPermissions2Error::CannotSetPermissions => f.write_str("Cannot remove/grant permissions. This can happen if the team member is suspended."),
18855            MembersSetPermissions2Error::RoleNotFound => f.write_str("No matching role found. At least one of the provided new_roles does not exist on this team."),
18856            _ => write!(f, "{:?}", *self),
18857        }
18858    }
18859}
18860
18861// union extends UserSelectorError
18862impl From<UserSelectorError> for MembersSetPermissions2Error {
18863    fn from(parent: UserSelectorError) -> Self {
18864        match parent {
18865            UserSelectorError::UserNotFound => MembersSetPermissions2Error::UserNotFound,
18866        }
18867    }
18868}
18869#[derive(Debug, Clone, PartialEq, Eq)]
18870#[non_exhaustive] // structs may have more fields added in the future.
18871pub struct MembersSetPermissions2Result {
18872    /// The member ID of the user to which the change was applied.
18873    pub team_member_id: crate::types::team_common::TeamMemberId,
18874    /// The roles after the change. Empty in case the user become a non-admin.
18875    pub roles: Option<Vec<TeamMemberRole>>,
18876}
18877
18878impl MembersSetPermissions2Result {
18879    pub fn new(team_member_id: crate::types::team_common::TeamMemberId) -> Self {
18880        MembersSetPermissions2Result {
18881            team_member_id,
18882            roles: None,
18883        }
18884    }
18885
18886    pub fn with_roles(mut self, value: Vec<TeamMemberRole>) -> Self {
18887        self.roles = Some(value);
18888        self
18889    }
18890}
18891
18892const MEMBERS_SET_PERMISSIONS2_RESULT_FIELDS: &[&str] = &["team_member_id",
18893                                                          "roles"];
18894impl MembersSetPermissions2Result {
18895    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
18896        map: V,
18897    ) -> Result<MembersSetPermissions2Result, V::Error> {
18898        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
18899    }
18900
18901    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
18902        mut map: V,
18903        optional: bool,
18904    ) -> Result<Option<MembersSetPermissions2Result>, V::Error> {
18905        let mut field_team_member_id = None;
18906        let mut field_roles = None;
18907        let mut nothing = true;
18908        while let Some(key) = map.next_key::<&str>()? {
18909            nothing = false;
18910            match key {
18911                "team_member_id" => {
18912                    if field_team_member_id.is_some() {
18913                        return Err(::serde::de::Error::duplicate_field("team_member_id"));
18914                    }
18915                    field_team_member_id = Some(map.next_value()?);
18916                }
18917                "roles" => {
18918                    if field_roles.is_some() {
18919                        return Err(::serde::de::Error::duplicate_field("roles"));
18920                    }
18921                    field_roles = Some(map.next_value()?);
18922                }
18923                _ => {
18924                    // unknown field allowed and ignored
18925                    map.next_value::<::serde_json::Value>()?;
18926                }
18927            }
18928        }
18929        if optional && nothing {
18930            return Ok(None);
18931        }
18932        let result = MembersSetPermissions2Result {
18933            team_member_id: field_team_member_id.ok_or_else(|| ::serde::de::Error::missing_field("team_member_id"))?,
18934            roles: field_roles.and_then(Option::flatten),
18935        };
18936        Ok(Some(result))
18937    }
18938
18939    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
18940        &self,
18941        s: &mut S::SerializeStruct,
18942    ) -> Result<(), S::Error> {
18943        use serde::ser::SerializeStruct;
18944        s.serialize_field("team_member_id", &self.team_member_id)?;
18945        if let Some(val) = &self.roles {
18946            s.serialize_field("roles", val)?;
18947        }
18948        Ok(())
18949    }
18950}
18951
18952impl<'de> ::serde::de::Deserialize<'de> for MembersSetPermissions2Result {
18953    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
18954        // struct deserializer
18955        use serde::de::{MapAccess, Visitor};
18956        struct StructVisitor;
18957        impl<'de> Visitor<'de> for StructVisitor {
18958            type Value = MembersSetPermissions2Result;
18959            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
18960                f.write_str("a MembersSetPermissions2Result struct")
18961            }
18962            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
18963                MembersSetPermissions2Result::internal_deserialize(map)
18964            }
18965        }
18966        deserializer.deserialize_struct("MembersSetPermissions2Result", MEMBERS_SET_PERMISSIONS2_RESULT_FIELDS, StructVisitor)
18967    }
18968}
18969
18970impl ::serde::ser::Serialize for MembersSetPermissions2Result {
18971    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
18972        // struct serializer
18973        use serde::ser::SerializeStruct;
18974        let mut s = serializer.serialize_struct("MembersSetPermissions2Result", 2)?;
18975        self.internal_serialize::<S>(&mut s)?;
18976        s.end()
18977    }
18978}
18979
18980/// Exactly one of team_member_id, email, or external_id must be provided to identify the user
18981/// account.
18982#[derive(Debug, Clone, PartialEq, Eq)]
18983#[non_exhaustive] // structs may have more fields added in the future.
18984pub struct MembersSetPermissionsArg {
18985    /// Identity of user whose role will be set.
18986    pub user: UserSelectorArg,
18987    /// The new role of the member.
18988    pub new_role: AdminTier,
18989}
18990
18991impl MembersSetPermissionsArg {
18992    pub fn new(user: UserSelectorArg, new_role: AdminTier) -> Self {
18993        MembersSetPermissionsArg {
18994            user,
18995            new_role,
18996        }
18997    }
18998}
18999
19000const MEMBERS_SET_PERMISSIONS_ARG_FIELDS: &[&str] = &["user",
19001                                                      "new_role"];
19002impl MembersSetPermissionsArg {
19003    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
19004        map: V,
19005    ) -> Result<MembersSetPermissionsArg, V::Error> {
19006        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
19007    }
19008
19009    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
19010        mut map: V,
19011        optional: bool,
19012    ) -> Result<Option<MembersSetPermissionsArg>, V::Error> {
19013        let mut field_user = None;
19014        let mut field_new_role = None;
19015        let mut nothing = true;
19016        while let Some(key) = map.next_key::<&str>()? {
19017            nothing = false;
19018            match key {
19019                "user" => {
19020                    if field_user.is_some() {
19021                        return Err(::serde::de::Error::duplicate_field("user"));
19022                    }
19023                    field_user = Some(map.next_value()?);
19024                }
19025                "new_role" => {
19026                    if field_new_role.is_some() {
19027                        return Err(::serde::de::Error::duplicate_field("new_role"));
19028                    }
19029                    field_new_role = Some(map.next_value()?);
19030                }
19031                _ => {
19032                    // unknown field allowed and ignored
19033                    map.next_value::<::serde_json::Value>()?;
19034                }
19035            }
19036        }
19037        if optional && nothing {
19038            return Ok(None);
19039        }
19040        let result = MembersSetPermissionsArg {
19041            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
19042            new_role: field_new_role.ok_or_else(|| ::serde::de::Error::missing_field("new_role"))?,
19043        };
19044        Ok(Some(result))
19045    }
19046
19047    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
19048        &self,
19049        s: &mut S::SerializeStruct,
19050    ) -> Result<(), S::Error> {
19051        use serde::ser::SerializeStruct;
19052        s.serialize_field("user", &self.user)?;
19053        s.serialize_field("new_role", &self.new_role)?;
19054        Ok(())
19055    }
19056}
19057
19058impl<'de> ::serde::de::Deserialize<'de> for MembersSetPermissionsArg {
19059    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
19060        // struct deserializer
19061        use serde::de::{MapAccess, Visitor};
19062        struct StructVisitor;
19063        impl<'de> Visitor<'de> for StructVisitor {
19064            type Value = MembersSetPermissionsArg;
19065            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
19066                f.write_str("a MembersSetPermissionsArg struct")
19067            }
19068            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
19069                MembersSetPermissionsArg::internal_deserialize(map)
19070            }
19071        }
19072        deserializer.deserialize_struct("MembersSetPermissionsArg", MEMBERS_SET_PERMISSIONS_ARG_FIELDS, StructVisitor)
19073    }
19074}
19075
19076impl ::serde::ser::Serialize for MembersSetPermissionsArg {
19077    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
19078        // struct serializer
19079        use serde::ser::SerializeStruct;
19080        let mut s = serializer.serialize_struct("MembersSetPermissionsArg", 2)?;
19081        self.internal_serialize::<S>(&mut s)?;
19082        s.end()
19083    }
19084}
19085
19086#[derive(Debug, Clone, PartialEq, Eq)]
19087#[non_exhaustive] // variants may be added in the future
19088pub enum MembersSetPermissionsError {
19089    /// No matching user found. The provided team_member_id, email, or external_id does not exist on
19090    /// this team.
19091    UserNotFound,
19092    /// Cannot remove the admin setting of the last admin.
19093    LastAdmin,
19094    /// The user is not a member of the team.
19095    UserNotInTeam,
19096    /// Cannot remove/grant permissions.
19097    CannotSetPermissions,
19098    /// Team is full. The organization has no available licenses.
19099    TeamLicenseLimit,
19100    /// Catch-all used for unrecognized values returned from the server. Encountering this value
19101    /// typically indicates that this SDK version is out of date.
19102    Other,
19103}
19104
19105impl<'de> ::serde::de::Deserialize<'de> for MembersSetPermissionsError {
19106    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
19107        // union deserializer
19108        use serde::de::{self, MapAccess, Visitor};
19109        struct EnumVisitor;
19110        impl<'de> Visitor<'de> for EnumVisitor {
19111            type Value = MembersSetPermissionsError;
19112            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
19113                f.write_str("a MembersSetPermissionsError structure")
19114            }
19115            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
19116                let tag: &str = match map.next_key()? {
19117                    Some(".tag") => map.next_value()?,
19118                    _ => return Err(de::Error::missing_field(".tag"))
19119                };
19120                let value = match tag {
19121                    "user_not_found" => MembersSetPermissionsError::UserNotFound,
19122                    "last_admin" => MembersSetPermissionsError::LastAdmin,
19123                    "user_not_in_team" => MembersSetPermissionsError::UserNotInTeam,
19124                    "cannot_set_permissions" => MembersSetPermissionsError::CannotSetPermissions,
19125                    "team_license_limit" => MembersSetPermissionsError::TeamLicenseLimit,
19126                    _ => MembersSetPermissionsError::Other,
19127                };
19128                crate::eat_json_fields(&mut map)?;
19129                Ok(value)
19130            }
19131        }
19132        const VARIANTS: &[&str] = &["user_not_found",
19133                                    "last_admin",
19134                                    "user_not_in_team",
19135                                    "cannot_set_permissions",
19136                                    "team_license_limit",
19137                                    "other"];
19138        deserializer.deserialize_struct("MembersSetPermissionsError", VARIANTS, EnumVisitor)
19139    }
19140}
19141
19142impl ::serde::ser::Serialize for MembersSetPermissionsError {
19143    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
19144        // union serializer
19145        use serde::ser::SerializeStruct;
19146        match self {
19147            MembersSetPermissionsError::UserNotFound => {
19148                // unit
19149                let mut s = serializer.serialize_struct("MembersSetPermissionsError", 1)?;
19150                s.serialize_field(".tag", "user_not_found")?;
19151                s.end()
19152            }
19153            MembersSetPermissionsError::LastAdmin => {
19154                // unit
19155                let mut s = serializer.serialize_struct("MembersSetPermissionsError", 1)?;
19156                s.serialize_field(".tag", "last_admin")?;
19157                s.end()
19158            }
19159            MembersSetPermissionsError::UserNotInTeam => {
19160                // unit
19161                let mut s = serializer.serialize_struct("MembersSetPermissionsError", 1)?;
19162                s.serialize_field(".tag", "user_not_in_team")?;
19163                s.end()
19164            }
19165            MembersSetPermissionsError::CannotSetPermissions => {
19166                // unit
19167                let mut s = serializer.serialize_struct("MembersSetPermissionsError", 1)?;
19168                s.serialize_field(".tag", "cannot_set_permissions")?;
19169                s.end()
19170            }
19171            MembersSetPermissionsError::TeamLicenseLimit => {
19172                // unit
19173                let mut s = serializer.serialize_struct("MembersSetPermissionsError", 1)?;
19174                s.serialize_field(".tag", "team_license_limit")?;
19175                s.end()
19176            }
19177            MembersSetPermissionsError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
19178        }
19179    }
19180}
19181
19182impl ::std::error::Error for MembersSetPermissionsError {
19183}
19184
19185impl ::std::fmt::Display for MembersSetPermissionsError {
19186    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
19187        match self {
19188            MembersSetPermissionsError::UserNotFound => f.write_str("No matching user found. The provided team_member_id, email, or external_id does not exist on this team."),
19189            MembersSetPermissionsError::LastAdmin => f.write_str("Cannot remove the admin setting of the last admin."),
19190            MembersSetPermissionsError::UserNotInTeam => f.write_str("The user is not a member of the team."),
19191            MembersSetPermissionsError::CannotSetPermissions => f.write_str("Cannot remove/grant permissions."),
19192            MembersSetPermissionsError::TeamLicenseLimit => f.write_str("Team is full. The organization has no available licenses."),
19193            _ => write!(f, "{:?}", *self),
19194        }
19195    }
19196}
19197
19198// union extends UserSelectorError
19199impl From<UserSelectorError> for MembersSetPermissionsError {
19200    fn from(parent: UserSelectorError) -> Self {
19201        match parent {
19202            UserSelectorError::UserNotFound => MembersSetPermissionsError::UserNotFound,
19203        }
19204    }
19205}
19206#[derive(Debug, Clone, PartialEq, Eq)]
19207#[non_exhaustive] // structs may have more fields added in the future.
19208pub struct MembersSetPermissionsResult {
19209    /// The member ID of the user to which the change was applied.
19210    pub team_member_id: crate::types::team_common::TeamMemberId,
19211    /// The role after the change.
19212    pub role: AdminTier,
19213}
19214
19215impl MembersSetPermissionsResult {
19216    pub fn new(team_member_id: crate::types::team_common::TeamMemberId, role: AdminTier) -> Self {
19217        MembersSetPermissionsResult {
19218            team_member_id,
19219            role,
19220        }
19221    }
19222}
19223
19224const MEMBERS_SET_PERMISSIONS_RESULT_FIELDS: &[&str] = &["team_member_id",
19225                                                         "role"];
19226impl MembersSetPermissionsResult {
19227    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
19228        map: V,
19229    ) -> Result<MembersSetPermissionsResult, V::Error> {
19230        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
19231    }
19232
19233    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
19234        mut map: V,
19235        optional: bool,
19236    ) -> Result<Option<MembersSetPermissionsResult>, V::Error> {
19237        let mut field_team_member_id = None;
19238        let mut field_role = None;
19239        let mut nothing = true;
19240        while let Some(key) = map.next_key::<&str>()? {
19241            nothing = false;
19242            match key {
19243                "team_member_id" => {
19244                    if field_team_member_id.is_some() {
19245                        return Err(::serde::de::Error::duplicate_field("team_member_id"));
19246                    }
19247                    field_team_member_id = Some(map.next_value()?);
19248                }
19249                "role" => {
19250                    if field_role.is_some() {
19251                        return Err(::serde::de::Error::duplicate_field("role"));
19252                    }
19253                    field_role = Some(map.next_value()?);
19254                }
19255                _ => {
19256                    // unknown field allowed and ignored
19257                    map.next_value::<::serde_json::Value>()?;
19258                }
19259            }
19260        }
19261        if optional && nothing {
19262            return Ok(None);
19263        }
19264        let result = MembersSetPermissionsResult {
19265            team_member_id: field_team_member_id.ok_or_else(|| ::serde::de::Error::missing_field("team_member_id"))?,
19266            role: field_role.ok_or_else(|| ::serde::de::Error::missing_field("role"))?,
19267        };
19268        Ok(Some(result))
19269    }
19270
19271    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
19272        &self,
19273        s: &mut S::SerializeStruct,
19274    ) -> Result<(), S::Error> {
19275        use serde::ser::SerializeStruct;
19276        s.serialize_field("team_member_id", &self.team_member_id)?;
19277        s.serialize_field("role", &self.role)?;
19278        Ok(())
19279    }
19280}
19281
19282impl<'de> ::serde::de::Deserialize<'de> for MembersSetPermissionsResult {
19283    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
19284        // struct deserializer
19285        use serde::de::{MapAccess, Visitor};
19286        struct StructVisitor;
19287        impl<'de> Visitor<'de> for StructVisitor {
19288            type Value = MembersSetPermissionsResult;
19289            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
19290                f.write_str("a MembersSetPermissionsResult struct")
19291            }
19292            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
19293                MembersSetPermissionsResult::internal_deserialize(map)
19294            }
19295        }
19296        deserializer.deserialize_struct("MembersSetPermissionsResult", MEMBERS_SET_PERMISSIONS_RESULT_FIELDS, StructVisitor)
19297    }
19298}
19299
19300impl ::serde::ser::Serialize for MembersSetPermissionsResult {
19301    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
19302        // struct serializer
19303        use serde::ser::SerializeStruct;
19304        let mut s = serializer.serialize_struct("MembersSetPermissionsResult", 2)?;
19305        self.internal_serialize::<S>(&mut s)?;
19306        s.end()
19307    }
19308}
19309
19310/// Exactly one of team_member_id, email, or external_id must be provided to identify the user
19311/// account. At least one of new_email, new_external_id, new_given_name, and/or new_surname must be
19312/// provided.
19313#[derive(Debug, Clone, PartialEq, Eq)]
19314#[non_exhaustive] // structs may have more fields added in the future.
19315pub struct MembersSetProfileArg {
19316    /// Identity of user whose profile will be set.
19317    pub user: UserSelectorArg,
19318    /// New email for member.
19319    pub new_email: Option<crate::types::common::EmailAddress>,
19320    /// New external ID for member.
19321    pub new_external_id: Option<crate::types::team_common::MemberExternalId>,
19322    /// New given name for member.
19323    pub new_given_name: Option<crate::types::common::OptionalNamePart>,
19324    /// New surname for member.
19325    pub new_surname: Option<crate::types::common::OptionalNamePart>,
19326    /// New persistent ID. This field only available to teams using persistent ID SAML
19327    /// configuration.
19328    pub new_persistent_id: Option<String>,
19329    /// New value for whether the user is a directory restricted user.
19330    pub new_is_directory_restricted: Option<bool>,
19331}
19332
19333impl MembersSetProfileArg {
19334    pub fn new(user: UserSelectorArg) -> Self {
19335        MembersSetProfileArg {
19336            user,
19337            new_email: None,
19338            new_external_id: None,
19339            new_given_name: None,
19340            new_surname: None,
19341            new_persistent_id: None,
19342            new_is_directory_restricted: None,
19343        }
19344    }
19345
19346    pub fn with_new_email(mut self, value: crate::types::common::EmailAddress) -> Self {
19347        self.new_email = Some(value);
19348        self
19349    }
19350
19351    pub fn with_new_external_id(
19352        mut self,
19353        value: crate::types::team_common::MemberExternalId,
19354    ) -> Self {
19355        self.new_external_id = Some(value);
19356        self
19357    }
19358
19359    pub fn with_new_given_name(mut self, value: crate::types::common::OptionalNamePart) -> Self {
19360        self.new_given_name = Some(value);
19361        self
19362    }
19363
19364    pub fn with_new_surname(mut self, value: crate::types::common::OptionalNamePart) -> Self {
19365        self.new_surname = Some(value);
19366        self
19367    }
19368
19369    pub fn with_new_persistent_id(mut self, value: String) -> Self {
19370        self.new_persistent_id = Some(value);
19371        self
19372    }
19373
19374    pub fn with_new_is_directory_restricted(mut self, value: bool) -> Self {
19375        self.new_is_directory_restricted = Some(value);
19376        self
19377    }
19378}
19379
19380const MEMBERS_SET_PROFILE_ARG_FIELDS: &[&str] = &["user",
19381                                                  "new_email",
19382                                                  "new_external_id",
19383                                                  "new_given_name",
19384                                                  "new_surname",
19385                                                  "new_persistent_id",
19386                                                  "new_is_directory_restricted"];
19387impl MembersSetProfileArg {
19388    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
19389        map: V,
19390    ) -> Result<MembersSetProfileArg, V::Error> {
19391        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
19392    }
19393
19394    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
19395        mut map: V,
19396        optional: bool,
19397    ) -> Result<Option<MembersSetProfileArg>, V::Error> {
19398        let mut field_user = None;
19399        let mut field_new_email = None;
19400        let mut field_new_external_id = None;
19401        let mut field_new_given_name = None;
19402        let mut field_new_surname = None;
19403        let mut field_new_persistent_id = None;
19404        let mut field_new_is_directory_restricted = None;
19405        let mut nothing = true;
19406        while let Some(key) = map.next_key::<&str>()? {
19407            nothing = false;
19408            match key {
19409                "user" => {
19410                    if field_user.is_some() {
19411                        return Err(::serde::de::Error::duplicate_field("user"));
19412                    }
19413                    field_user = Some(map.next_value()?);
19414                }
19415                "new_email" => {
19416                    if field_new_email.is_some() {
19417                        return Err(::serde::de::Error::duplicate_field("new_email"));
19418                    }
19419                    field_new_email = Some(map.next_value()?);
19420                }
19421                "new_external_id" => {
19422                    if field_new_external_id.is_some() {
19423                        return Err(::serde::de::Error::duplicate_field("new_external_id"));
19424                    }
19425                    field_new_external_id = Some(map.next_value()?);
19426                }
19427                "new_given_name" => {
19428                    if field_new_given_name.is_some() {
19429                        return Err(::serde::de::Error::duplicate_field("new_given_name"));
19430                    }
19431                    field_new_given_name = Some(map.next_value()?);
19432                }
19433                "new_surname" => {
19434                    if field_new_surname.is_some() {
19435                        return Err(::serde::de::Error::duplicate_field("new_surname"));
19436                    }
19437                    field_new_surname = Some(map.next_value()?);
19438                }
19439                "new_persistent_id" => {
19440                    if field_new_persistent_id.is_some() {
19441                        return Err(::serde::de::Error::duplicate_field("new_persistent_id"));
19442                    }
19443                    field_new_persistent_id = Some(map.next_value()?);
19444                }
19445                "new_is_directory_restricted" => {
19446                    if field_new_is_directory_restricted.is_some() {
19447                        return Err(::serde::de::Error::duplicate_field("new_is_directory_restricted"));
19448                    }
19449                    field_new_is_directory_restricted = Some(map.next_value()?);
19450                }
19451                _ => {
19452                    // unknown field allowed and ignored
19453                    map.next_value::<::serde_json::Value>()?;
19454                }
19455            }
19456        }
19457        if optional && nothing {
19458            return Ok(None);
19459        }
19460        let result = MembersSetProfileArg {
19461            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
19462            new_email: field_new_email.and_then(Option::flatten),
19463            new_external_id: field_new_external_id.and_then(Option::flatten),
19464            new_given_name: field_new_given_name.and_then(Option::flatten),
19465            new_surname: field_new_surname.and_then(Option::flatten),
19466            new_persistent_id: field_new_persistent_id.and_then(Option::flatten),
19467            new_is_directory_restricted: field_new_is_directory_restricted.and_then(Option::flatten),
19468        };
19469        Ok(Some(result))
19470    }
19471
19472    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
19473        &self,
19474        s: &mut S::SerializeStruct,
19475    ) -> Result<(), S::Error> {
19476        use serde::ser::SerializeStruct;
19477        s.serialize_field("user", &self.user)?;
19478        if let Some(val) = &self.new_email {
19479            s.serialize_field("new_email", val)?;
19480        }
19481        if let Some(val) = &self.new_external_id {
19482            s.serialize_field("new_external_id", val)?;
19483        }
19484        if let Some(val) = &self.new_given_name {
19485            s.serialize_field("new_given_name", val)?;
19486        }
19487        if let Some(val) = &self.new_surname {
19488            s.serialize_field("new_surname", val)?;
19489        }
19490        if let Some(val) = &self.new_persistent_id {
19491            s.serialize_field("new_persistent_id", val)?;
19492        }
19493        if let Some(val) = &self.new_is_directory_restricted {
19494            s.serialize_field("new_is_directory_restricted", val)?;
19495        }
19496        Ok(())
19497    }
19498}
19499
19500impl<'de> ::serde::de::Deserialize<'de> for MembersSetProfileArg {
19501    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
19502        // struct deserializer
19503        use serde::de::{MapAccess, Visitor};
19504        struct StructVisitor;
19505        impl<'de> Visitor<'de> for StructVisitor {
19506            type Value = MembersSetProfileArg;
19507            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
19508                f.write_str("a MembersSetProfileArg struct")
19509            }
19510            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
19511                MembersSetProfileArg::internal_deserialize(map)
19512            }
19513        }
19514        deserializer.deserialize_struct("MembersSetProfileArg", MEMBERS_SET_PROFILE_ARG_FIELDS, StructVisitor)
19515    }
19516}
19517
19518impl ::serde::ser::Serialize for MembersSetProfileArg {
19519    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
19520        // struct serializer
19521        use serde::ser::SerializeStruct;
19522        let mut s = serializer.serialize_struct("MembersSetProfileArg", 7)?;
19523        self.internal_serialize::<S>(&mut s)?;
19524        s.end()
19525    }
19526}
19527
19528#[derive(Debug, Clone, PartialEq, Eq)]
19529#[non_exhaustive] // variants may be added in the future
19530pub enum MembersSetProfileError {
19531    /// No matching user found. The provided team_member_id, email, or external_id does not exist on
19532    /// this team.
19533    UserNotFound,
19534    /// The user is not a member of the team.
19535    UserNotInTeam,
19536    /// It is unsafe to use both external_id and new_external_id.
19537    ExternalIdAndNewExternalIdUnsafe,
19538    /// None of new_email, new_given_name, new_surname, or new_external_id are specified.
19539    NoNewDataSpecified,
19540    /// Email is already reserved for another user.
19541    EmailReservedForOtherUser,
19542    /// The external ID is already in use by another team member.
19543    ExternalIdUsedByOtherUser,
19544    /// Modifying deleted users is not allowed.
19545    SetProfileDisallowed,
19546    /// Parameter new_email cannot be empty.
19547    ParamCannotBeEmpty,
19548    /// Persistent ID is only available to teams with persistent ID SAML configuration. Please
19549    /// contact Dropbox for more information.
19550    PersistentIdDisabled,
19551    /// The persistent ID is already in use by another team member.
19552    PersistentIdUsedByOtherUser,
19553    /// Directory Restrictions option is not available.
19554    DirectoryRestrictedOff,
19555    /// Catch-all used for unrecognized values returned from the server. Encountering this value
19556    /// typically indicates that this SDK version is out of date.
19557    Other,
19558}
19559
19560impl<'de> ::serde::de::Deserialize<'de> for MembersSetProfileError {
19561    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
19562        // union deserializer
19563        use serde::de::{self, MapAccess, Visitor};
19564        struct EnumVisitor;
19565        impl<'de> Visitor<'de> for EnumVisitor {
19566            type Value = MembersSetProfileError;
19567            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
19568                f.write_str("a MembersSetProfileError structure")
19569            }
19570            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
19571                let tag: &str = match map.next_key()? {
19572                    Some(".tag") => map.next_value()?,
19573                    _ => return Err(de::Error::missing_field(".tag"))
19574                };
19575                let value = match tag {
19576                    "user_not_found" => MembersSetProfileError::UserNotFound,
19577                    "user_not_in_team" => MembersSetProfileError::UserNotInTeam,
19578                    "external_id_and_new_external_id_unsafe" => MembersSetProfileError::ExternalIdAndNewExternalIdUnsafe,
19579                    "no_new_data_specified" => MembersSetProfileError::NoNewDataSpecified,
19580                    "email_reserved_for_other_user" => MembersSetProfileError::EmailReservedForOtherUser,
19581                    "external_id_used_by_other_user" => MembersSetProfileError::ExternalIdUsedByOtherUser,
19582                    "set_profile_disallowed" => MembersSetProfileError::SetProfileDisallowed,
19583                    "param_cannot_be_empty" => MembersSetProfileError::ParamCannotBeEmpty,
19584                    "persistent_id_disabled" => MembersSetProfileError::PersistentIdDisabled,
19585                    "persistent_id_used_by_other_user" => MembersSetProfileError::PersistentIdUsedByOtherUser,
19586                    "directory_restricted_off" => MembersSetProfileError::DirectoryRestrictedOff,
19587                    _ => MembersSetProfileError::Other,
19588                };
19589                crate::eat_json_fields(&mut map)?;
19590                Ok(value)
19591            }
19592        }
19593        const VARIANTS: &[&str] = &["user_not_found",
19594                                    "user_not_in_team",
19595                                    "external_id_and_new_external_id_unsafe",
19596                                    "no_new_data_specified",
19597                                    "email_reserved_for_other_user",
19598                                    "external_id_used_by_other_user",
19599                                    "set_profile_disallowed",
19600                                    "param_cannot_be_empty",
19601                                    "persistent_id_disabled",
19602                                    "persistent_id_used_by_other_user",
19603                                    "directory_restricted_off",
19604                                    "other"];
19605        deserializer.deserialize_struct("MembersSetProfileError", VARIANTS, EnumVisitor)
19606    }
19607}
19608
19609impl ::serde::ser::Serialize for MembersSetProfileError {
19610    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
19611        // union serializer
19612        use serde::ser::SerializeStruct;
19613        match self {
19614            MembersSetProfileError::UserNotFound => {
19615                // unit
19616                let mut s = serializer.serialize_struct("MembersSetProfileError", 1)?;
19617                s.serialize_field(".tag", "user_not_found")?;
19618                s.end()
19619            }
19620            MembersSetProfileError::UserNotInTeam => {
19621                // unit
19622                let mut s = serializer.serialize_struct("MembersSetProfileError", 1)?;
19623                s.serialize_field(".tag", "user_not_in_team")?;
19624                s.end()
19625            }
19626            MembersSetProfileError::ExternalIdAndNewExternalIdUnsafe => {
19627                // unit
19628                let mut s = serializer.serialize_struct("MembersSetProfileError", 1)?;
19629                s.serialize_field(".tag", "external_id_and_new_external_id_unsafe")?;
19630                s.end()
19631            }
19632            MembersSetProfileError::NoNewDataSpecified => {
19633                // unit
19634                let mut s = serializer.serialize_struct("MembersSetProfileError", 1)?;
19635                s.serialize_field(".tag", "no_new_data_specified")?;
19636                s.end()
19637            }
19638            MembersSetProfileError::EmailReservedForOtherUser => {
19639                // unit
19640                let mut s = serializer.serialize_struct("MembersSetProfileError", 1)?;
19641                s.serialize_field(".tag", "email_reserved_for_other_user")?;
19642                s.end()
19643            }
19644            MembersSetProfileError::ExternalIdUsedByOtherUser => {
19645                // unit
19646                let mut s = serializer.serialize_struct("MembersSetProfileError", 1)?;
19647                s.serialize_field(".tag", "external_id_used_by_other_user")?;
19648                s.end()
19649            }
19650            MembersSetProfileError::SetProfileDisallowed => {
19651                // unit
19652                let mut s = serializer.serialize_struct("MembersSetProfileError", 1)?;
19653                s.serialize_field(".tag", "set_profile_disallowed")?;
19654                s.end()
19655            }
19656            MembersSetProfileError::ParamCannotBeEmpty => {
19657                // unit
19658                let mut s = serializer.serialize_struct("MembersSetProfileError", 1)?;
19659                s.serialize_field(".tag", "param_cannot_be_empty")?;
19660                s.end()
19661            }
19662            MembersSetProfileError::PersistentIdDisabled => {
19663                // unit
19664                let mut s = serializer.serialize_struct("MembersSetProfileError", 1)?;
19665                s.serialize_field(".tag", "persistent_id_disabled")?;
19666                s.end()
19667            }
19668            MembersSetProfileError::PersistentIdUsedByOtherUser => {
19669                // unit
19670                let mut s = serializer.serialize_struct("MembersSetProfileError", 1)?;
19671                s.serialize_field(".tag", "persistent_id_used_by_other_user")?;
19672                s.end()
19673            }
19674            MembersSetProfileError::DirectoryRestrictedOff => {
19675                // unit
19676                let mut s = serializer.serialize_struct("MembersSetProfileError", 1)?;
19677                s.serialize_field(".tag", "directory_restricted_off")?;
19678                s.end()
19679            }
19680            MembersSetProfileError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
19681        }
19682    }
19683}
19684
19685impl ::std::error::Error for MembersSetProfileError {
19686}
19687
19688impl ::std::fmt::Display for MembersSetProfileError {
19689    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
19690        match self {
19691            MembersSetProfileError::UserNotFound => f.write_str("No matching user found. The provided team_member_id, email, or external_id does not exist on this team."),
19692            MembersSetProfileError::UserNotInTeam => f.write_str("The user is not a member of the team."),
19693            MembersSetProfileError::ExternalIdAndNewExternalIdUnsafe => f.write_str("It is unsafe to use both external_id and new_external_id."),
19694            MembersSetProfileError::NoNewDataSpecified => f.write_str("None of new_email, new_given_name, new_surname, or new_external_id are specified."),
19695            MembersSetProfileError::EmailReservedForOtherUser => f.write_str("Email is already reserved for another user."),
19696            MembersSetProfileError::ExternalIdUsedByOtherUser => f.write_str("The external ID is already in use by another team member."),
19697            MembersSetProfileError::SetProfileDisallowed => f.write_str("Modifying deleted users is not allowed."),
19698            MembersSetProfileError::ParamCannotBeEmpty => f.write_str("Parameter new_email cannot be empty."),
19699            MembersSetProfileError::PersistentIdDisabled => f.write_str("Persistent ID is only available to teams with persistent ID SAML configuration. Please contact Dropbox for more information."),
19700            MembersSetProfileError::PersistentIdUsedByOtherUser => f.write_str("The persistent ID is already in use by another team member."),
19701            MembersSetProfileError::DirectoryRestrictedOff => f.write_str("Directory Restrictions option is not available."),
19702            _ => write!(f, "{:?}", *self),
19703        }
19704    }
19705}
19706
19707// union extends MemberSelectorError
19708impl From<MemberSelectorError> for MembersSetProfileError {
19709    fn from(parent: MemberSelectorError) -> Self {
19710        match parent {
19711            MemberSelectorError::UserNotFound => MembersSetProfileError::UserNotFound,
19712            MemberSelectorError::UserNotInTeam => MembersSetProfileError::UserNotInTeam,
19713        }
19714    }
19715}
19716#[derive(Debug, Clone, PartialEq, Eq)]
19717#[non_exhaustive] // structs may have more fields added in the future.
19718pub struct MembersSetProfilePhotoArg {
19719    /// Identity of the user whose profile photo will be set.
19720    pub user: UserSelectorArg,
19721    /// Image to set as the member's new profile photo.
19722    pub photo: crate::types::account::PhotoSourceArg,
19723}
19724
19725impl MembersSetProfilePhotoArg {
19726    pub fn new(user: UserSelectorArg, photo: crate::types::account::PhotoSourceArg) -> Self {
19727        MembersSetProfilePhotoArg {
19728            user,
19729            photo,
19730        }
19731    }
19732}
19733
19734const MEMBERS_SET_PROFILE_PHOTO_ARG_FIELDS: &[&str] = &["user",
19735                                                        "photo"];
19736impl MembersSetProfilePhotoArg {
19737    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
19738        map: V,
19739    ) -> Result<MembersSetProfilePhotoArg, V::Error> {
19740        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
19741    }
19742
19743    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
19744        mut map: V,
19745        optional: bool,
19746    ) -> Result<Option<MembersSetProfilePhotoArg>, V::Error> {
19747        let mut field_user = None;
19748        let mut field_photo = None;
19749        let mut nothing = true;
19750        while let Some(key) = map.next_key::<&str>()? {
19751            nothing = false;
19752            match key {
19753                "user" => {
19754                    if field_user.is_some() {
19755                        return Err(::serde::de::Error::duplicate_field("user"));
19756                    }
19757                    field_user = Some(map.next_value()?);
19758                }
19759                "photo" => {
19760                    if field_photo.is_some() {
19761                        return Err(::serde::de::Error::duplicate_field("photo"));
19762                    }
19763                    field_photo = Some(map.next_value()?);
19764                }
19765                _ => {
19766                    // unknown field allowed and ignored
19767                    map.next_value::<::serde_json::Value>()?;
19768                }
19769            }
19770        }
19771        if optional && nothing {
19772            return Ok(None);
19773        }
19774        let result = MembersSetProfilePhotoArg {
19775            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
19776            photo: field_photo.ok_or_else(|| ::serde::de::Error::missing_field("photo"))?,
19777        };
19778        Ok(Some(result))
19779    }
19780
19781    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
19782        &self,
19783        s: &mut S::SerializeStruct,
19784    ) -> Result<(), S::Error> {
19785        use serde::ser::SerializeStruct;
19786        s.serialize_field("user", &self.user)?;
19787        s.serialize_field("photo", &self.photo)?;
19788        Ok(())
19789    }
19790}
19791
19792impl<'de> ::serde::de::Deserialize<'de> for MembersSetProfilePhotoArg {
19793    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
19794        // struct deserializer
19795        use serde::de::{MapAccess, Visitor};
19796        struct StructVisitor;
19797        impl<'de> Visitor<'de> for StructVisitor {
19798            type Value = MembersSetProfilePhotoArg;
19799            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
19800                f.write_str("a MembersSetProfilePhotoArg struct")
19801            }
19802            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
19803                MembersSetProfilePhotoArg::internal_deserialize(map)
19804            }
19805        }
19806        deserializer.deserialize_struct("MembersSetProfilePhotoArg", MEMBERS_SET_PROFILE_PHOTO_ARG_FIELDS, StructVisitor)
19807    }
19808}
19809
19810impl ::serde::ser::Serialize for MembersSetProfilePhotoArg {
19811    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
19812        // struct serializer
19813        use serde::ser::SerializeStruct;
19814        let mut s = serializer.serialize_struct("MembersSetProfilePhotoArg", 2)?;
19815        self.internal_serialize::<S>(&mut s)?;
19816        s.end()
19817    }
19818}
19819
19820#[derive(Debug, Clone, PartialEq, Eq)]
19821#[non_exhaustive] // variants may be added in the future
19822pub enum MembersSetProfilePhotoError {
19823    /// No matching user found. The provided team_member_id, email, or external_id does not exist on
19824    /// this team.
19825    UserNotFound,
19826    /// The user is not a member of the team.
19827    UserNotInTeam,
19828    /// Modifying deleted users is not allowed.
19829    SetProfileDisallowed,
19830    PhotoError(crate::types::account::SetProfilePhotoError),
19831    /// Catch-all used for unrecognized values returned from the server. Encountering this value
19832    /// typically indicates that this SDK version is out of date.
19833    Other,
19834}
19835
19836impl<'de> ::serde::de::Deserialize<'de> for MembersSetProfilePhotoError {
19837    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
19838        // union deserializer
19839        use serde::de::{self, MapAccess, Visitor};
19840        struct EnumVisitor;
19841        impl<'de> Visitor<'de> for EnumVisitor {
19842            type Value = MembersSetProfilePhotoError;
19843            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
19844                f.write_str("a MembersSetProfilePhotoError structure")
19845            }
19846            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
19847                let tag: &str = match map.next_key()? {
19848                    Some(".tag") => map.next_value()?,
19849                    _ => return Err(de::Error::missing_field(".tag"))
19850                };
19851                let value = match tag {
19852                    "user_not_found" => MembersSetProfilePhotoError::UserNotFound,
19853                    "user_not_in_team" => MembersSetProfilePhotoError::UserNotInTeam,
19854                    "set_profile_disallowed" => MembersSetProfilePhotoError::SetProfileDisallowed,
19855                    "photo_error" => {
19856                        match map.next_key()? {
19857                            Some("photo_error") => MembersSetProfilePhotoError::PhotoError(map.next_value()?),
19858                            None => return Err(de::Error::missing_field("photo_error")),
19859                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
19860                        }
19861                    }
19862                    _ => MembersSetProfilePhotoError::Other,
19863                };
19864                crate::eat_json_fields(&mut map)?;
19865                Ok(value)
19866            }
19867        }
19868        const VARIANTS: &[&str] = &["user_not_found",
19869                                    "user_not_in_team",
19870                                    "set_profile_disallowed",
19871                                    "photo_error",
19872                                    "other"];
19873        deserializer.deserialize_struct("MembersSetProfilePhotoError", VARIANTS, EnumVisitor)
19874    }
19875}
19876
19877impl ::serde::ser::Serialize for MembersSetProfilePhotoError {
19878    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
19879        // union serializer
19880        use serde::ser::SerializeStruct;
19881        match self {
19882            MembersSetProfilePhotoError::UserNotFound => {
19883                // unit
19884                let mut s = serializer.serialize_struct("MembersSetProfilePhotoError", 1)?;
19885                s.serialize_field(".tag", "user_not_found")?;
19886                s.end()
19887            }
19888            MembersSetProfilePhotoError::UserNotInTeam => {
19889                // unit
19890                let mut s = serializer.serialize_struct("MembersSetProfilePhotoError", 1)?;
19891                s.serialize_field(".tag", "user_not_in_team")?;
19892                s.end()
19893            }
19894            MembersSetProfilePhotoError::SetProfileDisallowed => {
19895                // unit
19896                let mut s = serializer.serialize_struct("MembersSetProfilePhotoError", 1)?;
19897                s.serialize_field(".tag", "set_profile_disallowed")?;
19898                s.end()
19899            }
19900            MembersSetProfilePhotoError::PhotoError(x) => {
19901                // union or polymporphic struct
19902                let mut s = serializer.serialize_struct("MembersSetProfilePhotoError", 2)?;
19903                s.serialize_field(".tag", "photo_error")?;
19904                s.serialize_field("photo_error", x)?;
19905                s.end()
19906            }
19907            MembersSetProfilePhotoError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
19908        }
19909    }
19910}
19911
19912impl ::std::error::Error for MembersSetProfilePhotoError {
19913    fn source(&self) -> Option<&(dyn ::std::error::Error + 'static)> {
19914        match self {
19915            MembersSetProfilePhotoError::PhotoError(inner) => Some(inner),
19916            _ => None,
19917        }
19918    }
19919}
19920
19921impl ::std::fmt::Display for MembersSetProfilePhotoError {
19922    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
19923        match self {
19924            MembersSetProfilePhotoError::UserNotFound => f.write_str("No matching user found. The provided team_member_id, email, or external_id does not exist on this team."),
19925            MembersSetProfilePhotoError::UserNotInTeam => f.write_str("The user is not a member of the team."),
19926            MembersSetProfilePhotoError::SetProfileDisallowed => f.write_str("Modifying deleted users is not allowed."),
19927            MembersSetProfilePhotoError::PhotoError(inner) => write!(f, "MembersSetProfilePhotoError: {}", inner),
19928            _ => write!(f, "{:?}", *self),
19929        }
19930    }
19931}
19932
19933// union extends MemberSelectorError
19934impl From<MemberSelectorError> for MembersSetProfilePhotoError {
19935    fn from(parent: MemberSelectorError) -> Self {
19936        match parent {
19937            MemberSelectorError::UserNotFound => MembersSetProfilePhotoError::UserNotFound,
19938            MemberSelectorError::UserNotInTeam => MembersSetProfilePhotoError::UserNotInTeam,
19939        }
19940    }
19941}
19942#[derive(Debug, Clone, PartialEq, Eq)]
19943#[non_exhaustive] // variants may be added in the future
19944pub enum MembersSuspendError {
19945    /// No matching user found. The provided team_member_id, email, or external_id does not exist on
19946    /// this team.
19947    UserNotFound,
19948    /// The user is not a member of the team.
19949    UserNotInTeam,
19950    /// The user is not active, so it cannot be suspended.
19951    SuspendInactiveUser,
19952    /// The user is the last admin of the team, so it cannot be suspended.
19953    SuspendLastAdmin,
19954    /// Team is full. The organization has no available licenses.
19955    TeamLicenseLimit,
19956    /// Catch-all used for unrecognized values returned from the server. Encountering this value
19957    /// typically indicates that this SDK version is out of date.
19958    Other,
19959}
19960
19961impl<'de> ::serde::de::Deserialize<'de> for MembersSuspendError {
19962    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
19963        // union deserializer
19964        use serde::de::{self, MapAccess, Visitor};
19965        struct EnumVisitor;
19966        impl<'de> Visitor<'de> for EnumVisitor {
19967            type Value = MembersSuspendError;
19968            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
19969                f.write_str("a MembersSuspendError structure")
19970            }
19971            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
19972                let tag: &str = match map.next_key()? {
19973                    Some(".tag") => map.next_value()?,
19974                    _ => return Err(de::Error::missing_field(".tag"))
19975                };
19976                let value = match tag {
19977                    "user_not_found" => MembersSuspendError::UserNotFound,
19978                    "user_not_in_team" => MembersSuspendError::UserNotInTeam,
19979                    "suspend_inactive_user" => MembersSuspendError::SuspendInactiveUser,
19980                    "suspend_last_admin" => MembersSuspendError::SuspendLastAdmin,
19981                    "team_license_limit" => MembersSuspendError::TeamLicenseLimit,
19982                    _ => MembersSuspendError::Other,
19983                };
19984                crate::eat_json_fields(&mut map)?;
19985                Ok(value)
19986            }
19987        }
19988        const VARIANTS: &[&str] = &["user_not_found",
19989                                    "user_not_in_team",
19990                                    "other",
19991                                    "suspend_inactive_user",
19992                                    "suspend_last_admin",
19993                                    "team_license_limit"];
19994        deserializer.deserialize_struct("MembersSuspendError", VARIANTS, EnumVisitor)
19995    }
19996}
19997
19998impl ::serde::ser::Serialize for MembersSuspendError {
19999    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
20000        // union serializer
20001        use serde::ser::SerializeStruct;
20002        match self {
20003            MembersSuspendError::UserNotFound => {
20004                // unit
20005                let mut s = serializer.serialize_struct("MembersSuspendError", 1)?;
20006                s.serialize_field(".tag", "user_not_found")?;
20007                s.end()
20008            }
20009            MembersSuspendError::UserNotInTeam => {
20010                // unit
20011                let mut s = serializer.serialize_struct("MembersSuspendError", 1)?;
20012                s.serialize_field(".tag", "user_not_in_team")?;
20013                s.end()
20014            }
20015            MembersSuspendError::SuspendInactiveUser => {
20016                // unit
20017                let mut s = serializer.serialize_struct("MembersSuspendError", 1)?;
20018                s.serialize_field(".tag", "suspend_inactive_user")?;
20019                s.end()
20020            }
20021            MembersSuspendError::SuspendLastAdmin => {
20022                // unit
20023                let mut s = serializer.serialize_struct("MembersSuspendError", 1)?;
20024                s.serialize_field(".tag", "suspend_last_admin")?;
20025                s.end()
20026            }
20027            MembersSuspendError::TeamLicenseLimit => {
20028                // unit
20029                let mut s = serializer.serialize_struct("MembersSuspendError", 1)?;
20030                s.serialize_field(".tag", "team_license_limit")?;
20031                s.end()
20032            }
20033            MembersSuspendError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
20034        }
20035    }
20036}
20037
20038impl ::std::error::Error for MembersSuspendError {
20039}
20040
20041impl ::std::fmt::Display for MembersSuspendError {
20042    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
20043        match self {
20044            MembersSuspendError::UserNotFound => f.write_str("No matching user found. The provided team_member_id, email, or external_id does not exist on this team."),
20045            MembersSuspendError::UserNotInTeam => f.write_str("The user is not a member of the team."),
20046            MembersSuspendError::SuspendInactiveUser => f.write_str("The user is not active, so it cannot be suspended."),
20047            MembersSuspendError::SuspendLastAdmin => f.write_str("The user is the last admin of the team, so it cannot be suspended."),
20048            MembersSuspendError::TeamLicenseLimit => f.write_str("Team is full. The organization has no available licenses."),
20049            _ => write!(f, "{:?}", *self),
20050        }
20051    }
20052}
20053
20054// union extends MembersDeactivateError
20055impl From<MembersDeactivateError> for MembersSuspendError {
20056    fn from(parent: MembersDeactivateError) -> Self {
20057        match parent {
20058            MembersDeactivateError::UserNotFound => MembersSuspendError::UserNotFound,
20059            MembersDeactivateError::UserNotInTeam => MembersSuspendError::UserNotInTeam,
20060            MembersDeactivateError::Other => MembersSuspendError::Other,
20061        }
20062    }
20063}
20064#[derive(Debug, Clone, PartialEq, Eq)]
20065#[non_exhaustive] // variants may be added in the future
20066pub enum MembersTransferFilesError {
20067    /// No matching user found. The provided team_member_id, email, or external_id does not exist on
20068    /// this team.
20069    UserNotFound,
20070    /// The user is not a member of the team.
20071    UserNotInTeam,
20072    /// Expected removed user and transfer_dest user to be different.
20073    RemovedAndTransferDestShouldDiffer,
20074    /// Expected removed user and transfer_admin user to be different.
20075    RemovedAndTransferAdminShouldDiffer,
20076    /// No matching user found for the argument transfer_dest_id.
20077    TransferDestUserNotFound,
20078    /// The provided transfer_dest_id does not exist on this team.
20079    TransferDestUserNotInTeam,
20080    /// The provided transfer_admin_id does not exist on this team.
20081    TransferAdminUserNotInTeam,
20082    /// No matching user found for the argument transfer_admin_id.
20083    TransferAdminUserNotFound,
20084    /// The transfer_admin_id argument must be provided when file transfer is requested.
20085    UnspecifiedTransferAdminId,
20086    /// Specified transfer_admin user is not a team admin.
20087    TransferAdminIsNotAdmin,
20088    /// The recipient user's email is not verified.
20089    RecipientNotVerified,
20090    /// Catch-all used for unrecognized values returned from the server. Encountering this value
20091    /// typically indicates that this SDK version is out of date.
20092    Other,
20093}
20094
20095impl<'de> ::serde::de::Deserialize<'de> for MembersTransferFilesError {
20096    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
20097        // union deserializer
20098        use serde::de::{self, MapAccess, Visitor};
20099        struct EnumVisitor;
20100        impl<'de> Visitor<'de> for EnumVisitor {
20101            type Value = MembersTransferFilesError;
20102            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
20103                f.write_str("a MembersTransferFilesError structure")
20104            }
20105            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
20106                let tag: &str = match map.next_key()? {
20107                    Some(".tag") => map.next_value()?,
20108                    _ => return Err(de::Error::missing_field(".tag"))
20109                };
20110                let value = match tag {
20111                    "user_not_found" => MembersTransferFilesError::UserNotFound,
20112                    "user_not_in_team" => MembersTransferFilesError::UserNotInTeam,
20113                    "removed_and_transfer_dest_should_differ" => MembersTransferFilesError::RemovedAndTransferDestShouldDiffer,
20114                    "removed_and_transfer_admin_should_differ" => MembersTransferFilesError::RemovedAndTransferAdminShouldDiffer,
20115                    "transfer_dest_user_not_found" => MembersTransferFilesError::TransferDestUserNotFound,
20116                    "transfer_dest_user_not_in_team" => MembersTransferFilesError::TransferDestUserNotInTeam,
20117                    "transfer_admin_user_not_in_team" => MembersTransferFilesError::TransferAdminUserNotInTeam,
20118                    "transfer_admin_user_not_found" => MembersTransferFilesError::TransferAdminUserNotFound,
20119                    "unspecified_transfer_admin_id" => MembersTransferFilesError::UnspecifiedTransferAdminId,
20120                    "transfer_admin_is_not_admin" => MembersTransferFilesError::TransferAdminIsNotAdmin,
20121                    "recipient_not_verified" => MembersTransferFilesError::RecipientNotVerified,
20122                    _ => MembersTransferFilesError::Other,
20123                };
20124                crate::eat_json_fields(&mut map)?;
20125                Ok(value)
20126            }
20127        }
20128        const VARIANTS: &[&str] = &["user_not_found",
20129                                    "user_not_in_team",
20130                                    "other",
20131                                    "removed_and_transfer_dest_should_differ",
20132                                    "removed_and_transfer_admin_should_differ",
20133                                    "transfer_dest_user_not_found",
20134                                    "transfer_dest_user_not_in_team",
20135                                    "transfer_admin_user_not_in_team",
20136                                    "transfer_admin_user_not_found",
20137                                    "unspecified_transfer_admin_id",
20138                                    "transfer_admin_is_not_admin",
20139                                    "recipient_not_verified"];
20140        deserializer.deserialize_struct("MembersTransferFilesError", VARIANTS, EnumVisitor)
20141    }
20142}
20143
20144impl ::serde::ser::Serialize for MembersTransferFilesError {
20145    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
20146        // union serializer
20147        use serde::ser::SerializeStruct;
20148        match self {
20149            MembersTransferFilesError::UserNotFound => {
20150                // unit
20151                let mut s = serializer.serialize_struct("MembersTransferFilesError", 1)?;
20152                s.serialize_field(".tag", "user_not_found")?;
20153                s.end()
20154            }
20155            MembersTransferFilesError::UserNotInTeam => {
20156                // unit
20157                let mut s = serializer.serialize_struct("MembersTransferFilesError", 1)?;
20158                s.serialize_field(".tag", "user_not_in_team")?;
20159                s.end()
20160            }
20161            MembersTransferFilesError::RemovedAndTransferDestShouldDiffer => {
20162                // unit
20163                let mut s = serializer.serialize_struct("MembersTransferFilesError", 1)?;
20164                s.serialize_field(".tag", "removed_and_transfer_dest_should_differ")?;
20165                s.end()
20166            }
20167            MembersTransferFilesError::RemovedAndTransferAdminShouldDiffer => {
20168                // unit
20169                let mut s = serializer.serialize_struct("MembersTransferFilesError", 1)?;
20170                s.serialize_field(".tag", "removed_and_transfer_admin_should_differ")?;
20171                s.end()
20172            }
20173            MembersTransferFilesError::TransferDestUserNotFound => {
20174                // unit
20175                let mut s = serializer.serialize_struct("MembersTransferFilesError", 1)?;
20176                s.serialize_field(".tag", "transfer_dest_user_not_found")?;
20177                s.end()
20178            }
20179            MembersTransferFilesError::TransferDestUserNotInTeam => {
20180                // unit
20181                let mut s = serializer.serialize_struct("MembersTransferFilesError", 1)?;
20182                s.serialize_field(".tag", "transfer_dest_user_not_in_team")?;
20183                s.end()
20184            }
20185            MembersTransferFilesError::TransferAdminUserNotInTeam => {
20186                // unit
20187                let mut s = serializer.serialize_struct("MembersTransferFilesError", 1)?;
20188                s.serialize_field(".tag", "transfer_admin_user_not_in_team")?;
20189                s.end()
20190            }
20191            MembersTransferFilesError::TransferAdminUserNotFound => {
20192                // unit
20193                let mut s = serializer.serialize_struct("MembersTransferFilesError", 1)?;
20194                s.serialize_field(".tag", "transfer_admin_user_not_found")?;
20195                s.end()
20196            }
20197            MembersTransferFilesError::UnspecifiedTransferAdminId => {
20198                // unit
20199                let mut s = serializer.serialize_struct("MembersTransferFilesError", 1)?;
20200                s.serialize_field(".tag", "unspecified_transfer_admin_id")?;
20201                s.end()
20202            }
20203            MembersTransferFilesError::TransferAdminIsNotAdmin => {
20204                // unit
20205                let mut s = serializer.serialize_struct("MembersTransferFilesError", 1)?;
20206                s.serialize_field(".tag", "transfer_admin_is_not_admin")?;
20207                s.end()
20208            }
20209            MembersTransferFilesError::RecipientNotVerified => {
20210                // unit
20211                let mut s = serializer.serialize_struct("MembersTransferFilesError", 1)?;
20212                s.serialize_field(".tag", "recipient_not_verified")?;
20213                s.end()
20214            }
20215            MembersTransferFilesError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
20216        }
20217    }
20218}
20219
20220impl ::std::error::Error for MembersTransferFilesError {
20221}
20222
20223impl ::std::fmt::Display for MembersTransferFilesError {
20224    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
20225        match self {
20226            MembersTransferFilesError::UserNotFound => f.write_str("No matching user found. The provided team_member_id, email, or external_id does not exist on this team."),
20227            MembersTransferFilesError::UserNotInTeam => f.write_str("The user is not a member of the team."),
20228            MembersTransferFilesError::RemovedAndTransferDestShouldDiffer => f.write_str("Expected removed user and transfer_dest user to be different."),
20229            MembersTransferFilesError::RemovedAndTransferAdminShouldDiffer => f.write_str("Expected removed user and transfer_admin user to be different."),
20230            MembersTransferFilesError::TransferDestUserNotFound => f.write_str("No matching user found for the argument transfer_dest_id."),
20231            MembersTransferFilesError::TransferDestUserNotInTeam => f.write_str("The provided transfer_dest_id does not exist on this team."),
20232            MembersTransferFilesError::TransferAdminUserNotInTeam => f.write_str("The provided transfer_admin_id does not exist on this team."),
20233            MembersTransferFilesError::TransferAdminUserNotFound => f.write_str("No matching user found for the argument transfer_admin_id."),
20234            MembersTransferFilesError::UnspecifiedTransferAdminId => f.write_str("The transfer_admin_id argument must be provided when file transfer is requested."),
20235            MembersTransferFilesError::TransferAdminIsNotAdmin => f.write_str("Specified transfer_admin user is not a team admin."),
20236            MembersTransferFilesError::RecipientNotVerified => f.write_str("The recipient user's email is not verified."),
20237            _ => write!(f, "{:?}", *self),
20238        }
20239    }
20240}
20241
20242// union extends MembersDeactivateError
20243impl From<MembersDeactivateError> for MembersTransferFilesError {
20244    fn from(parent: MembersDeactivateError) -> Self {
20245        match parent {
20246            MembersDeactivateError::UserNotFound => MembersTransferFilesError::UserNotFound,
20247            MembersDeactivateError::UserNotInTeam => MembersTransferFilesError::UserNotInTeam,
20248            MembersDeactivateError::Other => MembersTransferFilesError::Other,
20249        }
20250    }
20251}
20252#[derive(Debug, Clone, PartialEq, Eq)]
20253#[non_exhaustive] // variants may be added in the future
20254pub enum MembersTransferFormerMembersFilesError {
20255    /// No matching user found. The provided team_member_id, email, or external_id does not exist on
20256    /// this team.
20257    UserNotFound,
20258    /// The user is not a member of the team.
20259    UserNotInTeam,
20260    /// Expected removed user and transfer_dest user to be different.
20261    RemovedAndTransferDestShouldDiffer,
20262    /// Expected removed user and transfer_admin user to be different.
20263    RemovedAndTransferAdminShouldDiffer,
20264    /// No matching user found for the argument transfer_dest_id.
20265    TransferDestUserNotFound,
20266    /// The provided transfer_dest_id does not exist on this team.
20267    TransferDestUserNotInTeam,
20268    /// The provided transfer_admin_id does not exist on this team.
20269    TransferAdminUserNotInTeam,
20270    /// No matching user found for the argument transfer_admin_id.
20271    TransferAdminUserNotFound,
20272    /// The transfer_admin_id argument must be provided when file transfer is requested.
20273    UnspecifiedTransferAdminId,
20274    /// Specified transfer_admin user is not a team admin.
20275    TransferAdminIsNotAdmin,
20276    /// The recipient user's email is not verified.
20277    RecipientNotVerified,
20278    /// The user's data is being transferred. Please wait some time before retrying.
20279    UserDataIsBeingTransferred,
20280    /// No matching removed user found for the argument user.
20281    UserNotRemoved,
20282    /// User files aren't transferable anymore.
20283    UserDataCannotBeTransferred,
20284    /// User's data has already been transferred to another user.
20285    UserDataAlreadyTransferred,
20286    /// Catch-all used for unrecognized values returned from the server. Encountering this value
20287    /// typically indicates that this SDK version is out of date.
20288    Other,
20289}
20290
20291impl<'de> ::serde::de::Deserialize<'de> for MembersTransferFormerMembersFilesError {
20292    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
20293        // union deserializer
20294        use serde::de::{self, MapAccess, Visitor};
20295        struct EnumVisitor;
20296        impl<'de> Visitor<'de> for EnumVisitor {
20297            type Value = MembersTransferFormerMembersFilesError;
20298            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
20299                f.write_str("a MembersTransferFormerMembersFilesError structure")
20300            }
20301            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
20302                let tag: &str = match map.next_key()? {
20303                    Some(".tag") => map.next_value()?,
20304                    _ => return Err(de::Error::missing_field(".tag"))
20305                };
20306                let value = match tag {
20307                    "user_not_found" => MembersTransferFormerMembersFilesError::UserNotFound,
20308                    "user_not_in_team" => MembersTransferFormerMembersFilesError::UserNotInTeam,
20309                    "removed_and_transfer_dest_should_differ" => MembersTransferFormerMembersFilesError::RemovedAndTransferDestShouldDiffer,
20310                    "removed_and_transfer_admin_should_differ" => MembersTransferFormerMembersFilesError::RemovedAndTransferAdminShouldDiffer,
20311                    "transfer_dest_user_not_found" => MembersTransferFormerMembersFilesError::TransferDestUserNotFound,
20312                    "transfer_dest_user_not_in_team" => MembersTransferFormerMembersFilesError::TransferDestUserNotInTeam,
20313                    "transfer_admin_user_not_in_team" => MembersTransferFormerMembersFilesError::TransferAdminUserNotInTeam,
20314                    "transfer_admin_user_not_found" => MembersTransferFormerMembersFilesError::TransferAdminUserNotFound,
20315                    "unspecified_transfer_admin_id" => MembersTransferFormerMembersFilesError::UnspecifiedTransferAdminId,
20316                    "transfer_admin_is_not_admin" => MembersTransferFormerMembersFilesError::TransferAdminIsNotAdmin,
20317                    "recipient_not_verified" => MembersTransferFormerMembersFilesError::RecipientNotVerified,
20318                    "user_data_is_being_transferred" => MembersTransferFormerMembersFilesError::UserDataIsBeingTransferred,
20319                    "user_not_removed" => MembersTransferFormerMembersFilesError::UserNotRemoved,
20320                    "user_data_cannot_be_transferred" => MembersTransferFormerMembersFilesError::UserDataCannotBeTransferred,
20321                    "user_data_already_transferred" => MembersTransferFormerMembersFilesError::UserDataAlreadyTransferred,
20322                    _ => MembersTransferFormerMembersFilesError::Other,
20323                };
20324                crate::eat_json_fields(&mut map)?;
20325                Ok(value)
20326            }
20327        }
20328        const VARIANTS: &[&str] = &["user_not_found",
20329                                    "user_not_in_team",
20330                                    "other",
20331                                    "removed_and_transfer_dest_should_differ",
20332                                    "removed_and_transfer_admin_should_differ",
20333                                    "transfer_dest_user_not_found",
20334                                    "transfer_dest_user_not_in_team",
20335                                    "transfer_admin_user_not_in_team",
20336                                    "transfer_admin_user_not_found",
20337                                    "unspecified_transfer_admin_id",
20338                                    "transfer_admin_is_not_admin",
20339                                    "recipient_not_verified",
20340                                    "user_data_is_being_transferred",
20341                                    "user_not_removed",
20342                                    "user_data_cannot_be_transferred",
20343                                    "user_data_already_transferred"];
20344        deserializer.deserialize_struct("MembersTransferFormerMembersFilesError", VARIANTS, EnumVisitor)
20345    }
20346}
20347
20348impl ::serde::ser::Serialize for MembersTransferFormerMembersFilesError {
20349    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
20350        // union serializer
20351        use serde::ser::SerializeStruct;
20352        match self {
20353            MembersTransferFormerMembersFilesError::UserNotFound => {
20354                // unit
20355                let mut s = serializer.serialize_struct("MembersTransferFormerMembersFilesError", 1)?;
20356                s.serialize_field(".tag", "user_not_found")?;
20357                s.end()
20358            }
20359            MembersTransferFormerMembersFilesError::UserNotInTeam => {
20360                // unit
20361                let mut s = serializer.serialize_struct("MembersTransferFormerMembersFilesError", 1)?;
20362                s.serialize_field(".tag", "user_not_in_team")?;
20363                s.end()
20364            }
20365            MembersTransferFormerMembersFilesError::RemovedAndTransferDestShouldDiffer => {
20366                // unit
20367                let mut s = serializer.serialize_struct("MembersTransferFormerMembersFilesError", 1)?;
20368                s.serialize_field(".tag", "removed_and_transfer_dest_should_differ")?;
20369                s.end()
20370            }
20371            MembersTransferFormerMembersFilesError::RemovedAndTransferAdminShouldDiffer => {
20372                // unit
20373                let mut s = serializer.serialize_struct("MembersTransferFormerMembersFilesError", 1)?;
20374                s.serialize_field(".tag", "removed_and_transfer_admin_should_differ")?;
20375                s.end()
20376            }
20377            MembersTransferFormerMembersFilesError::TransferDestUserNotFound => {
20378                // unit
20379                let mut s = serializer.serialize_struct("MembersTransferFormerMembersFilesError", 1)?;
20380                s.serialize_field(".tag", "transfer_dest_user_not_found")?;
20381                s.end()
20382            }
20383            MembersTransferFormerMembersFilesError::TransferDestUserNotInTeam => {
20384                // unit
20385                let mut s = serializer.serialize_struct("MembersTransferFormerMembersFilesError", 1)?;
20386                s.serialize_field(".tag", "transfer_dest_user_not_in_team")?;
20387                s.end()
20388            }
20389            MembersTransferFormerMembersFilesError::TransferAdminUserNotInTeam => {
20390                // unit
20391                let mut s = serializer.serialize_struct("MembersTransferFormerMembersFilesError", 1)?;
20392                s.serialize_field(".tag", "transfer_admin_user_not_in_team")?;
20393                s.end()
20394            }
20395            MembersTransferFormerMembersFilesError::TransferAdminUserNotFound => {
20396                // unit
20397                let mut s = serializer.serialize_struct("MembersTransferFormerMembersFilesError", 1)?;
20398                s.serialize_field(".tag", "transfer_admin_user_not_found")?;
20399                s.end()
20400            }
20401            MembersTransferFormerMembersFilesError::UnspecifiedTransferAdminId => {
20402                // unit
20403                let mut s = serializer.serialize_struct("MembersTransferFormerMembersFilesError", 1)?;
20404                s.serialize_field(".tag", "unspecified_transfer_admin_id")?;
20405                s.end()
20406            }
20407            MembersTransferFormerMembersFilesError::TransferAdminIsNotAdmin => {
20408                // unit
20409                let mut s = serializer.serialize_struct("MembersTransferFormerMembersFilesError", 1)?;
20410                s.serialize_field(".tag", "transfer_admin_is_not_admin")?;
20411                s.end()
20412            }
20413            MembersTransferFormerMembersFilesError::RecipientNotVerified => {
20414                // unit
20415                let mut s = serializer.serialize_struct("MembersTransferFormerMembersFilesError", 1)?;
20416                s.serialize_field(".tag", "recipient_not_verified")?;
20417                s.end()
20418            }
20419            MembersTransferFormerMembersFilesError::UserDataIsBeingTransferred => {
20420                // unit
20421                let mut s = serializer.serialize_struct("MembersTransferFormerMembersFilesError", 1)?;
20422                s.serialize_field(".tag", "user_data_is_being_transferred")?;
20423                s.end()
20424            }
20425            MembersTransferFormerMembersFilesError::UserNotRemoved => {
20426                // unit
20427                let mut s = serializer.serialize_struct("MembersTransferFormerMembersFilesError", 1)?;
20428                s.serialize_field(".tag", "user_not_removed")?;
20429                s.end()
20430            }
20431            MembersTransferFormerMembersFilesError::UserDataCannotBeTransferred => {
20432                // unit
20433                let mut s = serializer.serialize_struct("MembersTransferFormerMembersFilesError", 1)?;
20434                s.serialize_field(".tag", "user_data_cannot_be_transferred")?;
20435                s.end()
20436            }
20437            MembersTransferFormerMembersFilesError::UserDataAlreadyTransferred => {
20438                // unit
20439                let mut s = serializer.serialize_struct("MembersTransferFormerMembersFilesError", 1)?;
20440                s.serialize_field(".tag", "user_data_already_transferred")?;
20441                s.end()
20442            }
20443            MembersTransferFormerMembersFilesError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
20444        }
20445    }
20446}
20447
20448impl ::std::error::Error for MembersTransferFormerMembersFilesError {
20449}
20450
20451impl ::std::fmt::Display for MembersTransferFormerMembersFilesError {
20452    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
20453        match self {
20454            MembersTransferFormerMembersFilesError::UserNotFound => f.write_str("No matching user found. The provided team_member_id, email, or external_id does not exist on this team."),
20455            MembersTransferFormerMembersFilesError::UserNotInTeam => f.write_str("The user is not a member of the team."),
20456            MembersTransferFormerMembersFilesError::RemovedAndTransferDestShouldDiffer => f.write_str("Expected removed user and transfer_dest user to be different."),
20457            MembersTransferFormerMembersFilesError::RemovedAndTransferAdminShouldDiffer => f.write_str("Expected removed user and transfer_admin user to be different."),
20458            MembersTransferFormerMembersFilesError::TransferDestUserNotFound => f.write_str("No matching user found for the argument transfer_dest_id."),
20459            MembersTransferFormerMembersFilesError::TransferDestUserNotInTeam => f.write_str("The provided transfer_dest_id does not exist on this team."),
20460            MembersTransferFormerMembersFilesError::TransferAdminUserNotInTeam => f.write_str("The provided transfer_admin_id does not exist on this team."),
20461            MembersTransferFormerMembersFilesError::TransferAdminUserNotFound => f.write_str("No matching user found for the argument transfer_admin_id."),
20462            MembersTransferFormerMembersFilesError::UnspecifiedTransferAdminId => f.write_str("The transfer_admin_id argument must be provided when file transfer is requested."),
20463            MembersTransferFormerMembersFilesError::TransferAdminIsNotAdmin => f.write_str("Specified transfer_admin user is not a team admin."),
20464            MembersTransferFormerMembersFilesError::RecipientNotVerified => f.write_str("The recipient user's email is not verified."),
20465            MembersTransferFormerMembersFilesError::UserDataIsBeingTransferred => f.write_str("The user's data is being transferred. Please wait some time before retrying."),
20466            MembersTransferFormerMembersFilesError::UserNotRemoved => f.write_str("No matching removed user found for the argument user."),
20467            MembersTransferFormerMembersFilesError::UserDataCannotBeTransferred => f.write_str("User files aren't transferable anymore."),
20468            MembersTransferFormerMembersFilesError::UserDataAlreadyTransferred => f.write_str("User's data has already been transferred to another user."),
20469            _ => write!(f, "{:?}", *self),
20470        }
20471    }
20472}
20473
20474// union extends MembersTransferFilesError
20475impl From<MembersTransferFilesError> for MembersTransferFormerMembersFilesError {
20476    fn from(parent: MembersTransferFilesError) -> Self {
20477        match parent {
20478            MembersTransferFilesError::UserNotFound => MembersTransferFormerMembersFilesError::UserNotFound,
20479            MembersTransferFilesError::UserNotInTeam => MembersTransferFormerMembersFilesError::UserNotInTeam,
20480            MembersTransferFilesError::Other => MembersTransferFormerMembersFilesError::Other,
20481            MembersTransferFilesError::RemovedAndTransferDestShouldDiffer => MembersTransferFormerMembersFilesError::RemovedAndTransferDestShouldDiffer,
20482            MembersTransferFilesError::RemovedAndTransferAdminShouldDiffer => MembersTransferFormerMembersFilesError::RemovedAndTransferAdminShouldDiffer,
20483            MembersTransferFilesError::TransferDestUserNotFound => MembersTransferFormerMembersFilesError::TransferDestUserNotFound,
20484            MembersTransferFilesError::TransferDestUserNotInTeam => MembersTransferFormerMembersFilesError::TransferDestUserNotInTeam,
20485            MembersTransferFilesError::TransferAdminUserNotInTeam => MembersTransferFormerMembersFilesError::TransferAdminUserNotInTeam,
20486            MembersTransferFilesError::TransferAdminUserNotFound => MembersTransferFormerMembersFilesError::TransferAdminUserNotFound,
20487            MembersTransferFilesError::UnspecifiedTransferAdminId => MembersTransferFormerMembersFilesError::UnspecifiedTransferAdminId,
20488            MembersTransferFilesError::TransferAdminIsNotAdmin => MembersTransferFormerMembersFilesError::TransferAdminIsNotAdmin,
20489            MembersTransferFilesError::RecipientNotVerified => MembersTransferFormerMembersFilesError::RecipientNotVerified,
20490        }
20491    }
20492}
20493/// Exactly one of team_member_id, email, or external_id must be provided to identify the user
20494/// account.
20495#[derive(Debug, Clone, PartialEq, Eq)]
20496#[non_exhaustive] // structs may have more fields added in the future.
20497pub struct MembersUnsuspendArg {
20498    /// Identity of user to unsuspend.
20499    pub user: UserSelectorArg,
20500}
20501
20502impl MembersUnsuspendArg {
20503    pub fn new(user: UserSelectorArg) -> Self {
20504        MembersUnsuspendArg {
20505            user,
20506        }
20507    }
20508}
20509
20510const MEMBERS_UNSUSPEND_ARG_FIELDS: &[&str] = &["user"];
20511impl MembersUnsuspendArg {
20512    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
20513        map: V,
20514    ) -> Result<MembersUnsuspendArg, V::Error> {
20515        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
20516    }
20517
20518    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
20519        mut map: V,
20520        optional: bool,
20521    ) -> Result<Option<MembersUnsuspendArg>, V::Error> {
20522        let mut field_user = None;
20523        let mut nothing = true;
20524        while let Some(key) = map.next_key::<&str>()? {
20525            nothing = false;
20526            match key {
20527                "user" => {
20528                    if field_user.is_some() {
20529                        return Err(::serde::de::Error::duplicate_field("user"));
20530                    }
20531                    field_user = Some(map.next_value()?);
20532                }
20533                _ => {
20534                    // unknown field allowed and ignored
20535                    map.next_value::<::serde_json::Value>()?;
20536                }
20537            }
20538        }
20539        if optional && nothing {
20540            return Ok(None);
20541        }
20542        let result = MembersUnsuspendArg {
20543            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
20544        };
20545        Ok(Some(result))
20546    }
20547
20548    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
20549        &self,
20550        s: &mut S::SerializeStruct,
20551    ) -> Result<(), S::Error> {
20552        use serde::ser::SerializeStruct;
20553        s.serialize_field("user", &self.user)?;
20554        Ok(())
20555    }
20556}
20557
20558impl<'de> ::serde::de::Deserialize<'de> for MembersUnsuspendArg {
20559    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
20560        // struct deserializer
20561        use serde::de::{MapAccess, Visitor};
20562        struct StructVisitor;
20563        impl<'de> Visitor<'de> for StructVisitor {
20564            type Value = MembersUnsuspendArg;
20565            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
20566                f.write_str("a MembersUnsuspendArg struct")
20567            }
20568            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
20569                MembersUnsuspendArg::internal_deserialize(map)
20570            }
20571        }
20572        deserializer.deserialize_struct("MembersUnsuspendArg", MEMBERS_UNSUSPEND_ARG_FIELDS, StructVisitor)
20573    }
20574}
20575
20576impl ::serde::ser::Serialize for MembersUnsuspendArg {
20577    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
20578        // struct serializer
20579        use serde::ser::SerializeStruct;
20580        let mut s = serializer.serialize_struct("MembersUnsuspendArg", 1)?;
20581        self.internal_serialize::<S>(&mut s)?;
20582        s.end()
20583    }
20584}
20585
20586#[derive(Debug, Clone, PartialEq, Eq)]
20587#[non_exhaustive] // variants may be added in the future
20588pub enum MembersUnsuspendError {
20589    /// No matching user found. The provided team_member_id, email, or external_id does not exist on
20590    /// this team.
20591    UserNotFound,
20592    /// The user is not a member of the team.
20593    UserNotInTeam,
20594    /// The user is unsuspended, so it cannot be unsuspended again.
20595    UnsuspendNonSuspendedMember,
20596    /// Team is full. The organization has no available licenses.
20597    TeamLicenseLimit,
20598    /// Catch-all used for unrecognized values returned from the server. Encountering this value
20599    /// typically indicates that this SDK version is out of date.
20600    Other,
20601}
20602
20603impl<'de> ::serde::de::Deserialize<'de> for MembersUnsuspendError {
20604    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
20605        // union deserializer
20606        use serde::de::{self, MapAccess, Visitor};
20607        struct EnumVisitor;
20608        impl<'de> Visitor<'de> for EnumVisitor {
20609            type Value = MembersUnsuspendError;
20610            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
20611                f.write_str("a MembersUnsuspendError structure")
20612            }
20613            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
20614                let tag: &str = match map.next_key()? {
20615                    Some(".tag") => map.next_value()?,
20616                    _ => return Err(de::Error::missing_field(".tag"))
20617                };
20618                let value = match tag {
20619                    "user_not_found" => MembersUnsuspendError::UserNotFound,
20620                    "user_not_in_team" => MembersUnsuspendError::UserNotInTeam,
20621                    "unsuspend_non_suspended_member" => MembersUnsuspendError::UnsuspendNonSuspendedMember,
20622                    "team_license_limit" => MembersUnsuspendError::TeamLicenseLimit,
20623                    _ => MembersUnsuspendError::Other,
20624                };
20625                crate::eat_json_fields(&mut map)?;
20626                Ok(value)
20627            }
20628        }
20629        const VARIANTS: &[&str] = &["user_not_found",
20630                                    "user_not_in_team",
20631                                    "other",
20632                                    "unsuspend_non_suspended_member",
20633                                    "team_license_limit"];
20634        deserializer.deserialize_struct("MembersUnsuspendError", VARIANTS, EnumVisitor)
20635    }
20636}
20637
20638impl ::serde::ser::Serialize for MembersUnsuspendError {
20639    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
20640        // union serializer
20641        use serde::ser::SerializeStruct;
20642        match self {
20643            MembersUnsuspendError::UserNotFound => {
20644                // unit
20645                let mut s = serializer.serialize_struct("MembersUnsuspendError", 1)?;
20646                s.serialize_field(".tag", "user_not_found")?;
20647                s.end()
20648            }
20649            MembersUnsuspendError::UserNotInTeam => {
20650                // unit
20651                let mut s = serializer.serialize_struct("MembersUnsuspendError", 1)?;
20652                s.serialize_field(".tag", "user_not_in_team")?;
20653                s.end()
20654            }
20655            MembersUnsuspendError::UnsuspendNonSuspendedMember => {
20656                // unit
20657                let mut s = serializer.serialize_struct("MembersUnsuspendError", 1)?;
20658                s.serialize_field(".tag", "unsuspend_non_suspended_member")?;
20659                s.end()
20660            }
20661            MembersUnsuspendError::TeamLicenseLimit => {
20662                // unit
20663                let mut s = serializer.serialize_struct("MembersUnsuspendError", 1)?;
20664                s.serialize_field(".tag", "team_license_limit")?;
20665                s.end()
20666            }
20667            MembersUnsuspendError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
20668        }
20669    }
20670}
20671
20672impl ::std::error::Error for MembersUnsuspendError {
20673}
20674
20675impl ::std::fmt::Display for MembersUnsuspendError {
20676    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
20677        match self {
20678            MembersUnsuspendError::UserNotFound => f.write_str("No matching user found. The provided team_member_id, email, or external_id does not exist on this team."),
20679            MembersUnsuspendError::UserNotInTeam => f.write_str("The user is not a member of the team."),
20680            MembersUnsuspendError::UnsuspendNonSuspendedMember => f.write_str("The user is unsuspended, so it cannot be unsuspended again."),
20681            MembersUnsuspendError::TeamLicenseLimit => f.write_str("Team is full. The organization has no available licenses."),
20682            _ => write!(f, "{:?}", *self),
20683        }
20684    }
20685}
20686
20687// union extends MembersDeactivateError
20688impl From<MembersDeactivateError> for MembersUnsuspendError {
20689    fn from(parent: MembersDeactivateError) -> Self {
20690        match parent {
20691            MembersDeactivateError::UserNotFound => MembersUnsuspendError::UserNotFound,
20692            MembersDeactivateError::UserNotInTeam => MembersUnsuspendError::UserNotInTeam,
20693            MembersDeactivateError::Other => MembersUnsuspendError::Other,
20694        }
20695    }
20696}
20697#[derive(Debug, Clone, PartialEq, Eq)]
20698#[non_exhaustive] // variants may be added in the future
20699pub enum MobileClientPlatform {
20700    /// Official Dropbox iPhone client.
20701    Iphone,
20702    /// Official Dropbox iPad client.
20703    Ipad,
20704    /// Official Dropbox Android client.
20705    Android,
20706    /// Official Dropbox Windows phone client.
20707    WindowsPhone,
20708    /// Official Dropbox Blackberry client.
20709    Blackberry,
20710    /// Catch-all used for unrecognized values returned from the server. Encountering this value
20711    /// typically indicates that this SDK version is out of date.
20712    Other,
20713}
20714
20715impl<'de> ::serde::de::Deserialize<'de> for MobileClientPlatform {
20716    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
20717        // union deserializer
20718        use serde::de::{self, MapAccess, Visitor};
20719        struct EnumVisitor;
20720        impl<'de> Visitor<'de> for EnumVisitor {
20721            type Value = MobileClientPlatform;
20722            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
20723                f.write_str("a MobileClientPlatform structure")
20724            }
20725            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
20726                let tag: &str = match map.next_key()? {
20727                    Some(".tag") => map.next_value()?,
20728                    _ => return Err(de::Error::missing_field(".tag"))
20729                };
20730                let value = match tag {
20731                    "iphone" => MobileClientPlatform::Iphone,
20732                    "ipad" => MobileClientPlatform::Ipad,
20733                    "android" => MobileClientPlatform::Android,
20734                    "windows_phone" => MobileClientPlatform::WindowsPhone,
20735                    "blackberry" => MobileClientPlatform::Blackberry,
20736                    _ => MobileClientPlatform::Other,
20737                };
20738                crate::eat_json_fields(&mut map)?;
20739                Ok(value)
20740            }
20741        }
20742        const VARIANTS: &[&str] = &["iphone",
20743                                    "ipad",
20744                                    "android",
20745                                    "windows_phone",
20746                                    "blackberry",
20747                                    "other"];
20748        deserializer.deserialize_struct("MobileClientPlatform", VARIANTS, EnumVisitor)
20749    }
20750}
20751
20752impl ::serde::ser::Serialize for MobileClientPlatform {
20753    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
20754        // union serializer
20755        use serde::ser::SerializeStruct;
20756        match self {
20757            MobileClientPlatform::Iphone => {
20758                // unit
20759                let mut s = serializer.serialize_struct("MobileClientPlatform", 1)?;
20760                s.serialize_field(".tag", "iphone")?;
20761                s.end()
20762            }
20763            MobileClientPlatform::Ipad => {
20764                // unit
20765                let mut s = serializer.serialize_struct("MobileClientPlatform", 1)?;
20766                s.serialize_field(".tag", "ipad")?;
20767                s.end()
20768            }
20769            MobileClientPlatform::Android => {
20770                // unit
20771                let mut s = serializer.serialize_struct("MobileClientPlatform", 1)?;
20772                s.serialize_field(".tag", "android")?;
20773                s.end()
20774            }
20775            MobileClientPlatform::WindowsPhone => {
20776                // unit
20777                let mut s = serializer.serialize_struct("MobileClientPlatform", 1)?;
20778                s.serialize_field(".tag", "windows_phone")?;
20779                s.end()
20780            }
20781            MobileClientPlatform::Blackberry => {
20782                // unit
20783                let mut s = serializer.serialize_struct("MobileClientPlatform", 1)?;
20784                s.serialize_field(".tag", "blackberry")?;
20785                s.end()
20786            }
20787            MobileClientPlatform::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
20788        }
20789    }
20790}
20791
20792/// Information about linked Dropbox mobile client sessions.
20793#[derive(Debug, Clone, PartialEq, Eq)]
20794#[non_exhaustive] // structs may have more fields added in the future.
20795pub struct MobileClientSession {
20796    /// The session id.
20797    pub session_id: String,
20798    /// The device name.
20799    pub device_name: String,
20800    /// The mobile application type.
20801    pub client_type: MobileClientPlatform,
20802    /// The IP address of the last activity from this session.
20803    pub ip_address: Option<String>,
20804    /// The country from which the last activity from this session was made.
20805    pub country: Option<String>,
20806    /// The time this session was created.
20807    pub created: Option<crate::types::common::DropboxTimestamp>,
20808    /// The time of the last activity from this session.
20809    pub updated: Option<crate::types::common::DropboxTimestamp>,
20810    /// The dropbox client version.
20811    pub client_version: Option<String>,
20812    /// The hosting OS version.
20813    pub os_version: Option<String>,
20814    /// last carrier used by the device.
20815    pub last_carrier: Option<String>,
20816}
20817
20818impl MobileClientSession {
20819    pub fn new(
20820        session_id: String,
20821        device_name: String,
20822        client_type: MobileClientPlatform,
20823    ) -> Self {
20824        MobileClientSession {
20825            session_id,
20826            device_name,
20827            client_type,
20828            ip_address: None,
20829            country: None,
20830            created: None,
20831            updated: None,
20832            client_version: None,
20833            os_version: None,
20834            last_carrier: None,
20835        }
20836    }
20837
20838    pub fn with_ip_address(mut self, value: String) -> Self {
20839        self.ip_address = Some(value);
20840        self
20841    }
20842
20843    pub fn with_country(mut self, value: String) -> Self {
20844        self.country = Some(value);
20845        self
20846    }
20847
20848    pub fn with_created(mut self, value: crate::types::common::DropboxTimestamp) -> Self {
20849        self.created = Some(value);
20850        self
20851    }
20852
20853    pub fn with_updated(mut self, value: crate::types::common::DropboxTimestamp) -> Self {
20854        self.updated = Some(value);
20855        self
20856    }
20857
20858    pub fn with_client_version(mut self, value: String) -> Self {
20859        self.client_version = Some(value);
20860        self
20861    }
20862
20863    pub fn with_os_version(mut self, value: String) -> Self {
20864        self.os_version = Some(value);
20865        self
20866    }
20867
20868    pub fn with_last_carrier(mut self, value: String) -> Self {
20869        self.last_carrier = Some(value);
20870        self
20871    }
20872}
20873
20874const MOBILE_CLIENT_SESSION_FIELDS: &[&str] = &["session_id",
20875                                                "device_name",
20876                                                "client_type",
20877                                                "ip_address",
20878                                                "country",
20879                                                "created",
20880                                                "updated",
20881                                                "client_version",
20882                                                "os_version",
20883                                                "last_carrier"];
20884impl MobileClientSession {
20885    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
20886        map: V,
20887    ) -> Result<MobileClientSession, V::Error> {
20888        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
20889    }
20890
20891    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
20892        mut map: V,
20893        optional: bool,
20894    ) -> Result<Option<MobileClientSession>, V::Error> {
20895        let mut field_session_id = None;
20896        let mut field_device_name = None;
20897        let mut field_client_type = None;
20898        let mut field_ip_address = None;
20899        let mut field_country = None;
20900        let mut field_created = None;
20901        let mut field_updated = None;
20902        let mut field_client_version = None;
20903        let mut field_os_version = None;
20904        let mut field_last_carrier = None;
20905        let mut nothing = true;
20906        while let Some(key) = map.next_key::<&str>()? {
20907            nothing = false;
20908            match key {
20909                "session_id" => {
20910                    if field_session_id.is_some() {
20911                        return Err(::serde::de::Error::duplicate_field("session_id"));
20912                    }
20913                    field_session_id = Some(map.next_value()?);
20914                }
20915                "device_name" => {
20916                    if field_device_name.is_some() {
20917                        return Err(::serde::de::Error::duplicate_field("device_name"));
20918                    }
20919                    field_device_name = Some(map.next_value()?);
20920                }
20921                "client_type" => {
20922                    if field_client_type.is_some() {
20923                        return Err(::serde::de::Error::duplicate_field("client_type"));
20924                    }
20925                    field_client_type = Some(map.next_value()?);
20926                }
20927                "ip_address" => {
20928                    if field_ip_address.is_some() {
20929                        return Err(::serde::de::Error::duplicate_field("ip_address"));
20930                    }
20931                    field_ip_address = Some(map.next_value()?);
20932                }
20933                "country" => {
20934                    if field_country.is_some() {
20935                        return Err(::serde::de::Error::duplicate_field("country"));
20936                    }
20937                    field_country = Some(map.next_value()?);
20938                }
20939                "created" => {
20940                    if field_created.is_some() {
20941                        return Err(::serde::de::Error::duplicate_field("created"));
20942                    }
20943                    field_created = Some(map.next_value()?);
20944                }
20945                "updated" => {
20946                    if field_updated.is_some() {
20947                        return Err(::serde::de::Error::duplicate_field("updated"));
20948                    }
20949                    field_updated = Some(map.next_value()?);
20950                }
20951                "client_version" => {
20952                    if field_client_version.is_some() {
20953                        return Err(::serde::de::Error::duplicate_field("client_version"));
20954                    }
20955                    field_client_version = Some(map.next_value()?);
20956                }
20957                "os_version" => {
20958                    if field_os_version.is_some() {
20959                        return Err(::serde::de::Error::duplicate_field("os_version"));
20960                    }
20961                    field_os_version = Some(map.next_value()?);
20962                }
20963                "last_carrier" => {
20964                    if field_last_carrier.is_some() {
20965                        return Err(::serde::de::Error::duplicate_field("last_carrier"));
20966                    }
20967                    field_last_carrier = Some(map.next_value()?);
20968                }
20969                _ => {
20970                    // unknown field allowed and ignored
20971                    map.next_value::<::serde_json::Value>()?;
20972                }
20973            }
20974        }
20975        if optional && nothing {
20976            return Ok(None);
20977        }
20978        let result = MobileClientSession {
20979            session_id: field_session_id.ok_or_else(|| ::serde::de::Error::missing_field("session_id"))?,
20980            device_name: field_device_name.ok_or_else(|| ::serde::de::Error::missing_field("device_name"))?,
20981            client_type: field_client_type.ok_or_else(|| ::serde::de::Error::missing_field("client_type"))?,
20982            ip_address: field_ip_address.and_then(Option::flatten),
20983            country: field_country.and_then(Option::flatten),
20984            created: field_created.and_then(Option::flatten),
20985            updated: field_updated.and_then(Option::flatten),
20986            client_version: field_client_version.and_then(Option::flatten),
20987            os_version: field_os_version.and_then(Option::flatten),
20988            last_carrier: field_last_carrier.and_then(Option::flatten),
20989        };
20990        Ok(Some(result))
20991    }
20992
20993    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
20994        &self,
20995        s: &mut S::SerializeStruct,
20996    ) -> Result<(), S::Error> {
20997        use serde::ser::SerializeStruct;
20998        s.serialize_field("session_id", &self.session_id)?;
20999        s.serialize_field("device_name", &self.device_name)?;
21000        s.serialize_field("client_type", &self.client_type)?;
21001        if let Some(val) = &self.ip_address {
21002            s.serialize_field("ip_address", val)?;
21003        }
21004        if let Some(val) = &self.country {
21005            s.serialize_field("country", val)?;
21006        }
21007        if let Some(val) = &self.created {
21008            s.serialize_field("created", val)?;
21009        }
21010        if let Some(val) = &self.updated {
21011            s.serialize_field("updated", val)?;
21012        }
21013        if let Some(val) = &self.client_version {
21014            s.serialize_field("client_version", val)?;
21015        }
21016        if let Some(val) = &self.os_version {
21017            s.serialize_field("os_version", val)?;
21018        }
21019        if let Some(val) = &self.last_carrier {
21020            s.serialize_field("last_carrier", val)?;
21021        }
21022        Ok(())
21023    }
21024}
21025
21026impl<'de> ::serde::de::Deserialize<'de> for MobileClientSession {
21027    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
21028        // struct deserializer
21029        use serde::de::{MapAccess, Visitor};
21030        struct StructVisitor;
21031        impl<'de> Visitor<'de> for StructVisitor {
21032            type Value = MobileClientSession;
21033            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
21034                f.write_str("a MobileClientSession struct")
21035            }
21036            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
21037                MobileClientSession::internal_deserialize(map)
21038            }
21039        }
21040        deserializer.deserialize_struct("MobileClientSession", MOBILE_CLIENT_SESSION_FIELDS, StructVisitor)
21041    }
21042}
21043
21044impl ::serde::ser::Serialize for MobileClientSession {
21045    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
21046        // struct serializer
21047        use serde::ser::SerializeStruct;
21048        let mut s = serializer.serialize_struct("MobileClientSession", 10)?;
21049        self.internal_serialize::<S>(&mut s)?;
21050        s.end()
21051    }
21052}
21053
21054// struct extends DeviceSession
21055impl From<MobileClientSession> for DeviceSession {
21056    fn from(subtype: MobileClientSession) -> Self {
21057        Self {
21058            session_id: subtype.session_id,
21059            ip_address: subtype.ip_address,
21060            country: subtype.country,
21061            created: subtype.created,
21062            updated: subtype.updated,
21063        }
21064    }
21065}
21066/// Properties of a namespace.
21067#[derive(Debug, Clone, PartialEq, Eq)]
21068#[non_exhaustive] // structs may have more fields added in the future.
21069pub struct NamespaceMetadata {
21070    /// The name of this namespace.
21071    pub name: String,
21072    /// The ID of this namespace.
21073    pub namespace_id: crate::types::common::SharedFolderId,
21074    /// The type of this namespace.
21075    pub namespace_type: NamespaceType,
21076    /// If this is a team member or app folder, the ID of the owning team member. Otherwise, this
21077    /// field is not present.
21078    pub team_member_id: Option<crate::types::team_common::TeamMemberId>,
21079}
21080
21081impl NamespaceMetadata {
21082    pub fn new(
21083        name: String,
21084        namespace_id: crate::types::common::SharedFolderId,
21085        namespace_type: NamespaceType,
21086    ) -> Self {
21087        NamespaceMetadata {
21088            name,
21089            namespace_id,
21090            namespace_type,
21091            team_member_id: None,
21092        }
21093    }
21094
21095    pub fn with_team_member_id(mut self, value: crate::types::team_common::TeamMemberId) -> Self {
21096        self.team_member_id = Some(value);
21097        self
21098    }
21099}
21100
21101const NAMESPACE_METADATA_FIELDS: &[&str] = &["name",
21102                                             "namespace_id",
21103                                             "namespace_type",
21104                                             "team_member_id"];
21105impl NamespaceMetadata {
21106    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
21107        map: V,
21108    ) -> Result<NamespaceMetadata, V::Error> {
21109        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
21110    }
21111
21112    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
21113        mut map: V,
21114        optional: bool,
21115    ) -> Result<Option<NamespaceMetadata>, V::Error> {
21116        let mut field_name = None;
21117        let mut field_namespace_id = None;
21118        let mut field_namespace_type = None;
21119        let mut field_team_member_id = None;
21120        let mut nothing = true;
21121        while let Some(key) = map.next_key::<&str>()? {
21122            nothing = false;
21123            match key {
21124                "name" => {
21125                    if field_name.is_some() {
21126                        return Err(::serde::de::Error::duplicate_field("name"));
21127                    }
21128                    field_name = Some(map.next_value()?);
21129                }
21130                "namespace_id" => {
21131                    if field_namespace_id.is_some() {
21132                        return Err(::serde::de::Error::duplicate_field("namespace_id"));
21133                    }
21134                    field_namespace_id = Some(map.next_value()?);
21135                }
21136                "namespace_type" => {
21137                    if field_namespace_type.is_some() {
21138                        return Err(::serde::de::Error::duplicate_field("namespace_type"));
21139                    }
21140                    field_namespace_type = Some(map.next_value()?);
21141                }
21142                "team_member_id" => {
21143                    if field_team_member_id.is_some() {
21144                        return Err(::serde::de::Error::duplicate_field("team_member_id"));
21145                    }
21146                    field_team_member_id = Some(map.next_value()?);
21147                }
21148                _ => {
21149                    // unknown field allowed and ignored
21150                    map.next_value::<::serde_json::Value>()?;
21151                }
21152            }
21153        }
21154        if optional && nothing {
21155            return Ok(None);
21156        }
21157        let result = NamespaceMetadata {
21158            name: field_name.ok_or_else(|| ::serde::de::Error::missing_field("name"))?,
21159            namespace_id: field_namespace_id.ok_or_else(|| ::serde::de::Error::missing_field("namespace_id"))?,
21160            namespace_type: field_namespace_type.ok_or_else(|| ::serde::de::Error::missing_field("namespace_type"))?,
21161            team_member_id: field_team_member_id.and_then(Option::flatten),
21162        };
21163        Ok(Some(result))
21164    }
21165
21166    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
21167        &self,
21168        s: &mut S::SerializeStruct,
21169    ) -> Result<(), S::Error> {
21170        use serde::ser::SerializeStruct;
21171        s.serialize_field("name", &self.name)?;
21172        s.serialize_field("namespace_id", &self.namespace_id)?;
21173        s.serialize_field("namespace_type", &self.namespace_type)?;
21174        if let Some(val) = &self.team_member_id {
21175            s.serialize_field("team_member_id", val)?;
21176        }
21177        Ok(())
21178    }
21179}
21180
21181impl<'de> ::serde::de::Deserialize<'de> for NamespaceMetadata {
21182    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
21183        // struct deserializer
21184        use serde::de::{MapAccess, Visitor};
21185        struct StructVisitor;
21186        impl<'de> Visitor<'de> for StructVisitor {
21187            type Value = NamespaceMetadata;
21188            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
21189                f.write_str("a NamespaceMetadata struct")
21190            }
21191            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
21192                NamespaceMetadata::internal_deserialize(map)
21193            }
21194        }
21195        deserializer.deserialize_struct("NamespaceMetadata", NAMESPACE_METADATA_FIELDS, StructVisitor)
21196    }
21197}
21198
21199impl ::serde::ser::Serialize for NamespaceMetadata {
21200    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
21201        // struct serializer
21202        use serde::ser::SerializeStruct;
21203        let mut s = serializer.serialize_struct("NamespaceMetadata", 4)?;
21204        self.internal_serialize::<S>(&mut s)?;
21205        s.end()
21206    }
21207}
21208
21209#[derive(Debug, Clone, PartialEq, Eq)]
21210#[non_exhaustive] // variants may be added in the future
21211pub enum NamespaceType {
21212    /// App sandbox folder.
21213    AppFolder,
21214    /// Shared folder.
21215    SharedFolder,
21216    /// Top-level team-owned folder.
21217    TeamFolder,
21218    /// Team member's home folder.
21219    TeamMemberFolder,
21220    /// Catch-all used for unrecognized values returned from the server. Encountering this value
21221    /// typically indicates that this SDK version is out of date.
21222    Other,
21223}
21224
21225impl<'de> ::serde::de::Deserialize<'de> for NamespaceType {
21226    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
21227        // union deserializer
21228        use serde::de::{self, MapAccess, Visitor};
21229        struct EnumVisitor;
21230        impl<'de> Visitor<'de> for EnumVisitor {
21231            type Value = NamespaceType;
21232            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
21233                f.write_str("a NamespaceType structure")
21234            }
21235            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
21236                let tag: &str = match map.next_key()? {
21237                    Some(".tag") => map.next_value()?,
21238                    _ => return Err(de::Error::missing_field(".tag"))
21239                };
21240                let value = match tag {
21241                    "app_folder" => NamespaceType::AppFolder,
21242                    "shared_folder" => NamespaceType::SharedFolder,
21243                    "team_folder" => NamespaceType::TeamFolder,
21244                    "team_member_folder" => NamespaceType::TeamMemberFolder,
21245                    _ => NamespaceType::Other,
21246                };
21247                crate::eat_json_fields(&mut map)?;
21248                Ok(value)
21249            }
21250        }
21251        const VARIANTS: &[&str] = &["app_folder",
21252                                    "shared_folder",
21253                                    "team_folder",
21254                                    "team_member_folder",
21255                                    "other"];
21256        deserializer.deserialize_struct("NamespaceType", VARIANTS, EnumVisitor)
21257    }
21258}
21259
21260impl ::serde::ser::Serialize for NamespaceType {
21261    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
21262        // union serializer
21263        use serde::ser::SerializeStruct;
21264        match self {
21265            NamespaceType::AppFolder => {
21266                // unit
21267                let mut s = serializer.serialize_struct("NamespaceType", 1)?;
21268                s.serialize_field(".tag", "app_folder")?;
21269                s.end()
21270            }
21271            NamespaceType::SharedFolder => {
21272                // unit
21273                let mut s = serializer.serialize_struct("NamespaceType", 1)?;
21274                s.serialize_field(".tag", "shared_folder")?;
21275                s.end()
21276            }
21277            NamespaceType::TeamFolder => {
21278                // unit
21279                let mut s = serializer.serialize_struct("NamespaceType", 1)?;
21280                s.serialize_field(".tag", "team_folder")?;
21281                s.end()
21282            }
21283            NamespaceType::TeamMemberFolder => {
21284                // unit
21285                let mut s = serializer.serialize_struct("NamespaceType", 1)?;
21286                s.serialize_field(".tag", "team_member_folder")?;
21287                s.end()
21288            }
21289            NamespaceType::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
21290        }
21291    }
21292}
21293
21294/// User result for setting member custom quota.
21295#[derive(Debug, Clone, PartialEq, Eq)]
21296#[non_exhaustive] // variants may be added in the future
21297pub enum RemoveCustomQuotaResult {
21298    /// Successfully removed user.
21299    Success(UserSelectorArg),
21300    /// Invalid user (not in team).
21301    InvalidUser(UserSelectorArg),
21302    /// Catch-all used for unrecognized values returned from the server. Encountering this value
21303    /// typically indicates that this SDK version is out of date.
21304    Other,
21305}
21306
21307impl<'de> ::serde::de::Deserialize<'de> for RemoveCustomQuotaResult {
21308    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
21309        // union deserializer
21310        use serde::de::{self, MapAccess, Visitor};
21311        struct EnumVisitor;
21312        impl<'de> Visitor<'de> for EnumVisitor {
21313            type Value = RemoveCustomQuotaResult;
21314            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
21315                f.write_str("a RemoveCustomQuotaResult structure")
21316            }
21317            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
21318                let tag: &str = match map.next_key()? {
21319                    Some(".tag") => map.next_value()?,
21320                    _ => return Err(de::Error::missing_field(".tag"))
21321                };
21322                let value = match tag {
21323                    "success" => {
21324                        match map.next_key()? {
21325                            Some("success") => RemoveCustomQuotaResult::Success(map.next_value()?),
21326                            None => return Err(de::Error::missing_field("success")),
21327                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
21328                        }
21329                    }
21330                    "invalid_user" => {
21331                        match map.next_key()? {
21332                            Some("invalid_user") => RemoveCustomQuotaResult::InvalidUser(map.next_value()?),
21333                            None => return Err(de::Error::missing_field("invalid_user")),
21334                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
21335                        }
21336                    }
21337                    _ => RemoveCustomQuotaResult::Other,
21338                };
21339                crate::eat_json_fields(&mut map)?;
21340                Ok(value)
21341            }
21342        }
21343        const VARIANTS: &[&str] = &["success",
21344                                    "invalid_user",
21345                                    "other"];
21346        deserializer.deserialize_struct("RemoveCustomQuotaResult", VARIANTS, EnumVisitor)
21347    }
21348}
21349
21350impl ::serde::ser::Serialize for RemoveCustomQuotaResult {
21351    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
21352        // union serializer
21353        use serde::ser::SerializeStruct;
21354        match self {
21355            RemoveCustomQuotaResult::Success(x) => {
21356                // union or polymporphic struct
21357                let mut s = serializer.serialize_struct("RemoveCustomQuotaResult", 2)?;
21358                s.serialize_field(".tag", "success")?;
21359                s.serialize_field("success", x)?;
21360                s.end()
21361            }
21362            RemoveCustomQuotaResult::InvalidUser(x) => {
21363                // union or polymporphic struct
21364                let mut s = serializer.serialize_struct("RemoveCustomQuotaResult", 2)?;
21365                s.serialize_field(".tag", "invalid_user")?;
21366                s.serialize_field("invalid_user", x)?;
21367                s.end()
21368            }
21369            RemoveCustomQuotaResult::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
21370        }
21371    }
21372}
21373
21374#[derive(Debug, Clone, PartialEq, Eq)]
21375#[non_exhaustive] // structs may have more fields added in the future.
21376pub struct RemovedStatus {
21377    /// True if the removed team member is recoverable.
21378    pub is_recoverable: bool,
21379    /// True if the team member's account was converted to individual account.
21380    pub is_disconnected: bool,
21381}
21382
21383impl RemovedStatus {
21384    pub fn new(is_recoverable: bool, is_disconnected: bool) -> Self {
21385        RemovedStatus {
21386            is_recoverable,
21387            is_disconnected,
21388        }
21389    }
21390}
21391
21392const REMOVED_STATUS_FIELDS: &[&str] = &["is_recoverable",
21393                                         "is_disconnected"];
21394impl RemovedStatus {
21395    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
21396        map: V,
21397    ) -> Result<RemovedStatus, V::Error> {
21398        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
21399    }
21400
21401    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
21402        mut map: V,
21403        optional: bool,
21404    ) -> Result<Option<RemovedStatus>, V::Error> {
21405        let mut field_is_recoverable = None;
21406        let mut field_is_disconnected = None;
21407        let mut nothing = true;
21408        while let Some(key) = map.next_key::<&str>()? {
21409            nothing = false;
21410            match key {
21411                "is_recoverable" => {
21412                    if field_is_recoverable.is_some() {
21413                        return Err(::serde::de::Error::duplicate_field("is_recoverable"));
21414                    }
21415                    field_is_recoverable = Some(map.next_value()?);
21416                }
21417                "is_disconnected" => {
21418                    if field_is_disconnected.is_some() {
21419                        return Err(::serde::de::Error::duplicate_field("is_disconnected"));
21420                    }
21421                    field_is_disconnected = Some(map.next_value()?);
21422                }
21423                _ => {
21424                    // unknown field allowed and ignored
21425                    map.next_value::<::serde_json::Value>()?;
21426                }
21427            }
21428        }
21429        if optional && nothing {
21430            return Ok(None);
21431        }
21432        let result = RemovedStatus {
21433            is_recoverable: field_is_recoverable.ok_or_else(|| ::serde::de::Error::missing_field("is_recoverable"))?,
21434            is_disconnected: field_is_disconnected.ok_or_else(|| ::serde::de::Error::missing_field("is_disconnected"))?,
21435        };
21436        Ok(Some(result))
21437    }
21438
21439    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
21440        &self,
21441        s: &mut S::SerializeStruct,
21442    ) -> Result<(), S::Error> {
21443        use serde::ser::SerializeStruct;
21444        s.serialize_field("is_recoverable", &self.is_recoverable)?;
21445        s.serialize_field("is_disconnected", &self.is_disconnected)?;
21446        Ok(())
21447    }
21448}
21449
21450impl<'de> ::serde::de::Deserialize<'de> for RemovedStatus {
21451    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
21452        // struct deserializer
21453        use serde::de::{MapAccess, Visitor};
21454        struct StructVisitor;
21455        impl<'de> Visitor<'de> for StructVisitor {
21456            type Value = RemovedStatus;
21457            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
21458                f.write_str("a RemovedStatus struct")
21459            }
21460            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
21461                RemovedStatus::internal_deserialize(map)
21462            }
21463        }
21464        deserializer.deserialize_struct("RemovedStatus", REMOVED_STATUS_FIELDS, StructVisitor)
21465    }
21466}
21467
21468impl ::serde::ser::Serialize for RemovedStatus {
21469    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
21470        // struct serializer
21471        use serde::ser::SerializeStruct;
21472        let mut s = serializer.serialize_struct("RemovedStatus", 2)?;
21473        self.internal_serialize::<S>(&mut s)?;
21474        s.end()
21475    }
21476}
21477
21478/// Result of trying to resend verification email to a secondary email address. 'success' is the
21479/// only value indicating that a verification email was successfully sent. The other values explain
21480/// the type of error that occurred, and include the email for which the error occurred.
21481#[derive(Debug, Clone, PartialEq, Eq)]
21482#[non_exhaustive] // variants may be added in the future
21483pub enum ResendSecondaryEmailResult {
21484    /// A verification email was successfully sent to the secondary email address.
21485    Success(crate::types::common::EmailAddress),
21486    /// This secondary email address is not pending for the user.
21487    NotPending(crate::types::common::EmailAddress),
21488    /// Too many emails are being sent to this email address. Please try again later.
21489    RateLimited(crate::types::common::EmailAddress),
21490    /// Catch-all used for unrecognized values returned from the server. Encountering this value
21491    /// typically indicates that this SDK version is out of date.
21492    Other,
21493}
21494
21495impl<'de> ::serde::de::Deserialize<'de> for ResendSecondaryEmailResult {
21496    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
21497        // union deserializer
21498        use serde::de::{self, MapAccess, Visitor};
21499        struct EnumVisitor;
21500        impl<'de> Visitor<'de> for EnumVisitor {
21501            type Value = ResendSecondaryEmailResult;
21502            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
21503                f.write_str("a ResendSecondaryEmailResult structure")
21504            }
21505            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
21506                let tag: &str = match map.next_key()? {
21507                    Some(".tag") => map.next_value()?,
21508                    _ => return Err(de::Error::missing_field(".tag"))
21509                };
21510                let value = match tag {
21511                    "success" => {
21512                        match map.next_key()? {
21513                            Some("success") => ResendSecondaryEmailResult::Success(map.next_value()?),
21514                            None => return Err(de::Error::missing_field("success")),
21515                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
21516                        }
21517                    }
21518                    "not_pending" => {
21519                        match map.next_key()? {
21520                            Some("not_pending") => ResendSecondaryEmailResult::NotPending(map.next_value()?),
21521                            None => return Err(de::Error::missing_field("not_pending")),
21522                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
21523                        }
21524                    }
21525                    "rate_limited" => {
21526                        match map.next_key()? {
21527                            Some("rate_limited") => ResendSecondaryEmailResult::RateLimited(map.next_value()?),
21528                            None => return Err(de::Error::missing_field("rate_limited")),
21529                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
21530                        }
21531                    }
21532                    _ => ResendSecondaryEmailResult::Other,
21533                };
21534                crate::eat_json_fields(&mut map)?;
21535                Ok(value)
21536            }
21537        }
21538        const VARIANTS: &[&str] = &["success",
21539                                    "not_pending",
21540                                    "rate_limited",
21541                                    "other"];
21542        deserializer.deserialize_struct("ResendSecondaryEmailResult", VARIANTS, EnumVisitor)
21543    }
21544}
21545
21546impl ::serde::ser::Serialize for ResendSecondaryEmailResult {
21547    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
21548        // union serializer
21549        use serde::ser::SerializeStruct;
21550        match self {
21551            ResendSecondaryEmailResult::Success(x) => {
21552                // primitive
21553                let mut s = serializer.serialize_struct("ResendSecondaryEmailResult", 2)?;
21554                s.serialize_field(".tag", "success")?;
21555                s.serialize_field("success", x)?;
21556                s.end()
21557            }
21558            ResendSecondaryEmailResult::NotPending(x) => {
21559                // primitive
21560                let mut s = serializer.serialize_struct("ResendSecondaryEmailResult", 2)?;
21561                s.serialize_field(".tag", "not_pending")?;
21562                s.serialize_field("not_pending", x)?;
21563                s.end()
21564            }
21565            ResendSecondaryEmailResult::RateLimited(x) => {
21566                // primitive
21567                let mut s = serializer.serialize_struct("ResendSecondaryEmailResult", 2)?;
21568                s.serialize_field(".tag", "rate_limited")?;
21569                s.serialize_field("rate_limited", x)?;
21570                s.end()
21571            }
21572            ResendSecondaryEmailResult::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
21573        }
21574    }
21575}
21576
21577#[derive(Debug, Clone, PartialEq, Eq)]
21578#[non_exhaustive] // structs may have more fields added in the future.
21579pub struct ResendVerificationEmailArg {
21580    /// List of users and secondary emails to resend verification emails to.
21581    pub emails_to_resend: Vec<UserSecondaryEmailsArg>,
21582}
21583
21584impl ResendVerificationEmailArg {
21585    pub fn new(emails_to_resend: Vec<UserSecondaryEmailsArg>) -> Self {
21586        ResendVerificationEmailArg {
21587            emails_to_resend,
21588        }
21589    }
21590}
21591
21592const RESEND_VERIFICATION_EMAIL_ARG_FIELDS: &[&str] = &["emails_to_resend"];
21593impl ResendVerificationEmailArg {
21594    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
21595        map: V,
21596    ) -> Result<ResendVerificationEmailArg, V::Error> {
21597        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
21598    }
21599
21600    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
21601        mut map: V,
21602        optional: bool,
21603    ) -> Result<Option<ResendVerificationEmailArg>, V::Error> {
21604        let mut field_emails_to_resend = None;
21605        let mut nothing = true;
21606        while let Some(key) = map.next_key::<&str>()? {
21607            nothing = false;
21608            match key {
21609                "emails_to_resend" => {
21610                    if field_emails_to_resend.is_some() {
21611                        return Err(::serde::de::Error::duplicate_field("emails_to_resend"));
21612                    }
21613                    field_emails_to_resend = Some(map.next_value()?);
21614                }
21615                _ => {
21616                    // unknown field allowed and ignored
21617                    map.next_value::<::serde_json::Value>()?;
21618                }
21619            }
21620        }
21621        if optional && nothing {
21622            return Ok(None);
21623        }
21624        let result = ResendVerificationEmailArg {
21625            emails_to_resend: field_emails_to_resend.ok_or_else(|| ::serde::de::Error::missing_field("emails_to_resend"))?,
21626        };
21627        Ok(Some(result))
21628    }
21629
21630    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
21631        &self,
21632        s: &mut S::SerializeStruct,
21633    ) -> Result<(), S::Error> {
21634        use serde::ser::SerializeStruct;
21635        s.serialize_field("emails_to_resend", &self.emails_to_resend)?;
21636        Ok(())
21637    }
21638}
21639
21640impl<'de> ::serde::de::Deserialize<'de> for ResendVerificationEmailArg {
21641    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
21642        // struct deserializer
21643        use serde::de::{MapAccess, Visitor};
21644        struct StructVisitor;
21645        impl<'de> Visitor<'de> for StructVisitor {
21646            type Value = ResendVerificationEmailArg;
21647            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
21648                f.write_str("a ResendVerificationEmailArg struct")
21649            }
21650            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
21651                ResendVerificationEmailArg::internal_deserialize(map)
21652            }
21653        }
21654        deserializer.deserialize_struct("ResendVerificationEmailArg", RESEND_VERIFICATION_EMAIL_ARG_FIELDS, StructVisitor)
21655    }
21656}
21657
21658impl ::serde::ser::Serialize for ResendVerificationEmailArg {
21659    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
21660        // struct serializer
21661        use serde::ser::SerializeStruct;
21662        let mut s = serializer.serialize_struct("ResendVerificationEmailArg", 1)?;
21663        self.internal_serialize::<S>(&mut s)?;
21664        s.end()
21665    }
21666}
21667
21668/// List of users and resend results.
21669#[derive(Debug, Clone, PartialEq, Eq)]
21670#[non_exhaustive] // structs may have more fields added in the future.
21671pub struct ResendVerificationEmailResult {
21672    pub results: Vec<UserResendResult>,
21673}
21674
21675impl ResendVerificationEmailResult {
21676    pub fn new(results: Vec<UserResendResult>) -> Self {
21677        ResendVerificationEmailResult {
21678            results,
21679        }
21680    }
21681}
21682
21683const RESEND_VERIFICATION_EMAIL_RESULT_FIELDS: &[&str] = &["results"];
21684impl ResendVerificationEmailResult {
21685    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
21686        map: V,
21687    ) -> Result<ResendVerificationEmailResult, V::Error> {
21688        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
21689    }
21690
21691    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
21692        mut map: V,
21693        optional: bool,
21694    ) -> Result<Option<ResendVerificationEmailResult>, V::Error> {
21695        let mut field_results = None;
21696        let mut nothing = true;
21697        while let Some(key) = map.next_key::<&str>()? {
21698            nothing = false;
21699            match key {
21700                "results" => {
21701                    if field_results.is_some() {
21702                        return Err(::serde::de::Error::duplicate_field("results"));
21703                    }
21704                    field_results = Some(map.next_value()?);
21705                }
21706                _ => {
21707                    // unknown field allowed and ignored
21708                    map.next_value::<::serde_json::Value>()?;
21709                }
21710            }
21711        }
21712        if optional && nothing {
21713            return Ok(None);
21714        }
21715        let result = ResendVerificationEmailResult {
21716            results: field_results.ok_or_else(|| ::serde::de::Error::missing_field("results"))?,
21717        };
21718        Ok(Some(result))
21719    }
21720
21721    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
21722        &self,
21723        s: &mut S::SerializeStruct,
21724    ) -> Result<(), S::Error> {
21725        use serde::ser::SerializeStruct;
21726        s.serialize_field("results", &self.results)?;
21727        Ok(())
21728    }
21729}
21730
21731impl<'de> ::serde::de::Deserialize<'de> for ResendVerificationEmailResult {
21732    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
21733        // struct deserializer
21734        use serde::de::{MapAccess, Visitor};
21735        struct StructVisitor;
21736        impl<'de> Visitor<'de> for StructVisitor {
21737            type Value = ResendVerificationEmailResult;
21738            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
21739                f.write_str("a ResendVerificationEmailResult struct")
21740            }
21741            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
21742                ResendVerificationEmailResult::internal_deserialize(map)
21743            }
21744        }
21745        deserializer.deserialize_struct("ResendVerificationEmailResult", RESEND_VERIFICATION_EMAIL_RESULT_FIELDS, StructVisitor)
21746    }
21747}
21748
21749impl ::serde::ser::Serialize for ResendVerificationEmailResult {
21750    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
21751        // struct serializer
21752        use serde::ser::SerializeStruct;
21753        let mut s = serializer.serialize_struct("ResendVerificationEmailResult", 1)?;
21754        self.internal_serialize::<S>(&mut s)?;
21755        s.end()
21756    }
21757}
21758
21759#[derive(Debug, Clone, PartialEq, Eq)]
21760#[non_exhaustive] // structs may have more fields added in the future.
21761pub struct RevokeDesktopClientArg {
21762    /// The session id.
21763    pub session_id: String,
21764    /// The unique id of the member owning the device.
21765    pub team_member_id: String,
21766    /// Whether to delete all files of the account (this is possible only if supported by the
21767    /// desktop client and  will be made the next time the client access the account).
21768    pub delete_on_unlink: bool,
21769}
21770
21771impl RevokeDesktopClientArg {
21772    pub fn new(session_id: String, team_member_id: String) -> Self {
21773        RevokeDesktopClientArg {
21774            session_id,
21775            team_member_id,
21776            delete_on_unlink: false,
21777        }
21778    }
21779
21780    pub fn with_delete_on_unlink(mut self, value: bool) -> Self {
21781        self.delete_on_unlink = value;
21782        self
21783    }
21784}
21785
21786const REVOKE_DESKTOP_CLIENT_ARG_FIELDS: &[&str] = &["session_id",
21787                                                    "team_member_id",
21788                                                    "delete_on_unlink"];
21789impl RevokeDesktopClientArg {
21790    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
21791        map: V,
21792    ) -> Result<RevokeDesktopClientArg, V::Error> {
21793        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
21794    }
21795
21796    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
21797        mut map: V,
21798        optional: bool,
21799    ) -> Result<Option<RevokeDesktopClientArg>, V::Error> {
21800        let mut field_session_id = None;
21801        let mut field_team_member_id = None;
21802        let mut field_delete_on_unlink = None;
21803        let mut nothing = true;
21804        while let Some(key) = map.next_key::<&str>()? {
21805            nothing = false;
21806            match key {
21807                "session_id" => {
21808                    if field_session_id.is_some() {
21809                        return Err(::serde::de::Error::duplicate_field("session_id"));
21810                    }
21811                    field_session_id = Some(map.next_value()?);
21812                }
21813                "team_member_id" => {
21814                    if field_team_member_id.is_some() {
21815                        return Err(::serde::de::Error::duplicate_field("team_member_id"));
21816                    }
21817                    field_team_member_id = Some(map.next_value()?);
21818                }
21819                "delete_on_unlink" => {
21820                    if field_delete_on_unlink.is_some() {
21821                        return Err(::serde::de::Error::duplicate_field("delete_on_unlink"));
21822                    }
21823                    field_delete_on_unlink = Some(map.next_value()?);
21824                }
21825                _ => {
21826                    // unknown field allowed and ignored
21827                    map.next_value::<::serde_json::Value>()?;
21828                }
21829            }
21830        }
21831        if optional && nothing {
21832            return Ok(None);
21833        }
21834        let result = RevokeDesktopClientArg {
21835            session_id: field_session_id.ok_or_else(|| ::serde::de::Error::missing_field("session_id"))?,
21836            team_member_id: field_team_member_id.ok_or_else(|| ::serde::de::Error::missing_field("team_member_id"))?,
21837            delete_on_unlink: field_delete_on_unlink.unwrap_or(false),
21838        };
21839        Ok(Some(result))
21840    }
21841
21842    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
21843        &self,
21844        s: &mut S::SerializeStruct,
21845    ) -> Result<(), S::Error> {
21846        use serde::ser::SerializeStruct;
21847        s.serialize_field("session_id", &self.session_id)?;
21848        s.serialize_field("team_member_id", &self.team_member_id)?;
21849        if self.delete_on_unlink {
21850            s.serialize_field("delete_on_unlink", &self.delete_on_unlink)?;
21851        }
21852        Ok(())
21853    }
21854}
21855
21856impl<'de> ::serde::de::Deserialize<'de> for RevokeDesktopClientArg {
21857    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
21858        // struct deserializer
21859        use serde::de::{MapAccess, Visitor};
21860        struct StructVisitor;
21861        impl<'de> Visitor<'de> for StructVisitor {
21862            type Value = RevokeDesktopClientArg;
21863            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
21864                f.write_str("a RevokeDesktopClientArg struct")
21865            }
21866            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
21867                RevokeDesktopClientArg::internal_deserialize(map)
21868            }
21869        }
21870        deserializer.deserialize_struct("RevokeDesktopClientArg", REVOKE_DESKTOP_CLIENT_ARG_FIELDS, StructVisitor)
21871    }
21872}
21873
21874impl ::serde::ser::Serialize for RevokeDesktopClientArg {
21875    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
21876        // struct serializer
21877        use serde::ser::SerializeStruct;
21878        let mut s = serializer.serialize_struct("RevokeDesktopClientArg", 3)?;
21879        self.internal_serialize::<S>(&mut s)?;
21880        s.end()
21881    }
21882}
21883
21884// struct extends DeviceSessionArg
21885impl From<RevokeDesktopClientArg> for DeviceSessionArg {
21886    fn from(subtype: RevokeDesktopClientArg) -> Self {
21887        Self {
21888            session_id: subtype.session_id,
21889            team_member_id: subtype.team_member_id,
21890        }
21891    }
21892}
21893#[derive(Debug, Clone, PartialEq, Eq)]
21894pub enum RevokeDeviceSessionArg {
21895    /// End an active session.
21896    WebSession(DeviceSessionArg),
21897    /// Unlink a linked desktop device.
21898    DesktopClient(RevokeDesktopClientArg),
21899    /// Unlink a linked mobile device.
21900    MobileClient(DeviceSessionArg),
21901}
21902
21903impl<'de> ::serde::de::Deserialize<'de> for RevokeDeviceSessionArg {
21904    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
21905        // union deserializer
21906        use serde::de::{self, MapAccess, Visitor};
21907        struct EnumVisitor;
21908        impl<'de> Visitor<'de> for EnumVisitor {
21909            type Value = RevokeDeviceSessionArg;
21910            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
21911                f.write_str("a RevokeDeviceSessionArg structure")
21912            }
21913            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
21914                let tag: &str = match map.next_key()? {
21915                    Some(".tag") => map.next_value()?,
21916                    _ => return Err(de::Error::missing_field(".tag"))
21917                };
21918                let value = match tag {
21919                    "web_session" => RevokeDeviceSessionArg::WebSession(DeviceSessionArg::internal_deserialize(&mut map)?),
21920                    "desktop_client" => RevokeDeviceSessionArg::DesktopClient(RevokeDesktopClientArg::internal_deserialize(&mut map)?),
21921                    "mobile_client" => RevokeDeviceSessionArg::MobileClient(DeviceSessionArg::internal_deserialize(&mut map)?),
21922                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
21923                };
21924                crate::eat_json_fields(&mut map)?;
21925                Ok(value)
21926            }
21927        }
21928        const VARIANTS: &[&str] = &["web_session",
21929                                    "desktop_client",
21930                                    "mobile_client"];
21931        deserializer.deserialize_struct("RevokeDeviceSessionArg", VARIANTS, EnumVisitor)
21932    }
21933}
21934
21935impl ::serde::ser::Serialize for RevokeDeviceSessionArg {
21936    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
21937        // union serializer
21938        use serde::ser::SerializeStruct;
21939        match self {
21940            RevokeDeviceSessionArg::WebSession(x) => {
21941                // struct
21942                let mut s = serializer.serialize_struct("RevokeDeviceSessionArg", 3)?;
21943                s.serialize_field(".tag", "web_session")?;
21944                x.internal_serialize::<S>(&mut s)?;
21945                s.end()
21946            }
21947            RevokeDeviceSessionArg::DesktopClient(x) => {
21948                // struct
21949                let mut s = serializer.serialize_struct("RevokeDeviceSessionArg", 4)?;
21950                s.serialize_field(".tag", "desktop_client")?;
21951                x.internal_serialize::<S>(&mut s)?;
21952                s.end()
21953            }
21954            RevokeDeviceSessionArg::MobileClient(x) => {
21955                // struct
21956                let mut s = serializer.serialize_struct("RevokeDeviceSessionArg", 3)?;
21957                s.serialize_field(".tag", "mobile_client")?;
21958                x.internal_serialize::<S>(&mut s)?;
21959                s.end()
21960            }
21961        }
21962    }
21963}
21964
21965#[derive(Debug, Clone, PartialEq, Eq)]
21966#[non_exhaustive] // structs may have more fields added in the future.
21967pub struct RevokeDeviceSessionBatchArg {
21968    pub revoke_devices: Vec<RevokeDeviceSessionArg>,
21969}
21970
21971impl RevokeDeviceSessionBatchArg {
21972    pub fn new(revoke_devices: Vec<RevokeDeviceSessionArg>) -> Self {
21973        RevokeDeviceSessionBatchArg {
21974            revoke_devices,
21975        }
21976    }
21977}
21978
21979const REVOKE_DEVICE_SESSION_BATCH_ARG_FIELDS: &[&str] = &["revoke_devices"];
21980impl RevokeDeviceSessionBatchArg {
21981    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
21982        map: V,
21983    ) -> Result<RevokeDeviceSessionBatchArg, V::Error> {
21984        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
21985    }
21986
21987    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
21988        mut map: V,
21989        optional: bool,
21990    ) -> Result<Option<RevokeDeviceSessionBatchArg>, V::Error> {
21991        let mut field_revoke_devices = None;
21992        let mut nothing = true;
21993        while let Some(key) = map.next_key::<&str>()? {
21994            nothing = false;
21995            match key {
21996                "revoke_devices" => {
21997                    if field_revoke_devices.is_some() {
21998                        return Err(::serde::de::Error::duplicate_field("revoke_devices"));
21999                    }
22000                    field_revoke_devices = Some(map.next_value()?);
22001                }
22002                _ => {
22003                    // unknown field allowed and ignored
22004                    map.next_value::<::serde_json::Value>()?;
22005                }
22006            }
22007        }
22008        if optional && nothing {
22009            return Ok(None);
22010        }
22011        let result = RevokeDeviceSessionBatchArg {
22012            revoke_devices: field_revoke_devices.ok_or_else(|| ::serde::de::Error::missing_field("revoke_devices"))?,
22013        };
22014        Ok(Some(result))
22015    }
22016
22017    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
22018        &self,
22019        s: &mut S::SerializeStruct,
22020    ) -> Result<(), S::Error> {
22021        use serde::ser::SerializeStruct;
22022        s.serialize_field("revoke_devices", &self.revoke_devices)?;
22023        Ok(())
22024    }
22025}
22026
22027impl<'de> ::serde::de::Deserialize<'de> for RevokeDeviceSessionBatchArg {
22028    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
22029        // struct deserializer
22030        use serde::de::{MapAccess, Visitor};
22031        struct StructVisitor;
22032        impl<'de> Visitor<'de> for StructVisitor {
22033            type Value = RevokeDeviceSessionBatchArg;
22034            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
22035                f.write_str("a RevokeDeviceSessionBatchArg struct")
22036            }
22037            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
22038                RevokeDeviceSessionBatchArg::internal_deserialize(map)
22039            }
22040        }
22041        deserializer.deserialize_struct("RevokeDeviceSessionBatchArg", REVOKE_DEVICE_SESSION_BATCH_ARG_FIELDS, StructVisitor)
22042    }
22043}
22044
22045impl ::serde::ser::Serialize for RevokeDeviceSessionBatchArg {
22046    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
22047        // struct serializer
22048        use serde::ser::SerializeStruct;
22049        let mut s = serializer.serialize_struct("RevokeDeviceSessionBatchArg", 1)?;
22050        self.internal_serialize::<S>(&mut s)?;
22051        s.end()
22052    }
22053}
22054
22055
22056#[derive(Debug, Clone, PartialEq, Eq)]
22057#[non_exhaustive] // variants may be added in the future
22058pub enum RevokeDeviceSessionBatchError {
22059    /// Catch-all used for unrecognized values returned from the server. Encountering this value
22060    /// typically indicates that this SDK version is out of date.
22061    Other,
22062}
22063
22064impl<'de> ::serde::de::Deserialize<'de> for RevokeDeviceSessionBatchError {
22065    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
22066        // union deserializer
22067        use serde::de::{self, MapAccess, Visitor};
22068        struct EnumVisitor;
22069        impl<'de> Visitor<'de> for EnumVisitor {
22070            type Value = RevokeDeviceSessionBatchError;
22071            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
22072                f.write_str("a RevokeDeviceSessionBatchError structure")
22073            }
22074            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
22075                let tag: &str = match map.next_key()? {
22076                    Some(".tag") => map.next_value()?,
22077                    _ => return Err(de::Error::missing_field(".tag"))
22078                };
22079                // open enum with no defined variants
22080                let _ = tag;
22081                crate::eat_json_fields(&mut map)?;
22082                Ok(RevokeDeviceSessionBatchError::Other)
22083            }
22084        }
22085        const VARIANTS: &[&str] = &["other"];
22086        deserializer.deserialize_struct("RevokeDeviceSessionBatchError", VARIANTS, EnumVisitor)
22087    }
22088}
22089
22090impl ::serde::ser::Serialize for RevokeDeviceSessionBatchError {
22091    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
22092        // union serializer
22093        #![allow(unused_variables)]
22094        Err(::serde::ser::Error::custom("cannot serialize an open union with no defined variants"))
22095    }
22096}
22097
22098impl ::std::error::Error for RevokeDeviceSessionBatchError {
22099}
22100
22101impl ::std::fmt::Display for RevokeDeviceSessionBatchError {
22102    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
22103        write!(f, "{:?}", *self)
22104    }
22105}
22106
22107#[derive(Debug, Clone, PartialEq, Eq)]
22108#[non_exhaustive] // structs may have more fields added in the future.
22109pub struct RevokeDeviceSessionBatchResult {
22110    pub revoke_devices_status: Vec<RevokeDeviceSessionStatus>,
22111}
22112
22113impl RevokeDeviceSessionBatchResult {
22114    pub fn new(revoke_devices_status: Vec<RevokeDeviceSessionStatus>) -> Self {
22115        RevokeDeviceSessionBatchResult {
22116            revoke_devices_status,
22117        }
22118    }
22119}
22120
22121const REVOKE_DEVICE_SESSION_BATCH_RESULT_FIELDS: &[&str] = &["revoke_devices_status"];
22122impl RevokeDeviceSessionBatchResult {
22123    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
22124        map: V,
22125    ) -> Result<RevokeDeviceSessionBatchResult, V::Error> {
22126        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
22127    }
22128
22129    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
22130        mut map: V,
22131        optional: bool,
22132    ) -> Result<Option<RevokeDeviceSessionBatchResult>, V::Error> {
22133        let mut field_revoke_devices_status = None;
22134        let mut nothing = true;
22135        while let Some(key) = map.next_key::<&str>()? {
22136            nothing = false;
22137            match key {
22138                "revoke_devices_status" => {
22139                    if field_revoke_devices_status.is_some() {
22140                        return Err(::serde::de::Error::duplicate_field("revoke_devices_status"));
22141                    }
22142                    field_revoke_devices_status = Some(map.next_value()?);
22143                }
22144                _ => {
22145                    // unknown field allowed and ignored
22146                    map.next_value::<::serde_json::Value>()?;
22147                }
22148            }
22149        }
22150        if optional && nothing {
22151            return Ok(None);
22152        }
22153        let result = RevokeDeviceSessionBatchResult {
22154            revoke_devices_status: field_revoke_devices_status.ok_or_else(|| ::serde::de::Error::missing_field("revoke_devices_status"))?,
22155        };
22156        Ok(Some(result))
22157    }
22158
22159    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
22160        &self,
22161        s: &mut S::SerializeStruct,
22162    ) -> Result<(), S::Error> {
22163        use serde::ser::SerializeStruct;
22164        s.serialize_field("revoke_devices_status", &self.revoke_devices_status)?;
22165        Ok(())
22166    }
22167}
22168
22169impl<'de> ::serde::de::Deserialize<'de> for RevokeDeviceSessionBatchResult {
22170    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
22171        // struct deserializer
22172        use serde::de::{MapAccess, Visitor};
22173        struct StructVisitor;
22174        impl<'de> Visitor<'de> for StructVisitor {
22175            type Value = RevokeDeviceSessionBatchResult;
22176            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
22177                f.write_str("a RevokeDeviceSessionBatchResult struct")
22178            }
22179            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
22180                RevokeDeviceSessionBatchResult::internal_deserialize(map)
22181            }
22182        }
22183        deserializer.deserialize_struct("RevokeDeviceSessionBatchResult", REVOKE_DEVICE_SESSION_BATCH_RESULT_FIELDS, StructVisitor)
22184    }
22185}
22186
22187impl ::serde::ser::Serialize for RevokeDeviceSessionBatchResult {
22188    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
22189        // struct serializer
22190        use serde::ser::SerializeStruct;
22191        let mut s = serializer.serialize_struct("RevokeDeviceSessionBatchResult", 1)?;
22192        self.internal_serialize::<S>(&mut s)?;
22193        s.end()
22194    }
22195}
22196
22197#[derive(Debug, Clone, PartialEq, Eq)]
22198#[non_exhaustive] // variants may be added in the future
22199pub enum RevokeDeviceSessionError {
22200    /// Device session not found.
22201    DeviceSessionNotFound,
22202    /// Member not found.
22203    MemberNotFound,
22204    /// Catch-all used for unrecognized values returned from the server. Encountering this value
22205    /// typically indicates that this SDK version is out of date.
22206    Other,
22207}
22208
22209impl<'de> ::serde::de::Deserialize<'de> for RevokeDeviceSessionError {
22210    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
22211        // union deserializer
22212        use serde::de::{self, MapAccess, Visitor};
22213        struct EnumVisitor;
22214        impl<'de> Visitor<'de> for EnumVisitor {
22215            type Value = RevokeDeviceSessionError;
22216            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
22217                f.write_str("a RevokeDeviceSessionError structure")
22218            }
22219            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
22220                let tag: &str = match map.next_key()? {
22221                    Some(".tag") => map.next_value()?,
22222                    _ => return Err(de::Error::missing_field(".tag"))
22223                };
22224                let value = match tag {
22225                    "device_session_not_found" => RevokeDeviceSessionError::DeviceSessionNotFound,
22226                    "member_not_found" => RevokeDeviceSessionError::MemberNotFound,
22227                    _ => RevokeDeviceSessionError::Other,
22228                };
22229                crate::eat_json_fields(&mut map)?;
22230                Ok(value)
22231            }
22232        }
22233        const VARIANTS: &[&str] = &["device_session_not_found",
22234                                    "member_not_found",
22235                                    "other"];
22236        deserializer.deserialize_struct("RevokeDeviceSessionError", VARIANTS, EnumVisitor)
22237    }
22238}
22239
22240impl ::serde::ser::Serialize for RevokeDeviceSessionError {
22241    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
22242        // union serializer
22243        use serde::ser::SerializeStruct;
22244        match self {
22245            RevokeDeviceSessionError::DeviceSessionNotFound => {
22246                // unit
22247                let mut s = serializer.serialize_struct("RevokeDeviceSessionError", 1)?;
22248                s.serialize_field(".tag", "device_session_not_found")?;
22249                s.end()
22250            }
22251            RevokeDeviceSessionError::MemberNotFound => {
22252                // unit
22253                let mut s = serializer.serialize_struct("RevokeDeviceSessionError", 1)?;
22254                s.serialize_field(".tag", "member_not_found")?;
22255                s.end()
22256            }
22257            RevokeDeviceSessionError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
22258        }
22259    }
22260}
22261
22262impl ::std::error::Error for RevokeDeviceSessionError {
22263}
22264
22265impl ::std::fmt::Display for RevokeDeviceSessionError {
22266    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
22267        match self {
22268            RevokeDeviceSessionError::DeviceSessionNotFound => f.write_str("Device session not found."),
22269            RevokeDeviceSessionError::MemberNotFound => f.write_str("Member not found."),
22270            _ => write!(f, "{:?}", *self),
22271        }
22272    }
22273}
22274
22275#[derive(Debug, Clone, PartialEq, Eq)]
22276#[non_exhaustive] // structs may have more fields added in the future.
22277pub struct RevokeDeviceSessionStatus {
22278    /// Result of the revoking request.
22279    pub success: bool,
22280    /// The error cause in case of a failure.
22281    pub error_type: Option<RevokeDeviceSessionError>,
22282}
22283
22284impl RevokeDeviceSessionStatus {
22285    pub fn new(success: bool) -> Self {
22286        RevokeDeviceSessionStatus {
22287            success,
22288            error_type: None,
22289        }
22290    }
22291
22292    pub fn with_error_type(mut self, value: RevokeDeviceSessionError) -> Self {
22293        self.error_type = Some(value);
22294        self
22295    }
22296}
22297
22298const REVOKE_DEVICE_SESSION_STATUS_FIELDS: &[&str] = &["success",
22299                                                       "error_type"];
22300impl RevokeDeviceSessionStatus {
22301    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
22302        map: V,
22303    ) -> Result<RevokeDeviceSessionStatus, V::Error> {
22304        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
22305    }
22306
22307    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
22308        mut map: V,
22309        optional: bool,
22310    ) -> Result<Option<RevokeDeviceSessionStatus>, V::Error> {
22311        let mut field_success = None;
22312        let mut field_error_type = None;
22313        let mut nothing = true;
22314        while let Some(key) = map.next_key::<&str>()? {
22315            nothing = false;
22316            match key {
22317                "success" => {
22318                    if field_success.is_some() {
22319                        return Err(::serde::de::Error::duplicate_field("success"));
22320                    }
22321                    field_success = Some(map.next_value()?);
22322                }
22323                "error_type" => {
22324                    if field_error_type.is_some() {
22325                        return Err(::serde::de::Error::duplicate_field("error_type"));
22326                    }
22327                    field_error_type = Some(map.next_value()?);
22328                }
22329                _ => {
22330                    // unknown field allowed and ignored
22331                    map.next_value::<::serde_json::Value>()?;
22332                }
22333            }
22334        }
22335        if optional && nothing {
22336            return Ok(None);
22337        }
22338        let result = RevokeDeviceSessionStatus {
22339            success: field_success.ok_or_else(|| ::serde::de::Error::missing_field("success"))?,
22340            error_type: field_error_type.and_then(Option::flatten),
22341        };
22342        Ok(Some(result))
22343    }
22344
22345    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
22346        &self,
22347        s: &mut S::SerializeStruct,
22348    ) -> Result<(), S::Error> {
22349        use serde::ser::SerializeStruct;
22350        s.serialize_field("success", &self.success)?;
22351        if let Some(val) = &self.error_type {
22352            s.serialize_field("error_type", val)?;
22353        }
22354        Ok(())
22355    }
22356}
22357
22358impl<'de> ::serde::de::Deserialize<'de> for RevokeDeviceSessionStatus {
22359    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
22360        // struct deserializer
22361        use serde::de::{MapAccess, Visitor};
22362        struct StructVisitor;
22363        impl<'de> Visitor<'de> for StructVisitor {
22364            type Value = RevokeDeviceSessionStatus;
22365            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
22366                f.write_str("a RevokeDeviceSessionStatus struct")
22367            }
22368            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
22369                RevokeDeviceSessionStatus::internal_deserialize(map)
22370            }
22371        }
22372        deserializer.deserialize_struct("RevokeDeviceSessionStatus", REVOKE_DEVICE_SESSION_STATUS_FIELDS, StructVisitor)
22373    }
22374}
22375
22376impl ::serde::ser::Serialize for RevokeDeviceSessionStatus {
22377    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
22378        // struct serializer
22379        use serde::ser::SerializeStruct;
22380        let mut s = serializer.serialize_struct("RevokeDeviceSessionStatus", 2)?;
22381        self.internal_serialize::<S>(&mut s)?;
22382        s.end()
22383    }
22384}
22385
22386#[derive(Debug, Clone, PartialEq, Eq)]
22387#[non_exhaustive] // structs may have more fields added in the future.
22388pub struct RevokeLinkedApiAppArg {
22389    /// The application's unique id.
22390    pub app_id: String,
22391    /// The unique id of the member owning the device.
22392    pub team_member_id: String,
22393    /// This flag is not longer supported, the application dedicated folder (in case the application
22394    /// uses  one) will be kept.
22395    pub keep_app_folder: bool,
22396}
22397
22398impl RevokeLinkedApiAppArg {
22399    pub fn new(app_id: String, team_member_id: String) -> Self {
22400        RevokeLinkedApiAppArg {
22401            app_id,
22402            team_member_id,
22403            keep_app_folder: true,
22404        }
22405    }
22406
22407    pub fn with_keep_app_folder(mut self, value: bool) -> Self {
22408        self.keep_app_folder = value;
22409        self
22410    }
22411}
22412
22413const REVOKE_LINKED_API_APP_ARG_FIELDS: &[&str] = &["app_id",
22414                                                    "team_member_id",
22415                                                    "keep_app_folder"];
22416impl RevokeLinkedApiAppArg {
22417    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
22418        map: V,
22419    ) -> Result<RevokeLinkedApiAppArg, V::Error> {
22420        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
22421    }
22422
22423    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
22424        mut map: V,
22425        optional: bool,
22426    ) -> Result<Option<RevokeLinkedApiAppArg>, V::Error> {
22427        let mut field_app_id = None;
22428        let mut field_team_member_id = None;
22429        let mut field_keep_app_folder = None;
22430        let mut nothing = true;
22431        while let Some(key) = map.next_key::<&str>()? {
22432            nothing = false;
22433            match key {
22434                "app_id" => {
22435                    if field_app_id.is_some() {
22436                        return Err(::serde::de::Error::duplicate_field("app_id"));
22437                    }
22438                    field_app_id = Some(map.next_value()?);
22439                }
22440                "team_member_id" => {
22441                    if field_team_member_id.is_some() {
22442                        return Err(::serde::de::Error::duplicate_field("team_member_id"));
22443                    }
22444                    field_team_member_id = Some(map.next_value()?);
22445                }
22446                "keep_app_folder" => {
22447                    if field_keep_app_folder.is_some() {
22448                        return Err(::serde::de::Error::duplicate_field("keep_app_folder"));
22449                    }
22450                    field_keep_app_folder = Some(map.next_value()?);
22451                }
22452                _ => {
22453                    // unknown field allowed and ignored
22454                    map.next_value::<::serde_json::Value>()?;
22455                }
22456            }
22457        }
22458        if optional && nothing {
22459            return Ok(None);
22460        }
22461        let result = RevokeLinkedApiAppArg {
22462            app_id: field_app_id.ok_or_else(|| ::serde::de::Error::missing_field("app_id"))?,
22463            team_member_id: field_team_member_id.ok_or_else(|| ::serde::de::Error::missing_field("team_member_id"))?,
22464            keep_app_folder: field_keep_app_folder.unwrap_or(true),
22465        };
22466        Ok(Some(result))
22467    }
22468
22469    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
22470        &self,
22471        s: &mut S::SerializeStruct,
22472    ) -> Result<(), S::Error> {
22473        use serde::ser::SerializeStruct;
22474        s.serialize_field("app_id", &self.app_id)?;
22475        s.serialize_field("team_member_id", &self.team_member_id)?;
22476        if !self.keep_app_folder {
22477            s.serialize_field("keep_app_folder", &self.keep_app_folder)?;
22478        }
22479        Ok(())
22480    }
22481}
22482
22483impl<'de> ::serde::de::Deserialize<'de> for RevokeLinkedApiAppArg {
22484    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
22485        // struct deserializer
22486        use serde::de::{MapAccess, Visitor};
22487        struct StructVisitor;
22488        impl<'de> Visitor<'de> for StructVisitor {
22489            type Value = RevokeLinkedApiAppArg;
22490            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
22491                f.write_str("a RevokeLinkedApiAppArg struct")
22492            }
22493            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
22494                RevokeLinkedApiAppArg::internal_deserialize(map)
22495            }
22496        }
22497        deserializer.deserialize_struct("RevokeLinkedApiAppArg", REVOKE_LINKED_API_APP_ARG_FIELDS, StructVisitor)
22498    }
22499}
22500
22501impl ::serde::ser::Serialize for RevokeLinkedApiAppArg {
22502    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
22503        // struct serializer
22504        use serde::ser::SerializeStruct;
22505        let mut s = serializer.serialize_struct("RevokeLinkedApiAppArg", 3)?;
22506        self.internal_serialize::<S>(&mut s)?;
22507        s.end()
22508    }
22509}
22510
22511#[derive(Debug, Clone, PartialEq, Eq)]
22512#[non_exhaustive] // structs may have more fields added in the future.
22513pub struct RevokeLinkedApiAppBatchArg {
22514    pub revoke_linked_app: Vec<RevokeLinkedApiAppArg>,
22515}
22516
22517impl RevokeLinkedApiAppBatchArg {
22518    pub fn new(revoke_linked_app: Vec<RevokeLinkedApiAppArg>) -> Self {
22519        RevokeLinkedApiAppBatchArg {
22520            revoke_linked_app,
22521        }
22522    }
22523}
22524
22525const REVOKE_LINKED_API_APP_BATCH_ARG_FIELDS: &[&str] = &["revoke_linked_app"];
22526impl RevokeLinkedApiAppBatchArg {
22527    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
22528        map: V,
22529    ) -> Result<RevokeLinkedApiAppBatchArg, V::Error> {
22530        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
22531    }
22532
22533    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
22534        mut map: V,
22535        optional: bool,
22536    ) -> Result<Option<RevokeLinkedApiAppBatchArg>, V::Error> {
22537        let mut field_revoke_linked_app = None;
22538        let mut nothing = true;
22539        while let Some(key) = map.next_key::<&str>()? {
22540            nothing = false;
22541            match key {
22542                "revoke_linked_app" => {
22543                    if field_revoke_linked_app.is_some() {
22544                        return Err(::serde::de::Error::duplicate_field("revoke_linked_app"));
22545                    }
22546                    field_revoke_linked_app = Some(map.next_value()?);
22547                }
22548                _ => {
22549                    // unknown field allowed and ignored
22550                    map.next_value::<::serde_json::Value>()?;
22551                }
22552            }
22553        }
22554        if optional && nothing {
22555            return Ok(None);
22556        }
22557        let result = RevokeLinkedApiAppBatchArg {
22558            revoke_linked_app: field_revoke_linked_app.ok_or_else(|| ::serde::de::Error::missing_field("revoke_linked_app"))?,
22559        };
22560        Ok(Some(result))
22561    }
22562
22563    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
22564        &self,
22565        s: &mut S::SerializeStruct,
22566    ) -> Result<(), S::Error> {
22567        use serde::ser::SerializeStruct;
22568        s.serialize_field("revoke_linked_app", &self.revoke_linked_app)?;
22569        Ok(())
22570    }
22571}
22572
22573impl<'de> ::serde::de::Deserialize<'de> for RevokeLinkedApiAppBatchArg {
22574    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
22575        // struct deserializer
22576        use serde::de::{MapAccess, Visitor};
22577        struct StructVisitor;
22578        impl<'de> Visitor<'de> for StructVisitor {
22579            type Value = RevokeLinkedApiAppBatchArg;
22580            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
22581                f.write_str("a RevokeLinkedApiAppBatchArg struct")
22582            }
22583            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
22584                RevokeLinkedApiAppBatchArg::internal_deserialize(map)
22585            }
22586        }
22587        deserializer.deserialize_struct("RevokeLinkedApiAppBatchArg", REVOKE_LINKED_API_APP_BATCH_ARG_FIELDS, StructVisitor)
22588    }
22589}
22590
22591impl ::serde::ser::Serialize for RevokeLinkedApiAppBatchArg {
22592    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
22593        // struct serializer
22594        use serde::ser::SerializeStruct;
22595        let mut s = serializer.serialize_struct("RevokeLinkedApiAppBatchArg", 1)?;
22596        self.internal_serialize::<S>(&mut s)?;
22597        s.end()
22598    }
22599}
22600
22601/// Error returned by
22602/// [`linked_apps_revoke_linked_app_batch()`](crate::team::linked_apps_revoke_linked_app_batch).
22603#[derive(Debug, Clone, PartialEq, Eq)]
22604#[non_exhaustive] // variants may be added in the future
22605pub enum RevokeLinkedAppBatchError {
22606    /// Catch-all used for unrecognized values returned from the server. Encountering this value
22607    /// typically indicates that this SDK version is out of date.
22608    Other,
22609}
22610
22611impl<'de> ::serde::de::Deserialize<'de> for RevokeLinkedAppBatchError {
22612    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
22613        // union deserializer
22614        use serde::de::{self, MapAccess, Visitor};
22615        struct EnumVisitor;
22616        impl<'de> Visitor<'de> for EnumVisitor {
22617            type Value = RevokeLinkedAppBatchError;
22618            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
22619                f.write_str("a RevokeLinkedAppBatchError structure")
22620            }
22621            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
22622                let tag: &str = match map.next_key()? {
22623                    Some(".tag") => map.next_value()?,
22624                    _ => return Err(de::Error::missing_field(".tag"))
22625                };
22626                // open enum with no defined variants
22627                let _ = tag;
22628                crate::eat_json_fields(&mut map)?;
22629                Ok(RevokeLinkedAppBatchError::Other)
22630            }
22631        }
22632        const VARIANTS: &[&str] = &["other"];
22633        deserializer.deserialize_struct("RevokeLinkedAppBatchError", VARIANTS, EnumVisitor)
22634    }
22635}
22636
22637impl ::serde::ser::Serialize for RevokeLinkedAppBatchError {
22638    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
22639        // union serializer
22640        #![allow(unused_variables)]
22641        Err(::serde::ser::Error::custom("cannot serialize an open union with no defined variants"))
22642    }
22643}
22644
22645impl ::std::error::Error for RevokeLinkedAppBatchError {
22646}
22647
22648impl ::std::fmt::Display for RevokeLinkedAppBatchError {
22649    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
22650        write!(f, "{:?}", *self)
22651    }
22652}
22653
22654#[derive(Debug, Clone, PartialEq, Eq)]
22655#[non_exhaustive] // structs may have more fields added in the future.
22656pub struct RevokeLinkedAppBatchResult {
22657    pub revoke_linked_app_status: Vec<RevokeLinkedAppStatus>,
22658}
22659
22660impl RevokeLinkedAppBatchResult {
22661    pub fn new(revoke_linked_app_status: Vec<RevokeLinkedAppStatus>) -> Self {
22662        RevokeLinkedAppBatchResult {
22663            revoke_linked_app_status,
22664        }
22665    }
22666}
22667
22668const REVOKE_LINKED_APP_BATCH_RESULT_FIELDS: &[&str] = &["revoke_linked_app_status"];
22669impl RevokeLinkedAppBatchResult {
22670    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
22671        map: V,
22672    ) -> Result<RevokeLinkedAppBatchResult, V::Error> {
22673        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
22674    }
22675
22676    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
22677        mut map: V,
22678        optional: bool,
22679    ) -> Result<Option<RevokeLinkedAppBatchResult>, V::Error> {
22680        let mut field_revoke_linked_app_status = None;
22681        let mut nothing = true;
22682        while let Some(key) = map.next_key::<&str>()? {
22683            nothing = false;
22684            match key {
22685                "revoke_linked_app_status" => {
22686                    if field_revoke_linked_app_status.is_some() {
22687                        return Err(::serde::de::Error::duplicate_field("revoke_linked_app_status"));
22688                    }
22689                    field_revoke_linked_app_status = Some(map.next_value()?);
22690                }
22691                _ => {
22692                    // unknown field allowed and ignored
22693                    map.next_value::<::serde_json::Value>()?;
22694                }
22695            }
22696        }
22697        if optional && nothing {
22698            return Ok(None);
22699        }
22700        let result = RevokeLinkedAppBatchResult {
22701            revoke_linked_app_status: field_revoke_linked_app_status.ok_or_else(|| ::serde::de::Error::missing_field("revoke_linked_app_status"))?,
22702        };
22703        Ok(Some(result))
22704    }
22705
22706    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
22707        &self,
22708        s: &mut S::SerializeStruct,
22709    ) -> Result<(), S::Error> {
22710        use serde::ser::SerializeStruct;
22711        s.serialize_field("revoke_linked_app_status", &self.revoke_linked_app_status)?;
22712        Ok(())
22713    }
22714}
22715
22716impl<'de> ::serde::de::Deserialize<'de> for RevokeLinkedAppBatchResult {
22717    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
22718        // struct deserializer
22719        use serde::de::{MapAccess, Visitor};
22720        struct StructVisitor;
22721        impl<'de> Visitor<'de> for StructVisitor {
22722            type Value = RevokeLinkedAppBatchResult;
22723            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
22724                f.write_str("a RevokeLinkedAppBatchResult struct")
22725            }
22726            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
22727                RevokeLinkedAppBatchResult::internal_deserialize(map)
22728            }
22729        }
22730        deserializer.deserialize_struct("RevokeLinkedAppBatchResult", REVOKE_LINKED_APP_BATCH_RESULT_FIELDS, StructVisitor)
22731    }
22732}
22733
22734impl ::serde::ser::Serialize for RevokeLinkedAppBatchResult {
22735    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
22736        // struct serializer
22737        use serde::ser::SerializeStruct;
22738        let mut s = serializer.serialize_struct("RevokeLinkedAppBatchResult", 1)?;
22739        self.internal_serialize::<S>(&mut s)?;
22740        s.end()
22741    }
22742}
22743
22744/// Error returned by
22745/// [`linked_apps_revoke_linked_app()`](crate::team::linked_apps_revoke_linked_app).
22746#[derive(Debug, Clone, PartialEq, Eq)]
22747#[non_exhaustive] // variants may be added in the future
22748pub enum RevokeLinkedAppError {
22749    /// Application not found.
22750    AppNotFound,
22751    /// Member not found.
22752    MemberNotFound,
22753    /// App folder removal is not supported.
22754    AppFolderRemovalNotSupported,
22755    /// Catch-all used for unrecognized values returned from the server. Encountering this value
22756    /// typically indicates that this SDK version is out of date.
22757    Other,
22758}
22759
22760impl<'de> ::serde::de::Deserialize<'de> for RevokeLinkedAppError {
22761    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
22762        // union deserializer
22763        use serde::de::{self, MapAccess, Visitor};
22764        struct EnumVisitor;
22765        impl<'de> Visitor<'de> for EnumVisitor {
22766            type Value = RevokeLinkedAppError;
22767            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
22768                f.write_str("a RevokeLinkedAppError structure")
22769            }
22770            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
22771                let tag: &str = match map.next_key()? {
22772                    Some(".tag") => map.next_value()?,
22773                    _ => return Err(de::Error::missing_field(".tag"))
22774                };
22775                let value = match tag {
22776                    "app_not_found" => RevokeLinkedAppError::AppNotFound,
22777                    "member_not_found" => RevokeLinkedAppError::MemberNotFound,
22778                    "app_folder_removal_not_supported" => RevokeLinkedAppError::AppFolderRemovalNotSupported,
22779                    _ => RevokeLinkedAppError::Other,
22780                };
22781                crate::eat_json_fields(&mut map)?;
22782                Ok(value)
22783            }
22784        }
22785        const VARIANTS: &[&str] = &["app_not_found",
22786                                    "member_not_found",
22787                                    "app_folder_removal_not_supported",
22788                                    "other"];
22789        deserializer.deserialize_struct("RevokeLinkedAppError", VARIANTS, EnumVisitor)
22790    }
22791}
22792
22793impl ::serde::ser::Serialize for RevokeLinkedAppError {
22794    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
22795        // union serializer
22796        use serde::ser::SerializeStruct;
22797        match self {
22798            RevokeLinkedAppError::AppNotFound => {
22799                // unit
22800                let mut s = serializer.serialize_struct("RevokeLinkedAppError", 1)?;
22801                s.serialize_field(".tag", "app_not_found")?;
22802                s.end()
22803            }
22804            RevokeLinkedAppError::MemberNotFound => {
22805                // unit
22806                let mut s = serializer.serialize_struct("RevokeLinkedAppError", 1)?;
22807                s.serialize_field(".tag", "member_not_found")?;
22808                s.end()
22809            }
22810            RevokeLinkedAppError::AppFolderRemovalNotSupported => {
22811                // unit
22812                let mut s = serializer.serialize_struct("RevokeLinkedAppError", 1)?;
22813                s.serialize_field(".tag", "app_folder_removal_not_supported")?;
22814                s.end()
22815            }
22816            RevokeLinkedAppError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
22817        }
22818    }
22819}
22820
22821impl ::std::error::Error for RevokeLinkedAppError {
22822}
22823
22824impl ::std::fmt::Display for RevokeLinkedAppError {
22825    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
22826        match self {
22827            RevokeLinkedAppError::AppNotFound => f.write_str("Application not found."),
22828            RevokeLinkedAppError::MemberNotFound => f.write_str("Member not found."),
22829            RevokeLinkedAppError::AppFolderRemovalNotSupported => f.write_str("App folder removal is not supported."),
22830            _ => write!(f, "{:?}", *self),
22831        }
22832    }
22833}
22834
22835#[derive(Debug, Clone, PartialEq, Eq)]
22836#[non_exhaustive] // structs may have more fields added in the future.
22837pub struct RevokeLinkedAppStatus {
22838    /// Result of the revoking request.
22839    pub success: bool,
22840    /// The error cause in case of a failure.
22841    pub error_type: Option<RevokeLinkedAppError>,
22842}
22843
22844impl RevokeLinkedAppStatus {
22845    pub fn new(success: bool) -> Self {
22846        RevokeLinkedAppStatus {
22847            success,
22848            error_type: None,
22849        }
22850    }
22851
22852    pub fn with_error_type(mut self, value: RevokeLinkedAppError) -> Self {
22853        self.error_type = Some(value);
22854        self
22855    }
22856}
22857
22858const REVOKE_LINKED_APP_STATUS_FIELDS: &[&str] = &["success",
22859                                                   "error_type"];
22860impl RevokeLinkedAppStatus {
22861    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
22862        map: V,
22863    ) -> Result<RevokeLinkedAppStatus, V::Error> {
22864        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
22865    }
22866
22867    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
22868        mut map: V,
22869        optional: bool,
22870    ) -> Result<Option<RevokeLinkedAppStatus>, V::Error> {
22871        let mut field_success = None;
22872        let mut field_error_type = None;
22873        let mut nothing = true;
22874        while let Some(key) = map.next_key::<&str>()? {
22875            nothing = false;
22876            match key {
22877                "success" => {
22878                    if field_success.is_some() {
22879                        return Err(::serde::de::Error::duplicate_field("success"));
22880                    }
22881                    field_success = Some(map.next_value()?);
22882                }
22883                "error_type" => {
22884                    if field_error_type.is_some() {
22885                        return Err(::serde::de::Error::duplicate_field("error_type"));
22886                    }
22887                    field_error_type = Some(map.next_value()?);
22888                }
22889                _ => {
22890                    // unknown field allowed and ignored
22891                    map.next_value::<::serde_json::Value>()?;
22892                }
22893            }
22894        }
22895        if optional && nothing {
22896            return Ok(None);
22897        }
22898        let result = RevokeLinkedAppStatus {
22899            success: field_success.ok_or_else(|| ::serde::de::Error::missing_field("success"))?,
22900            error_type: field_error_type.and_then(Option::flatten),
22901        };
22902        Ok(Some(result))
22903    }
22904
22905    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
22906        &self,
22907        s: &mut S::SerializeStruct,
22908    ) -> Result<(), S::Error> {
22909        use serde::ser::SerializeStruct;
22910        s.serialize_field("success", &self.success)?;
22911        if let Some(val) = &self.error_type {
22912            s.serialize_field("error_type", val)?;
22913        }
22914        Ok(())
22915    }
22916}
22917
22918impl<'de> ::serde::de::Deserialize<'de> for RevokeLinkedAppStatus {
22919    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
22920        // struct deserializer
22921        use serde::de::{MapAccess, Visitor};
22922        struct StructVisitor;
22923        impl<'de> Visitor<'de> for StructVisitor {
22924            type Value = RevokeLinkedAppStatus;
22925            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
22926                f.write_str("a RevokeLinkedAppStatus struct")
22927            }
22928            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
22929                RevokeLinkedAppStatus::internal_deserialize(map)
22930            }
22931        }
22932        deserializer.deserialize_struct("RevokeLinkedAppStatus", REVOKE_LINKED_APP_STATUS_FIELDS, StructVisitor)
22933    }
22934}
22935
22936impl ::serde::ser::Serialize for RevokeLinkedAppStatus {
22937    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
22938        // struct serializer
22939        use serde::ser::SerializeStruct;
22940        let mut s = serializer.serialize_struct("RevokeLinkedAppStatus", 2)?;
22941        self.internal_serialize::<S>(&mut s)?;
22942        s.end()
22943    }
22944}
22945
22946#[derive(Debug, Clone, PartialEq, Eq)]
22947#[non_exhaustive] // structs may have more fields added in the future.
22948pub struct SetCustomQuotaArg {
22949    /// List of users and their custom quotas.
22950    pub users_and_quotas: Vec<UserCustomQuotaArg>,
22951}
22952
22953impl SetCustomQuotaArg {
22954    pub fn new(users_and_quotas: Vec<UserCustomQuotaArg>) -> Self {
22955        SetCustomQuotaArg {
22956            users_and_quotas,
22957        }
22958    }
22959}
22960
22961const SET_CUSTOM_QUOTA_ARG_FIELDS: &[&str] = &["users_and_quotas"];
22962impl SetCustomQuotaArg {
22963    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
22964        map: V,
22965    ) -> Result<SetCustomQuotaArg, V::Error> {
22966        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
22967    }
22968
22969    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
22970        mut map: V,
22971        optional: bool,
22972    ) -> Result<Option<SetCustomQuotaArg>, V::Error> {
22973        let mut field_users_and_quotas = None;
22974        let mut nothing = true;
22975        while let Some(key) = map.next_key::<&str>()? {
22976            nothing = false;
22977            match key {
22978                "users_and_quotas" => {
22979                    if field_users_and_quotas.is_some() {
22980                        return Err(::serde::de::Error::duplicate_field("users_and_quotas"));
22981                    }
22982                    field_users_and_quotas = Some(map.next_value()?);
22983                }
22984                _ => {
22985                    // unknown field allowed and ignored
22986                    map.next_value::<::serde_json::Value>()?;
22987                }
22988            }
22989        }
22990        if optional && nothing {
22991            return Ok(None);
22992        }
22993        let result = SetCustomQuotaArg {
22994            users_and_quotas: field_users_and_quotas.ok_or_else(|| ::serde::de::Error::missing_field("users_and_quotas"))?,
22995        };
22996        Ok(Some(result))
22997    }
22998
22999    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
23000        &self,
23001        s: &mut S::SerializeStruct,
23002    ) -> Result<(), S::Error> {
23003        use serde::ser::SerializeStruct;
23004        s.serialize_field("users_and_quotas", &self.users_and_quotas)?;
23005        Ok(())
23006    }
23007}
23008
23009impl<'de> ::serde::de::Deserialize<'de> for SetCustomQuotaArg {
23010    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
23011        // struct deserializer
23012        use serde::de::{MapAccess, Visitor};
23013        struct StructVisitor;
23014        impl<'de> Visitor<'de> for StructVisitor {
23015            type Value = SetCustomQuotaArg;
23016            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
23017                f.write_str("a SetCustomQuotaArg struct")
23018            }
23019            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
23020                SetCustomQuotaArg::internal_deserialize(map)
23021            }
23022        }
23023        deserializer.deserialize_struct("SetCustomQuotaArg", SET_CUSTOM_QUOTA_ARG_FIELDS, StructVisitor)
23024    }
23025}
23026
23027impl ::serde::ser::Serialize for SetCustomQuotaArg {
23028    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
23029        // struct serializer
23030        use serde::ser::SerializeStruct;
23031        let mut s = serializer.serialize_struct("SetCustomQuotaArg", 1)?;
23032        self.internal_serialize::<S>(&mut s)?;
23033        s.end()
23034    }
23035}
23036
23037/// Error returned when setting member custom quota.
23038#[derive(Debug, Clone, PartialEq, Eq)]
23039#[non_exhaustive] // variants may be added in the future
23040pub enum SetCustomQuotaError {
23041    /// A maximum of 1000 users can be set for a single call.
23042    TooManyUsers,
23043    /// Some of the users are on the excluded users list and can't have custom quota set.
23044    SomeUsersAreExcluded,
23045    /// Catch-all used for unrecognized values returned from the server. Encountering this value
23046    /// typically indicates that this SDK version is out of date.
23047    Other,
23048}
23049
23050impl<'de> ::serde::de::Deserialize<'de> for SetCustomQuotaError {
23051    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
23052        // union deserializer
23053        use serde::de::{self, MapAccess, Visitor};
23054        struct EnumVisitor;
23055        impl<'de> Visitor<'de> for EnumVisitor {
23056            type Value = SetCustomQuotaError;
23057            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
23058                f.write_str("a SetCustomQuotaError structure")
23059            }
23060            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
23061                let tag: &str = match map.next_key()? {
23062                    Some(".tag") => map.next_value()?,
23063                    _ => return Err(de::Error::missing_field(".tag"))
23064                };
23065                let value = match tag {
23066                    "too_many_users" => SetCustomQuotaError::TooManyUsers,
23067                    "some_users_are_excluded" => SetCustomQuotaError::SomeUsersAreExcluded,
23068                    _ => SetCustomQuotaError::Other,
23069                };
23070                crate::eat_json_fields(&mut map)?;
23071                Ok(value)
23072            }
23073        }
23074        const VARIANTS: &[&str] = &["too_many_users",
23075                                    "other",
23076                                    "some_users_are_excluded"];
23077        deserializer.deserialize_struct("SetCustomQuotaError", VARIANTS, EnumVisitor)
23078    }
23079}
23080
23081impl ::serde::ser::Serialize for SetCustomQuotaError {
23082    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
23083        // union serializer
23084        use serde::ser::SerializeStruct;
23085        match self {
23086            SetCustomQuotaError::TooManyUsers => {
23087                // unit
23088                let mut s = serializer.serialize_struct("SetCustomQuotaError", 1)?;
23089                s.serialize_field(".tag", "too_many_users")?;
23090                s.end()
23091            }
23092            SetCustomQuotaError::SomeUsersAreExcluded => {
23093                // unit
23094                let mut s = serializer.serialize_struct("SetCustomQuotaError", 1)?;
23095                s.serialize_field(".tag", "some_users_are_excluded")?;
23096                s.end()
23097            }
23098            SetCustomQuotaError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
23099        }
23100    }
23101}
23102
23103impl ::std::error::Error for SetCustomQuotaError {
23104}
23105
23106impl ::std::fmt::Display for SetCustomQuotaError {
23107    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
23108        match self {
23109            SetCustomQuotaError::TooManyUsers => f.write_str("A maximum of 1000 users can be set for a single call."),
23110            SetCustomQuotaError::SomeUsersAreExcluded => f.write_str("Some of the users are on the excluded users list and can't have custom quota set."),
23111            _ => write!(f, "{:?}", *self),
23112        }
23113    }
23114}
23115
23116// union extends CustomQuotaError
23117impl From<CustomQuotaError> for SetCustomQuotaError {
23118    fn from(parent: CustomQuotaError) -> Self {
23119        match parent {
23120            CustomQuotaError::TooManyUsers => SetCustomQuotaError::TooManyUsers,
23121            CustomQuotaError::Other => SetCustomQuotaError::Other,
23122        }
23123    }
23124}
23125/// Structure representing Approve List entries. Domain and emails are supported. At least one entry
23126/// of any supported type is required.
23127#[derive(Debug, Clone, PartialEq, Eq, Default)]
23128#[non_exhaustive] // structs may have more fields added in the future.
23129pub struct SharingAllowlistAddArgs {
23130    /// List of domains represented by valid string representation (RFC-1034/5).
23131    pub domains: Option<Vec<String>>,
23132    /// List of emails represented by valid string representation (RFC-5322/822).
23133    pub emails: Option<Vec<String>>,
23134}
23135
23136impl SharingAllowlistAddArgs {
23137    pub fn with_domains(mut self, value: Vec<String>) -> Self {
23138        self.domains = Some(value);
23139        self
23140    }
23141
23142    pub fn with_emails(mut self, value: Vec<String>) -> Self {
23143        self.emails = Some(value);
23144        self
23145    }
23146}
23147
23148const SHARING_ALLOWLIST_ADD_ARGS_FIELDS: &[&str] = &["domains",
23149                                                     "emails"];
23150impl SharingAllowlistAddArgs {
23151    // no _opt deserializer
23152    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
23153        mut map: V,
23154    ) -> Result<SharingAllowlistAddArgs, V::Error> {
23155        let mut field_domains = None;
23156        let mut field_emails = None;
23157        while let Some(key) = map.next_key::<&str>()? {
23158            match key {
23159                "domains" => {
23160                    if field_domains.is_some() {
23161                        return Err(::serde::de::Error::duplicate_field("domains"));
23162                    }
23163                    field_domains = Some(map.next_value()?);
23164                }
23165                "emails" => {
23166                    if field_emails.is_some() {
23167                        return Err(::serde::de::Error::duplicate_field("emails"));
23168                    }
23169                    field_emails = Some(map.next_value()?);
23170                }
23171                _ => {
23172                    // unknown field allowed and ignored
23173                    map.next_value::<::serde_json::Value>()?;
23174                }
23175            }
23176        }
23177        let result = SharingAllowlistAddArgs {
23178            domains: field_domains.and_then(Option::flatten),
23179            emails: field_emails.and_then(Option::flatten),
23180        };
23181        Ok(result)
23182    }
23183
23184    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
23185        &self,
23186        s: &mut S::SerializeStruct,
23187    ) -> Result<(), S::Error> {
23188        use serde::ser::SerializeStruct;
23189        if let Some(val) = &self.domains {
23190            s.serialize_field("domains", val)?;
23191        }
23192        if let Some(val) = &self.emails {
23193            s.serialize_field("emails", val)?;
23194        }
23195        Ok(())
23196    }
23197}
23198
23199impl<'de> ::serde::de::Deserialize<'de> for SharingAllowlistAddArgs {
23200    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
23201        // struct deserializer
23202        use serde::de::{MapAccess, Visitor};
23203        struct StructVisitor;
23204        impl<'de> Visitor<'de> for StructVisitor {
23205            type Value = SharingAllowlistAddArgs;
23206            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
23207                f.write_str("a SharingAllowlistAddArgs struct")
23208            }
23209            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
23210                SharingAllowlistAddArgs::internal_deserialize(map)
23211            }
23212        }
23213        deserializer.deserialize_struct("SharingAllowlistAddArgs", SHARING_ALLOWLIST_ADD_ARGS_FIELDS, StructVisitor)
23214    }
23215}
23216
23217impl ::serde::ser::Serialize for SharingAllowlistAddArgs {
23218    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
23219        // struct serializer
23220        use serde::ser::SerializeStruct;
23221        let mut s = serializer.serialize_struct("SharingAllowlistAddArgs", 2)?;
23222        self.internal_serialize::<S>(&mut s)?;
23223        s.end()
23224    }
23225}
23226
23227#[derive(Debug, Clone, PartialEq, Eq)]
23228#[non_exhaustive] // variants may be added in the future
23229pub enum SharingAllowlistAddError {
23230    /// One of provided values is not valid.
23231    MalformedEntry(String),
23232    /// Neither single domain nor email provided.
23233    NoEntriesProvided,
23234    /// Too many entries provided within one call.
23235    TooManyEntriesProvided,
23236    /// Team entries limit reached.
23237    TeamLimitReached,
23238    /// Unknown error.
23239    UnknownError,
23240    /// Entries already exists.
23241    EntriesAlreadyExist(String),
23242    /// Catch-all used for unrecognized values returned from the server. Encountering this value
23243    /// typically indicates that this SDK version is out of date.
23244    Other,
23245}
23246
23247impl<'de> ::serde::de::Deserialize<'de> for SharingAllowlistAddError {
23248    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
23249        // union deserializer
23250        use serde::de::{self, MapAccess, Visitor};
23251        struct EnumVisitor;
23252        impl<'de> Visitor<'de> for EnumVisitor {
23253            type Value = SharingAllowlistAddError;
23254            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
23255                f.write_str("a SharingAllowlistAddError structure")
23256            }
23257            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
23258                let tag: &str = match map.next_key()? {
23259                    Some(".tag") => map.next_value()?,
23260                    _ => return Err(de::Error::missing_field(".tag"))
23261                };
23262                let value = match tag {
23263                    "malformed_entry" => {
23264                        match map.next_key()? {
23265                            Some("malformed_entry") => SharingAllowlistAddError::MalformedEntry(map.next_value()?),
23266                            None => return Err(de::Error::missing_field("malformed_entry")),
23267                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
23268                        }
23269                    }
23270                    "no_entries_provided" => SharingAllowlistAddError::NoEntriesProvided,
23271                    "too_many_entries_provided" => SharingAllowlistAddError::TooManyEntriesProvided,
23272                    "team_limit_reached" => SharingAllowlistAddError::TeamLimitReached,
23273                    "unknown_error" => SharingAllowlistAddError::UnknownError,
23274                    "entries_already_exist" => {
23275                        match map.next_key()? {
23276                            Some("entries_already_exist") => SharingAllowlistAddError::EntriesAlreadyExist(map.next_value()?),
23277                            None => return Err(de::Error::missing_field("entries_already_exist")),
23278                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
23279                        }
23280                    }
23281                    _ => SharingAllowlistAddError::Other,
23282                };
23283                crate::eat_json_fields(&mut map)?;
23284                Ok(value)
23285            }
23286        }
23287        const VARIANTS: &[&str] = &["malformed_entry",
23288                                    "no_entries_provided",
23289                                    "too_many_entries_provided",
23290                                    "team_limit_reached",
23291                                    "unknown_error",
23292                                    "entries_already_exist",
23293                                    "other"];
23294        deserializer.deserialize_struct("SharingAllowlistAddError", VARIANTS, EnumVisitor)
23295    }
23296}
23297
23298impl ::serde::ser::Serialize for SharingAllowlistAddError {
23299    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
23300        // union serializer
23301        use serde::ser::SerializeStruct;
23302        match self {
23303            SharingAllowlistAddError::MalformedEntry(x) => {
23304                // primitive
23305                let mut s = serializer.serialize_struct("SharingAllowlistAddError", 2)?;
23306                s.serialize_field(".tag", "malformed_entry")?;
23307                s.serialize_field("malformed_entry", x)?;
23308                s.end()
23309            }
23310            SharingAllowlistAddError::NoEntriesProvided => {
23311                // unit
23312                let mut s = serializer.serialize_struct("SharingAllowlistAddError", 1)?;
23313                s.serialize_field(".tag", "no_entries_provided")?;
23314                s.end()
23315            }
23316            SharingAllowlistAddError::TooManyEntriesProvided => {
23317                // unit
23318                let mut s = serializer.serialize_struct("SharingAllowlistAddError", 1)?;
23319                s.serialize_field(".tag", "too_many_entries_provided")?;
23320                s.end()
23321            }
23322            SharingAllowlistAddError::TeamLimitReached => {
23323                // unit
23324                let mut s = serializer.serialize_struct("SharingAllowlistAddError", 1)?;
23325                s.serialize_field(".tag", "team_limit_reached")?;
23326                s.end()
23327            }
23328            SharingAllowlistAddError::UnknownError => {
23329                // unit
23330                let mut s = serializer.serialize_struct("SharingAllowlistAddError", 1)?;
23331                s.serialize_field(".tag", "unknown_error")?;
23332                s.end()
23333            }
23334            SharingAllowlistAddError::EntriesAlreadyExist(x) => {
23335                // primitive
23336                let mut s = serializer.serialize_struct("SharingAllowlistAddError", 2)?;
23337                s.serialize_field(".tag", "entries_already_exist")?;
23338                s.serialize_field("entries_already_exist", x)?;
23339                s.end()
23340            }
23341            SharingAllowlistAddError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
23342        }
23343    }
23344}
23345
23346impl ::std::error::Error for SharingAllowlistAddError {
23347}
23348
23349impl ::std::fmt::Display for SharingAllowlistAddError {
23350    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
23351        match self {
23352            SharingAllowlistAddError::MalformedEntry(inner) => write!(f, "One of provided values is not valid: {:?}", inner),
23353            SharingAllowlistAddError::NoEntriesProvided => f.write_str("Neither single domain nor email provided."),
23354            SharingAllowlistAddError::TooManyEntriesProvided => f.write_str("Too many entries provided within one call."),
23355            SharingAllowlistAddError::TeamLimitReached => f.write_str("Team entries limit reached."),
23356            SharingAllowlistAddError::UnknownError => f.write_str("Unknown error."),
23357            SharingAllowlistAddError::EntriesAlreadyExist(inner) => write!(f, "Entries already exists: {:?}", inner),
23358            _ => write!(f, "{:?}", *self),
23359        }
23360    }
23361}
23362
23363/// This struct is empty. The comment here is intentionally emitted to avoid indentation issues with
23364/// Stone.
23365#[derive(Debug, Clone, PartialEq, Eq, Default)]
23366#[non_exhaustive] // structs may have more fields added in the future.
23367pub struct SharingAllowlistAddResponse {
23368}
23369
23370const SHARING_ALLOWLIST_ADD_RESPONSE_FIELDS: &[&str] = &[];
23371impl SharingAllowlistAddResponse {
23372    // no _opt deserializer
23373    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
23374        mut map: V,
23375    ) -> Result<SharingAllowlistAddResponse, V::Error> {
23376        // ignore any fields found; none are presently recognized
23377        crate::eat_json_fields(&mut map)?;
23378        Ok(SharingAllowlistAddResponse {})
23379    }
23380}
23381
23382impl<'de> ::serde::de::Deserialize<'de> for SharingAllowlistAddResponse {
23383    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
23384        // struct deserializer
23385        use serde::de::{MapAccess, Visitor};
23386        struct StructVisitor;
23387        impl<'de> Visitor<'de> for StructVisitor {
23388            type Value = SharingAllowlistAddResponse;
23389            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
23390                f.write_str("a SharingAllowlistAddResponse struct")
23391            }
23392            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
23393                SharingAllowlistAddResponse::internal_deserialize(map)
23394            }
23395        }
23396        deserializer.deserialize_struct("SharingAllowlistAddResponse", SHARING_ALLOWLIST_ADD_RESPONSE_FIELDS, StructVisitor)
23397    }
23398}
23399
23400impl ::serde::ser::Serialize for SharingAllowlistAddResponse {
23401    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
23402        // struct serializer
23403        use serde::ser::SerializeStruct;
23404        serializer.serialize_struct("SharingAllowlistAddResponse", 0)?.end()
23405    }
23406}
23407
23408#[derive(Debug, Clone, PartialEq, Eq)]
23409#[non_exhaustive] // structs may have more fields added in the future.
23410pub struct SharingAllowlistListArg {
23411    /// The number of entries to fetch at one time.
23412    pub limit: u32,
23413}
23414
23415impl Default for SharingAllowlistListArg {
23416    fn default() -> Self {
23417        SharingAllowlistListArg {
23418            limit: 1000,
23419        }
23420    }
23421}
23422
23423impl SharingAllowlistListArg {
23424    pub fn with_limit(mut self, value: u32) -> Self {
23425        self.limit = value;
23426        self
23427    }
23428}
23429
23430const SHARING_ALLOWLIST_LIST_ARG_FIELDS: &[&str] = &["limit"];
23431impl SharingAllowlistListArg {
23432    // no _opt deserializer
23433    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
23434        mut map: V,
23435    ) -> Result<SharingAllowlistListArg, V::Error> {
23436        let mut field_limit = None;
23437        while let Some(key) = map.next_key::<&str>()? {
23438            match key {
23439                "limit" => {
23440                    if field_limit.is_some() {
23441                        return Err(::serde::de::Error::duplicate_field("limit"));
23442                    }
23443                    field_limit = Some(map.next_value()?);
23444                }
23445                _ => {
23446                    // unknown field allowed and ignored
23447                    map.next_value::<::serde_json::Value>()?;
23448                }
23449            }
23450        }
23451        let result = SharingAllowlistListArg {
23452            limit: field_limit.unwrap_or(1000),
23453        };
23454        Ok(result)
23455    }
23456
23457    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
23458        &self,
23459        s: &mut S::SerializeStruct,
23460    ) -> Result<(), S::Error> {
23461        use serde::ser::SerializeStruct;
23462        if self.limit != 1000 {
23463            s.serialize_field("limit", &self.limit)?;
23464        }
23465        Ok(())
23466    }
23467}
23468
23469impl<'de> ::serde::de::Deserialize<'de> for SharingAllowlistListArg {
23470    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
23471        // struct deserializer
23472        use serde::de::{MapAccess, Visitor};
23473        struct StructVisitor;
23474        impl<'de> Visitor<'de> for StructVisitor {
23475            type Value = SharingAllowlistListArg;
23476            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
23477                f.write_str("a SharingAllowlistListArg struct")
23478            }
23479            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
23480                SharingAllowlistListArg::internal_deserialize(map)
23481            }
23482        }
23483        deserializer.deserialize_struct("SharingAllowlistListArg", SHARING_ALLOWLIST_LIST_ARG_FIELDS, StructVisitor)
23484    }
23485}
23486
23487impl ::serde::ser::Serialize for SharingAllowlistListArg {
23488    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
23489        // struct serializer
23490        use serde::ser::SerializeStruct;
23491        let mut s = serializer.serialize_struct("SharingAllowlistListArg", 1)?;
23492        self.internal_serialize::<S>(&mut s)?;
23493        s.end()
23494    }
23495}
23496
23497#[derive(Debug, Clone, PartialEq, Eq)]
23498#[non_exhaustive] // structs may have more fields added in the future.
23499pub struct SharingAllowlistListContinueArg {
23500    /// The cursor returned from a previous call to
23501    /// [`sharing_allowlist_list()`](crate::team::sharing_allowlist_list) or
23502    /// [`sharing_allowlist_list_continue()`](crate::team::sharing_allowlist_list_continue).
23503    pub cursor: String,
23504}
23505
23506impl SharingAllowlistListContinueArg {
23507    pub fn new(cursor: String) -> Self {
23508        SharingAllowlistListContinueArg {
23509            cursor,
23510        }
23511    }
23512}
23513
23514const SHARING_ALLOWLIST_LIST_CONTINUE_ARG_FIELDS: &[&str] = &["cursor"];
23515impl SharingAllowlistListContinueArg {
23516    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
23517        map: V,
23518    ) -> Result<SharingAllowlistListContinueArg, V::Error> {
23519        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
23520    }
23521
23522    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
23523        mut map: V,
23524        optional: bool,
23525    ) -> Result<Option<SharingAllowlistListContinueArg>, V::Error> {
23526        let mut field_cursor = None;
23527        let mut nothing = true;
23528        while let Some(key) = map.next_key::<&str>()? {
23529            nothing = false;
23530            match key {
23531                "cursor" => {
23532                    if field_cursor.is_some() {
23533                        return Err(::serde::de::Error::duplicate_field("cursor"));
23534                    }
23535                    field_cursor = Some(map.next_value()?);
23536                }
23537                _ => {
23538                    // unknown field allowed and ignored
23539                    map.next_value::<::serde_json::Value>()?;
23540                }
23541            }
23542        }
23543        if optional && nothing {
23544            return Ok(None);
23545        }
23546        let result = SharingAllowlistListContinueArg {
23547            cursor: field_cursor.ok_or_else(|| ::serde::de::Error::missing_field("cursor"))?,
23548        };
23549        Ok(Some(result))
23550    }
23551
23552    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
23553        &self,
23554        s: &mut S::SerializeStruct,
23555    ) -> Result<(), S::Error> {
23556        use serde::ser::SerializeStruct;
23557        s.serialize_field("cursor", &self.cursor)?;
23558        Ok(())
23559    }
23560}
23561
23562impl<'de> ::serde::de::Deserialize<'de> for SharingAllowlistListContinueArg {
23563    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
23564        // struct deserializer
23565        use serde::de::{MapAccess, Visitor};
23566        struct StructVisitor;
23567        impl<'de> Visitor<'de> for StructVisitor {
23568            type Value = SharingAllowlistListContinueArg;
23569            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
23570                f.write_str("a SharingAllowlistListContinueArg struct")
23571            }
23572            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
23573                SharingAllowlistListContinueArg::internal_deserialize(map)
23574            }
23575        }
23576        deserializer.deserialize_struct("SharingAllowlistListContinueArg", SHARING_ALLOWLIST_LIST_CONTINUE_ARG_FIELDS, StructVisitor)
23577    }
23578}
23579
23580impl ::serde::ser::Serialize for SharingAllowlistListContinueArg {
23581    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
23582        // struct serializer
23583        use serde::ser::SerializeStruct;
23584        let mut s = serializer.serialize_struct("SharingAllowlistListContinueArg", 1)?;
23585        self.internal_serialize::<S>(&mut s)?;
23586        s.end()
23587    }
23588}
23589
23590#[derive(Debug, Clone, PartialEq, Eq)]
23591#[non_exhaustive] // variants may be added in the future
23592pub enum SharingAllowlistListContinueError {
23593    /// Provided cursor is not valid.
23594    InvalidCursor,
23595    /// Catch-all used for unrecognized values returned from the server. Encountering this value
23596    /// typically indicates that this SDK version is out of date.
23597    Other,
23598}
23599
23600impl<'de> ::serde::de::Deserialize<'de> for SharingAllowlistListContinueError {
23601    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
23602        // union deserializer
23603        use serde::de::{self, MapAccess, Visitor};
23604        struct EnumVisitor;
23605        impl<'de> Visitor<'de> for EnumVisitor {
23606            type Value = SharingAllowlistListContinueError;
23607            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
23608                f.write_str("a SharingAllowlistListContinueError structure")
23609            }
23610            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
23611                let tag: &str = match map.next_key()? {
23612                    Some(".tag") => map.next_value()?,
23613                    _ => return Err(de::Error::missing_field(".tag"))
23614                };
23615                let value = match tag {
23616                    "invalid_cursor" => SharingAllowlistListContinueError::InvalidCursor,
23617                    _ => SharingAllowlistListContinueError::Other,
23618                };
23619                crate::eat_json_fields(&mut map)?;
23620                Ok(value)
23621            }
23622        }
23623        const VARIANTS: &[&str] = &["invalid_cursor",
23624                                    "other"];
23625        deserializer.deserialize_struct("SharingAllowlistListContinueError", VARIANTS, EnumVisitor)
23626    }
23627}
23628
23629impl ::serde::ser::Serialize for SharingAllowlistListContinueError {
23630    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
23631        // union serializer
23632        use serde::ser::SerializeStruct;
23633        match self {
23634            SharingAllowlistListContinueError::InvalidCursor => {
23635                // unit
23636                let mut s = serializer.serialize_struct("SharingAllowlistListContinueError", 1)?;
23637                s.serialize_field(".tag", "invalid_cursor")?;
23638                s.end()
23639            }
23640            SharingAllowlistListContinueError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
23641        }
23642    }
23643}
23644
23645impl ::std::error::Error for SharingAllowlistListContinueError {
23646}
23647
23648impl ::std::fmt::Display for SharingAllowlistListContinueError {
23649    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
23650        match self {
23651            SharingAllowlistListContinueError::InvalidCursor => f.write_str("Provided cursor is not valid."),
23652            _ => write!(f, "{:?}", *self),
23653        }
23654    }
23655}
23656
23657/// This struct is empty. The comment here is intentionally emitted to avoid indentation issues with
23658/// Stone.
23659#[derive(Debug, Clone, PartialEq, Eq, Default)]
23660#[non_exhaustive] // structs may have more fields added in the future.
23661pub struct SharingAllowlistListError {
23662}
23663
23664const SHARING_ALLOWLIST_LIST_ERROR_FIELDS: &[&str] = &[];
23665impl SharingAllowlistListError {
23666    // no _opt deserializer
23667    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
23668        mut map: V,
23669    ) -> Result<SharingAllowlistListError, V::Error> {
23670        // ignore any fields found; none are presently recognized
23671        crate::eat_json_fields(&mut map)?;
23672        Ok(SharingAllowlistListError {})
23673    }
23674}
23675
23676impl<'de> ::serde::de::Deserialize<'de> for SharingAllowlistListError {
23677    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
23678        // struct deserializer
23679        use serde::de::{MapAccess, Visitor};
23680        struct StructVisitor;
23681        impl<'de> Visitor<'de> for StructVisitor {
23682            type Value = SharingAllowlistListError;
23683            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
23684                f.write_str("a SharingAllowlistListError struct")
23685            }
23686            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
23687                SharingAllowlistListError::internal_deserialize(map)
23688            }
23689        }
23690        deserializer.deserialize_struct("SharingAllowlistListError", SHARING_ALLOWLIST_LIST_ERROR_FIELDS, StructVisitor)
23691    }
23692}
23693
23694impl ::serde::ser::Serialize for SharingAllowlistListError {
23695    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
23696        // struct serializer
23697        use serde::ser::SerializeStruct;
23698        serializer.serialize_struct("SharingAllowlistListError", 0)?.end()
23699    }
23700}
23701
23702impl ::std::error::Error for SharingAllowlistListError {
23703}
23704
23705impl ::std::fmt::Display for SharingAllowlistListError {
23706    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
23707        write!(f, "{:?}", *self)
23708    }
23709}
23710
23711#[derive(Debug, Clone, PartialEq, Eq)]
23712#[non_exhaustive] // structs may have more fields added in the future.
23713pub struct SharingAllowlistListResponse {
23714    /// List of domains represented by valid string representation (RFC-1034/5).
23715    pub domains: Vec<String>,
23716    /// List of emails represented by valid string representation (RFC-5322/822).
23717    pub emails: Vec<String>,
23718    /// If this is nonempty, there are more entries that can be fetched with
23719    /// [`sharing_allowlist_list_continue()`](crate::team::sharing_allowlist_list_continue).
23720    pub cursor: String,
23721    /// if true indicates that more entries can be fetched with
23722    /// [`sharing_allowlist_list_continue()`](crate::team::sharing_allowlist_list_continue).
23723    pub has_more: bool,
23724}
23725
23726impl SharingAllowlistListResponse {
23727    pub fn new(domains: Vec<String>, emails: Vec<String>) -> Self {
23728        SharingAllowlistListResponse {
23729            domains,
23730            emails,
23731            cursor: String::new(),
23732            has_more: false,
23733        }
23734    }
23735
23736    pub fn with_cursor(mut self, value: String) -> Self {
23737        self.cursor = value;
23738        self
23739    }
23740
23741    pub fn with_has_more(mut self, value: bool) -> Self {
23742        self.has_more = value;
23743        self
23744    }
23745}
23746
23747const SHARING_ALLOWLIST_LIST_RESPONSE_FIELDS: &[&str] = &["domains",
23748                                                          "emails",
23749                                                          "cursor",
23750                                                          "has_more"];
23751impl SharingAllowlistListResponse {
23752    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
23753        map: V,
23754    ) -> Result<SharingAllowlistListResponse, V::Error> {
23755        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
23756    }
23757
23758    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
23759        mut map: V,
23760        optional: bool,
23761    ) -> Result<Option<SharingAllowlistListResponse>, V::Error> {
23762        let mut field_domains = None;
23763        let mut field_emails = None;
23764        let mut field_cursor = None;
23765        let mut field_has_more = None;
23766        let mut nothing = true;
23767        while let Some(key) = map.next_key::<&str>()? {
23768            nothing = false;
23769            match key {
23770                "domains" => {
23771                    if field_domains.is_some() {
23772                        return Err(::serde::de::Error::duplicate_field("domains"));
23773                    }
23774                    field_domains = Some(map.next_value()?);
23775                }
23776                "emails" => {
23777                    if field_emails.is_some() {
23778                        return Err(::serde::de::Error::duplicate_field("emails"));
23779                    }
23780                    field_emails = Some(map.next_value()?);
23781                }
23782                "cursor" => {
23783                    if field_cursor.is_some() {
23784                        return Err(::serde::de::Error::duplicate_field("cursor"));
23785                    }
23786                    field_cursor = Some(map.next_value()?);
23787                }
23788                "has_more" => {
23789                    if field_has_more.is_some() {
23790                        return Err(::serde::de::Error::duplicate_field("has_more"));
23791                    }
23792                    field_has_more = Some(map.next_value()?);
23793                }
23794                _ => {
23795                    // unknown field allowed and ignored
23796                    map.next_value::<::serde_json::Value>()?;
23797                }
23798            }
23799        }
23800        if optional && nothing {
23801            return Ok(None);
23802        }
23803        let result = SharingAllowlistListResponse {
23804            domains: field_domains.ok_or_else(|| ::serde::de::Error::missing_field("domains"))?,
23805            emails: field_emails.ok_or_else(|| ::serde::de::Error::missing_field("emails"))?,
23806            cursor: field_cursor.unwrap_or_default(),
23807            has_more: field_has_more.unwrap_or(false),
23808        };
23809        Ok(Some(result))
23810    }
23811
23812    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
23813        &self,
23814        s: &mut S::SerializeStruct,
23815    ) -> Result<(), S::Error> {
23816        use serde::ser::SerializeStruct;
23817        s.serialize_field("domains", &self.domains)?;
23818        s.serialize_field("emails", &self.emails)?;
23819        if !self.cursor.is_empty() {
23820            s.serialize_field("cursor", &self.cursor)?;
23821        }
23822        if self.has_more {
23823            s.serialize_field("has_more", &self.has_more)?;
23824        }
23825        Ok(())
23826    }
23827}
23828
23829impl<'de> ::serde::de::Deserialize<'de> for SharingAllowlistListResponse {
23830    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
23831        // struct deserializer
23832        use serde::de::{MapAccess, Visitor};
23833        struct StructVisitor;
23834        impl<'de> Visitor<'de> for StructVisitor {
23835            type Value = SharingAllowlistListResponse;
23836            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
23837                f.write_str("a SharingAllowlistListResponse struct")
23838            }
23839            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
23840                SharingAllowlistListResponse::internal_deserialize(map)
23841            }
23842        }
23843        deserializer.deserialize_struct("SharingAllowlistListResponse", SHARING_ALLOWLIST_LIST_RESPONSE_FIELDS, StructVisitor)
23844    }
23845}
23846
23847impl ::serde::ser::Serialize for SharingAllowlistListResponse {
23848    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
23849        // struct serializer
23850        use serde::ser::SerializeStruct;
23851        let mut s = serializer.serialize_struct("SharingAllowlistListResponse", 4)?;
23852        self.internal_serialize::<S>(&mut s)?;
23853        s.end()
23854    }
23855}
23856
23857#[derive(Debug, Clone, PartialEq, Eq, Default)]
23858#[non_exhaustive] // structs may have more fields added in the future.
23859pub struct SharingAllowlistRemoveArgs {
23860    /// List of domains represented by valid string representation (RFC-1034/5).
23861    pub domains: Option<Vec<String>>,
23862    /// List of emails represented by valid string representation (RFC-5322/822).
23863    pub emails: Option<Vec<String>>,
23864}
23865
23866impl SharingAllowlistRemoveArgs {
23867    pub fn with_domains(mut self, value: Vec<String>) -> Self {
23868        self.domains = Some(value);
23869        self
23870    }
23871
23872    pub fn with_emails(mut self, value: Vec<String>) -> Self {
23873        self.emails = Some(value);
23874        self
23875    }
23876}
23877
23878const SHARING_ALLOWLIST_REMOVE_ARGS_FIELDS: &[&str] = &["domains",
23879                                                        "emails"];
23880impl SharingAllowlistRemoveArgs {
23881    // no _opt deserializer
23882    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
23883        mut map: V,
23884    ) -> Result<SharingAllowlistRemoveArgs, V::Error> {
23885        let mut field_domains = None;
23886        let mut field_emails = None;
23887        while let Some(key) = map.next_key::<&str>()? {
23888            match key {
23889                "domains" => {
23890                    if field_domains.is_some() {
23891                        return Err(::serde::de::Error::duplicate_field("domains"));
23892                    }
23893                    field_domains = Some(map.next_value()?);
23894                }
23895                "emails" => {
23896                    if field_emails.is_some() {
23897                        return Err(::serde::de::Error::duplicate_field("emails"));
23898                    }
23899                    field_emails = Some(map.next_value()?);
23900                }
23901                _ => {
23902                    // unknown field allowed and ignored
23903                    map.next_value::<::serde_json::Value>()?;
23904                }
23905            }
23906        }
23907        let result = SharingAllowlistRemoveArgs {
23908            domains: field_domains.and_then(Option::flatten),
23909            emails: field_emails.and_then(Option::flatten),
23910        };
23911        Ok(result)
23912    }
23913
23914    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
23915        &self,
23916        s: &mut S::SerializeStruct,
23917    ) -> Result<(), S::Error> {
23918        use serde::ser::SerializeStruct;
23919        if let Some(val) = &self.domains {
23920            s.serialize_field("domains", val)?;
23921        }
23922        if let Some(val) = &self.emails {
23923            s.serialize_field("emails", val)?;
23924        }
23925        Ok(())
23926    }
23927}
23928
23929impl<'de> ::serde::de::Deserialize<'de> for SharingAllowlistRemoveArgs {
23930    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
23931        // struct deserializer
23932        use serde::de::{MapAccess, Visitor};
23933        struct StructVisitor;
23934        impl<'de> Visitor<'de> for StructVisitor {
23935            type Value = SharingAllowlistRemoveArgs;
23936            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
23937                f.write_str("a SharingAllowlistRemoveArgs struct")
23938            }
23939            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
23940                SharingAllowlistRemoveArgs::internal_deserialize(map)
23941            }
23942        }
23943        deserializer.deserialize_struct("SharingAllowlistRemoveArgs", SHARING_ALLOWLIST_REMOVE_ARGS_FIELDS, StructVisitor)
23944    }
23945}
23946
23947impl ::serde::ser::Serialize for SharingAllowlistRemoveArgs {
23948    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
23949        // struct serializer
23950        use serde::ser::SerializeStruct;
23951        let mut s = serializer.serialize_struct("SharingAllowlistRemoveArgs", 2)?;
23952        self.internal_serialize::<S>(&mut s)?;
23953        s.end()
23954    }
23955}
23956
23957#[derive(Debug, Clone, PartialEq, Eq)]
23958#[non_exhaustive] // variants may be added in the future
23959pub enum SharingAllowlistRemoveError {
23960    /// One of provided values is not valid.
23961    MalformedEntry(String),
23962    /// One or more provided values do not exist.
23963    EntriesDoNotExist(String),
23964    /// Neither single domain nor email provided.
23965    NoEntriesProvided,
23966    /// Too many entries provided within one call.
23967    TooManyEntriesProvided,
23968    /// Unknown error.
23969    UnknownError,
23970    /// Catch-all used for unrecognized values returned from the server. Encountering this value
23971    /// typically indicates that this SDK version is out of date.
23972    Other,
23973}
23974
23975impl<'de> ::serde::de::Deserialize<'de> for SharingAllowlistRemoveError {
23976    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
23977        // union deserializer
23978        use serde::de::{self, MapAccess, Visitor};
23979        struct EnumVisitor;
23980        impl<'de> Visitor<'de> for EnumVisitor {
23981            type Value = SharingAllowlistRemoveError;
23982            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
23983                f.write_str("a SharingAllowlistRemoveError structure")
23984            }
23985            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
23986                let tag: &str = match map.next_key()? {
23987                    Some(".tag") => map.next_value()?,
23988                    _ => return Err(de::Error::missing_field(".tag"))
23989                };
23990                let value = match tag {
23991                    "malformed_entry" => {
23992                        match map.next_key()? {
23993                            Some("malformed_entry") => SharingAllowlistRemoveError::MalformedEntry(map.next_value()?),
23994                            None => return Err(de::Error::missing_field("malformed_entry")),
23995                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
23996                        }
23997                    }
23998                    "entries_do_not_exist" => {
23999                        match map.next_key()? {
24000                            Some("entries_do_not_exist") => SharingAllowlistRemoveError::EntriesDoNotExist(map.next_value()?),
24001                            None => return Err(de::Error::missing_field("entries_do_not_exist")),
24002                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
24003                        }
24004                    }
24005                    "no_entries_provided" => SharingAllowlistRemoveError::NoEntriesProvided,
24006                    "too_many_entries_provided" => SharingAllowlistRemoveError::TooManyEntriesProvided,
24007                    "unknown_error" => SharingAllowlistRemoveError::UnknownError,
24008                    _ => SharingAllowlistRemoveError::Other,
24009                };
24010                crate::eat_json_fields(&mut map)?;
24011                Ok(value)
24012            }
24013        }
24014        const VARIANTS: &[&str] = &["malformed_entry",
24015                                    "entries_do_not_exist",
24016                                    "no_entries_provided",
24017                                    "too_many_entries_provided",
24018                                    "unknown_error",
24019                                    "other"];
24020        deserializer.deserialize_struct("SharingAllowlistRemoveError", VARIANTS, EnumVisitor)
24021    }
24022}
24023
24024impl ::serde::ser::Serialize for SharingAllowlistRemoveError {
24025    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
24026        // union serializer
24027        use serde::ser::SerializeStruct;
24028        match self {
24029            SharingAllowlistRemoveError::MalformedEntry(x) => {
24030                // primitive
24031                let mut s = serializer.serialize_struct("SharingAllowlistRemoveError", 2)?;
24032                s.serialize_field(".tag", "malformed_entry")?;
24033                s.serialize_field("malformed_entry", x)?;
24034                s.end()
24035            }
24036            SharingAllowlistRemoveError::EntriesDoNotExist(x) => {
24037                // primitive
24038                let mut s = serializer.serialize_struct("SharingAllowlistRemoveError", 2)?;
24039                s.serialize_field(".tag", "entries_do_not_exist")?;
24040                s.serialize_field("entries_do_not_exist", x)?;
24041                s.end()
24042            }
24043            SharingAllowlistRemoveError::NoEntriesProvided => {
24044                // unit
24045                let mut s = serializer.serialize_struct("SharingAllowlistRemoveError", 1)?;
24046                s.serialize_field(".tag", "no_entries_provided")?;
24047                s.end()
24048            }
24049            SharingAllowlistRemoveError::TooManyEntriesProvided => {
24050                // unit
24051                let mut s = serializer.serialize_struct("SharingAllowlistRemoveError", 1)?;
24052                s.serialize_field(".tag", "too_many_entries_provided")?;
24053                s.end()
24054            }
24055            SharingAllowlistRemoveError::UnknownError => {
24056                // unit
24057                let mut s = serializer.serialize_struct("SharingAllowlistRemoveError", 1)?;
24058                s.serialize_field(".tag", "unknown_error")?;
24059                s.end()
24060            }
24061            SharingAllowlistRemoveError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
24062        }
24063    }
24064}
24065
24066impl ::std::error::Error for SharingAllowlistRemoveError {
24067}
24068
24069impl ::std::fmt::Display for SharingAllowlistRemoveError {
24070    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
24071        match self {
24072            SharingAllowlistRemoveError::MalformedEntry(inner) => write!(f, "One of provided values is not valid: {:?}", inner),
24073            SharingAllowlistRemoveError::EntriesDoNotExist(inner) => write!(f, "One or more provided values do not exist: {:?}", inner),
24074            SharingAllowlistRemoveError::NoEntriesProvided => f.write_str("Neither single domain nor email provided."),
24075            SharingAllowlistRemoveError::TooManyEntriesProvided => f.write_str("Too many entries provided within one call."),
24076            SharingAllowlistRemoveError::UnknownError => f.write_str("Unknown error."),
24077            _ => write!(f, "{:?}", *self),
24078        }
24079    }
24080}
24081
24082/// This struct is empty. The comment here is intentionally emitted to avoid indentation issues with
24083/// Stone.
24084#[derive(Debug, Clone, PartialEq, Eq, Default)]
24085#[non_exhaustive] // structs may have more fields added in the future.
24086pub struct SharingAllowlistRemoveResponse {
24087}
24088
24089const SHARING_ALLOWLIST_REMOVE_RESPONSE_FIELDS: &[&str] = &[];
24090impl SharingAllowlistRemoveResponse {
24091    // no _opt deserializer
24092    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
24093        mut map: V,
24094    ) -> Result<SharingAllowlistRemoveResponse, V::Error> {
24095        // ignore any fields found; none are presently recognized
24096        crate::eat_json_fields(&mut map)?;
24097        Ok(SharingAllowlistRemoveResponse {})
24098    }
24099}
24100
24101impl<'de> ::serde::de::Deserialize<'de> for SharingAllowlistRemoveResponse {
24102    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
24103        // struct deserializer
24104        use serde::de::{MapAccess, Visitor};
24105        struct StructVisitor;
24106        impl<'de> Visitor<'de> for StructVisitor {
24107            type Value = SharingAllowlistRemoveResponse;
24108            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
24109                f.write_str("a SharingAllowlistRemoveResponse struct")
24110            }
24111            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
24112                SharingAllowlistRemoveResponse::internal_deserialize(map)
24113            }
24114        }
24115        deserializer.deserialize_struct("SharingAllowlistRemoveResponse", SHARING_ALLOWLIST_REMOVE_RESPONSE_FIELDS, StructVisitor)
24116    }
24117}
24118
24119impl ::serde::ser::Serialize for SharingAllowlistRemoveResponse {
24120    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
24121        // struct serializer
24122        use serde::ser::SerializeStruct;
24123        serializer.serialize_struct("SharingAllowlistRemoveResponse", 0)?.end()
24124    }
24125}
24126
24127/// Describes the number of users in a specific storage bucket.
24128#[derive(Debug, Clone, PartialEq, Eq)]
24129#[non_exhaustive] // structs may have more fields added in the future.
24130pub struct StorageBucket {
24131    /// The name of the storage bucket. For example, '1G' is a bucket of users with storage size up
24132    /// to 1 Giga.
24133    pub bucket: String,
24134    /// The number of people whose storage is in the range of this storage bucket.
24135    pub users: u64,
24136}
24137
24138impl StorageBucket {
24139    pub fn new(bucket: String, users: u64) -> Self {
24140        StorageBucket {
24141            bucket,
24142            users,
24143        }
24144    }
24145}
24146
24147const STORAGE_BUCKET_FIELDS: &[&str] = &["bucket",
24148                                         "users"];
24149impl StorageBucket {
24150    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
24151        map: V,
24152    ) -> Result<StorageBucket, V::Error> {
24153        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
24154    }
24155
24156    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
24157        mut map: V,
24158        optional: bool,
24159    ) -> Result<Option<StorageBucket>, V::Error> {
24160        let mut field_bucket = None;
24161        let mut field_users = None;
24162        let mut nothing = true;
24163        while let Some(key) = map.next_key::<&str>()? {
24164            nothing = false;
24165            match key {
24166                "bucket" => {
24167                    if field_bucket.is_some() {
24168                        return Err(::serde::de::Error::duplicate_field("bucket"));
24169                    }
24170                    field_bucket = Some(map.next_value()?);
24171                }
24172                "users" => {
24173                    if field_users.is_some() {
24174                        return Err(::serde::de::Error::duplicate_field("users"));
24175                    }
24176                    field_users = Some(map.next_value()?);
24177                }
24178                _ => {
24179                    // unknown field allowed and ignored
24180                    map.next_value::<::serde_json::Value>()?;
24181                }
24182            }
24183        }
24184        if optional && nothing {
24185            return Ok(None);
24186        }
24187        let result = StorageBucket {
24188            bucket: field_bucket.ok_or_else(|| ::serde::de::Error::missing_field("bucket"))?,
24189            users: field_users.ok_or_else(|| ::serde::de::Error::missing_field("users"))?,
24190        };
24191        Ok(Some(result))
24192    }
24193
24194    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
24195        &self,
24196        s: &mut S::SerializeStruct,
24197    ) -> Result<(), S::Error> {
24198        use serde::ser::SerializeStruct;
24199        s.serialize_field("bucket", &self.bucket)?;
24200        s.serialize_field("users", &self.users)?;
24201        Ok(())
24202    }
24203}
24204
24205impl<'de> ::serde::de::Deserialize<'de> for StorageBucket {
24206    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
24207        // struct deserializer
24208        use serde::de::{MapAccess, Visitor};
24209        struct StructVisitor;
24210        impl<'de> Visitor<'de> for StructVisitor {
24211            type Value = StorageBucket;
24212            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
24213                f.write_str("a StorageBucket struct")
24214            }
24215            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
24216                StorageBucket::internal_deserialize(map)
24217            }
24218        }
24219        deserializer.deserialize_struct("StorageBucket", STORAGE_BUCKET_FIELDS, StructVisitor)
24220    }
24221}
24222
24223impl ::serde::ser::Serialize for StorageBucket {
24224    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
24225        // struct serializer
24226        use serde::ser::SerializeStruct;
24227        let mut s = serializer.serialize_struct("StorageBucket", 2)?;
24228        self.internal_serialize::<S>(&mut s)?;
24229        s.end()
24230    }
24231}
24232
24233#[derive(Debug, Clone, PartialEq, Eq)]
24234#[non_exhaustive] // variants may be added in the future
24235pub enum TeamFolderAccessError {
24236    /// The team folder ID is invalid.
24237    InvalidTeamFolderId,
24238    /// The authenticated app does not have permission to manage that team folder.
24239    NoAccess,
24240    /// Catch-all used for unrecognized values returned from the server. Encountering this value
24241    /// typically indicates that this SDK version is out of date.
24242    Other,
24243}
24244
24245impl<'de> ::serde::de::Deserialize<'de> for TeamFolderAccessError {
24246    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
24247        // union deserializer
24248        use serde::de::{self, MapAccess, Visitor};
24249        struct EnumVisitor;
24250        impl<'de> Visitor<'de> for EnumVisitor {
24251            type Value = TeamFolderAccessError;
24252            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
24253                f.write_str("a TeamFolderAccessError structure")
24254            }
24255            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
24256                let tag: &str = match map.next_key()? {
24257                    Some(".tag") => map.next_value()?,
24258                    _ => return Err(de::Error::missing_field(".tag"))
24259                };
24260                let value = match tag {
24261                    "invalid_team_folder_id" => TeamFolderAccessError::InvalidTeamFolderId,
24262                    "no_access" => TeamFolderAccessError::NoAccess,
24263                    _ => TeamFolderAccessError::Other,
24264                };
24265                crate::eat_json_fields(&mut map)?;
24266                Ok(value)
24267            }
24268        }
24269        const VARIANTS: &[&str] = &["invalid_team_folder_id",
24270                                    "no_access",
24271                                    "other"];
24272        deserializer.deserialize_struct("TeamFolderAccessError", VARIANTS, EnumVisitor)
24273    }
24274}
24275
24276impl ::serde::ser::Serialize for TeamFolderAccessError {
24277    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
24278        // union serializer
24279        use serde::ser::SerializeStruct;
24280        match self {
24281            TeamFolderAccessError::InvalidTeamFolderId => {
24282                // unit
24283                let mut s = serializer.serialize_struct("TeamFolderAccessError", 1)?;
24284                s.serialize_field(".tag", "invalid_team_folder_id")?;
24285                s.end()
24286            }
24287            TeamFolderAccessError::NoAccess => {
24288                // unit
24289                let mut s = serializer.serialize_struct("TeamFolderAccessError", 1)?;
24290                s.serialize_field(".tag", "no_access")?;
24291                s.end()
24292            }
24293            TeamFolderAccessError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
24294        }
24295    }
24296}
24297
24298impl ::std::error::Error for TeamFolderAccessError {
24299}
24300
24301impl ::std::fmt::Display for TeamFolderAccessError {
24302    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
24303        match self {
24304            TeamFolderAccessError::InvalidTeamFolderId => f.write_str("The team folder ID is invalid."),
24305            TeamFolderAccessError::NoAccess => f.write_str("The authenticated app does not have permission to manage that team folder."),
24306            _ => write!(f, "{:?}", *self),
24307        }
24308    }
24309}
24310
24311
24312#[derive(Debug, Clone, PartialEq, Eq)]
24313#[non_exhaustive] // variants may be added in the future
24314pub enum TeamFolderActivateError {
24315    AccessError(TeamFolderAccessError),
24316    StatusError(TeamFolderInvalidStatusError),
24317    TeamSharedDropboxError(TeamFolderTeamSharedDropboxError),
24318    /// Catch-all used for unrecognized values returned from the server. Encountering this value
24319    /// typically indicates that this SDK version is out of date.
24320    Other,
24321}
24322
24323impl<'de> ::serde::de::Deserialize<'de> for TeamFolderActivateError {
24324    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
24325        // union deserializer
24326        use serde::de::{self, MapAccess, Visitor};
24327        struct EnumVisitor;
24328        impl<'de> Visitor<'de> for EnumVisitor {
24329            type Value = TeamFolderActivateError;
24330            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
24331                f.write_str("a TeamFolderActivateError structure")
24332            }
24333            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
24334                let tag: &str = match map.next_key()? {
24335                    Some(".tag") => map.next_value()?,
24336                    _ => return Err(de::Error::missing_field(".tag"))
24337                };
24338                let value = match tag {
24339                    "access_error" => {
24340                        match map.next_key()? {
24341                            Some("access_error") => TeamFolderActivateError::AccessError(map.next_value()?),
24342                            None => return Err(de::Error::missing_field("access_error")),
24343                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
24344                        }
24345                    }
24346                    "status_error" => {
24347                        match map.next_key()? {
24348                            Some("status_error") => TeamFolderActivateError::StatusError(map.next_value()?),
24349                            None => return Err(de::Error::missing_field("status_error")),
24350                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
24351                        }
24352                    }
24353                    "team_shared_dropbox_error" => {
24354                        match map.next_key()? {
24355                            Some("team_shared_dropbox_error") => TeamFolderActivateError::TeamSharedDropboxError(map.next_value()?),
24356                            None => return Err(de::Error::missing_field("team_shared_dropbox_error")),
24357                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
24358                        }
24359                    }
24360                    _ => TeamFolderActivateError::Other,
24361                };
24362                crate::eat_json_fields(&mut map)?;
24363                Ok(value)
24364            }
24365        }
24366        const VARIANTS: &[&str] = &["access_error",
24367                                    "status_error",
24368                                    "team_shared_dropbox_error",
24369                                    "other"];
24370        deserializer.deserialize_struct("TeamFolderActivateError", VARIANTS, EnumVisitor)
24371    }
24372}
24373
24374impl ::serde::ser::Serialize for TeamFolderActivateError {
24375    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
24376        // union serializer
24377        use serde::ser::SerializeStruct;
24378        match self {
24379            TeamFolderActivateError::AccessError(x) => {
24380                // union or polymporphic struct
24381                let mut s = serializer.serialize_struct("TeamFolderActivateError", 2)?;
24382                s.serialize_field(".tag", "access_error")?;
24383                s.serialize_field("access_error", x)?;
24384                s.end()
24385            }
24386            TeamFolderActivateError::StatusError(x) => {
24387                // union or polymporphic struct
24388                let mut s = serializer.serialize_struct("TeamFolderActivateError", 2)?;
24389                s.serialize_field(".tag", "status_error")?;
24390                s.serialize_field("status_error", x)?;
24391                s.end()
24392            }
24393            TeamFolderActivateError::TeamSharedDropboxError(x) => {
24394                // union or polymporphic struct
24395                let mut s = serializer.serialize_struct("TeamFolderActivateError", 2)?;
24396                s.serialize_field(".tag", "team_shared_dropbox_error")?;
24397                s.serialize_field("team_shared_dropbox_error", x)?;
24398                s.end()
24399            }
24400            TeamFolderActivateError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
24401        }
24402    }
24403}
24404
24405impl ::std::error::Error for TeamFolderActivateError {
24406    fn source(&self) -> Option<&(dyn ::std::error::Error + 'static)> {
24407        match self {
24408            TeamFolderActivateError::AccessError(inner) => Some(inner),
24409            TeamFolderActivateError::StatusError(inner) => Some(inner),
24410            TeamFolderActivateError::TeamSharedDropboxError(inner) => Some(inner),
24411            _ => None,
24412        }
24413    }
24414}
24415
24416impl ::std::fmt::Display for TeamFolderActivateError {
24417    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
24418        match self {
24419            TeamFolderActivateError::AccessError(inner) => write!(f, "TeamFolderActivateError: {}", inner),
24420            TeamFolderActivateError::StatusError(inner) => write!(f, "TeamFolderActivateError: {}", inner),
24421            TeamFolderActivateError::TeamSharedDropboxError(inner) => write!(f, "TeamFolderActivateError: {}", inner),
24422            _ => write!(f, "{:?}", *self),
24423        }
24424    }
24425}
24426
24427// union extends BaseTeamFolderError
24428impl From<BaseTeamFolderError> for TeamFolderActivateError {
24429    fn from(parent: BaseTeamFolderError) -> Self {
24430        match parent {
24431            BaseTeamFolderError::AccessError(x) => TeamFolderActivateError::AccessError(x),
24432            BaseTeamFolderError::StatusError(x) => TeamFolderActivateError::StatusError(x),
24433            BaseTeamFolderError::TeamSharedDropboxError(x) => TeamFolderActivateError::TeamSharedDropboxError(x),
24434            BaseTeamFolderError::Other => TeamFolderActivateError::Other,
24435        }
24436    }
24437}
24438#[derive(Debug, Clone, PartialEq, Eq)]
24439#[non_exhaustive] // structs may have more fields added in the future.
24440pub struct TeamFolderArchiveArg {
24441    /// The ID of the team folder.
24442    pub team_folder_id: crate::types::common::SharedFolderId,
24443    /// Whether to force the archive to happen synchronously.
24444    pub force_async_off: bool,
24445}
24446
24447impl TeamFolderArchiveArg {
24448    pub fn new(team_folder_id: crate::types::common::SharedFolderId) -> Self {
24449        TeamFolderArchiveArg {
24450            team_folder_id,
24451            force_async_off: false,
24452        }
24453    }
24454
24455    pub fn with_force_async_off(mut self, value: bool) -> Self {
24456        self.force_async_off = value;
24457        self
24458    }
24459}
24460
24461const TEAM_FOLDER_ARCHIVE_ARG_FIELDS: &[&str] = &["team_folder_id",
24462                                                  "force_async_off"];
24463impl TeamFolderArchiveArg {
24464    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
24465        map: V,
24466    ) -> Result<TeamFolderArchiveArg, V::Error> {
24467        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
24468    }
24469
24470    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
24471        mut map: V,
24472        optional: bool,
24473    ) -> Result<Option<TeamFolderArchiveArg>, V::Error> {
24474        let mut field_team_folder_id = None;
24475        let mut field_force_async_off = None;
24476        let mut nothing = true;
24477        while let Some(key) = map.next_key::<&str>()? {
24478            nothing = false;
24479            match key {
24480                "team_folder_id" => {
24481                    if field_team_folder_id.is_some() {
24482                        return Err(::serde::de::Error::duplicate_field("team_folder_id"));
24483                    }
24484                    field_team_folder_id = Some(map.next_value()?);
24485                }
24486                "force_async_off" => {
24487                    if field_force_async_off.is_some() {
24488                        return Err(::serde::de::Error::duplicate_field("force_async_off"));
24489                    }
24490                    field_force_async_off = Some(map.next_value()?);
24491                }
24492                _ => {
24493                    // unknown field allowed and ignored
24494                    map.next_value::<::serde_json::Value>()?;
24495                }
24496            }
24497        }
24498        if optional && nothing {
24499            return Ok(None);
24500        }
24501        let result = TeamFolderArchiveArg {
24502            team_folder_id: field_team_folder_id.ok_or_else(|| ::serde::de::Error::missing_field("team_folder_id"))?,
24503            force_async_off: field_force_async_off.unwrap_or(false),
24504        };
24505        Ok(Some(result))
24506    }
24507
24508    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
24509        &self,
24510        s: &mut S::SerializeStruct,
24511    ) -> Result<(), S::Error> {
24512        use serde::ser::SerializeStruct;
24513        s.serialize_field("team_folder_id", &self.team_folder_id)?;
24514        if self.force_async_off {
24515            s.serialize_field("force_async_off", &self.force_async_off)?;
24516        }
24517        Ok(())
24518    }
24519}
24520
24521impl<'de> ::serde::de::Deserialize<'de> for TeamFolderArchiveArg {
24522    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
24523        // struct deserializer
24524        use serde::de::{MapAccess, Visitor};
24525        struct StructVisitor;
24526        impl<'de> Visitor<'de> for StructVisitor {
24527            type Value = TeamFolderArchiveArg;
24528            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
24529                f.write_str("a TeamFolderArchiveArg struct")
24530            }
24531            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
24532                TeamFolderArchiveArg::internal_deserialize(map)
24533            }
24534        }
24535        deserializer.deserialize_struct("TeamFolderArchiveArg", TEAM_FOLDER_ARCHIVE_ARG_FIELDS, StructVisitor)
24536    }
24537}
24538
24539impl ::serde::ser::Serialize for TeamFolderArchiveArg {
24540    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
24541        // struct serializer
24542        use serde::ser::SerializeStruct;
24543        let mut s = serializer.serialize_struct("TeamFolderArchiveArg", 2)?;
24544        self.internal_serialize::<S>(&mut s)?;
24545        s.end()
24546    }
24547}
24548
24549// struct extends TeamFolderIdArg
24550impl From<TeamFolderArchiveArg> for TeamFolderIdArg {
24551    fn from(subtype: TeamFolderArchiveArg) -> Self {
24552        Self {
24553            team_folder_id: subtype.team_folder_id,
24554        }
24555    }
24556}
24557
24558#[derive(Debug, Clone, PartialEq, Eq)]
24559#[non_exhaustive] // variants may be added in the future
24560pub enum TeamFolderArchiveError {
24561    AccessError(TeamFolderAccessError),
24562    StatusError(TeamFolderInvalidStatusError),
24563    TeamSharedDropboxError(TeamFolderTeamSharedDropboxError),
24564    /// Catch-all used for unrecognized values returned from the server. Encountering this value
24565    /// typically indicates that this SDK version is out of date.
24566    Other,
24567}
24568
24569impl<'de> ::serde::de::Deserialize<'de> for TeamFolderArchiveError {
24570    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
24571        // union deserializer
24572        use serde::de::{self, MapAccess, Visitor};
24573        struct EnumVisitor;
24574        impl<'de> Visitor<'de> for EnumVisitor {
24575            type Value = TeamFolderArchiveError;
24576            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
24577                f.write_str("a TeamFolderArchiveError structure")
24578            }
24579            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
24580                let tag: &str = match map.next_key()? {
24581                    Some(".tag") => map.next_value()?,
24582                    _ => return Err(de::Error::missing_field(".tag"))
24583                };
24584                let value = match tag {
24585                    "access_error" => {
24586                        match map.next_key()? {
24587                            Some("access_error") => TeamFolderArchiveError::AccessError(map.next_value()?),
24588                            None => return Err(de::Error::missing_field("access_error")),
24589                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
24590                        }
24591                    }
24592                    "status_error" => {
24593                        match map.next_key()? {
24594                            Some("status_error") => TeamFolderArchiveError::StatusError(map.next_value()?),
24595                            None => return Err(de::Error::missing_field("status_error")),
24596                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
24597                        }
24598                    }
24599                    "team_shared_dropbox_error" => {
24600                        match map.next_key()? {
24601                            Some("team_shared_dropbox_error") => TeamFolderArchiveError::TeamSharedDropboxError(map.next_value()?),
24602                            None => return Err(de::Error::missing_field("team_shared_dropbox_error")),
24603                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
24604                        }
24605                    }
24606                    _ => TeamFolderArchiveError::Other,
24607                };
24608                crate::eat_json_fields(&mut map)?;
24609                Ok(value)
24610            }
24611        }
24612        const VARIANTS: &[&str] = &["access_error",
24613                                    "status_error",
24614                                    "team_shared_dropbox_error",
24615                                    "other"];
24616        deserializer.deserialize_struct("TeamFolderArchiveError", VARIANTS, EnumVisitor)
24617    }
24618}
24619
24620impl ::serde::ser::Serialize for TeamFolderArchiveError {
24621    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
24622        // union serializer
24623        use serde::ser::SerializeStruct;
24624        match self {
24625            TeamFolderArchiveError::AccessError(x) => {
24626                // union or polymporphic struct
24627                let mut s = serializer.serialize_struct("TeamFolderArchiveError", 2)?;
24628                s.serialize_field(".tag", "access_error")?;
24629                s.serialize_field("access_error", x)?;
24630                s.end()
24631            }
24632            TeamFolderArchiveError::StatusError(x) => {
24633                // union or polymporphic struct
24634                let mut s = serializer.serialize_struct("TeamFolderArchiveError", 2)?;
24635                s.serialize_field(".tag", "status_error")?;
24636                s.serialize_field("status_error", x)?;
24637                s.end()
24638            }
24639            TeamFolderArchiveError::TeamSharedDropboxError(x) => {
24640                // union or polymporphic struct
24641                let mut s = serializer.serialize_struct("TeamFolderArchiveError", 2)?;
24642                s.serialize_field(".tag", "team_shared_dropbox_error")?;
24643                s.serialize_field("team_shared_dropbox_error", x)?;
24644                s.end()
24645            }
24646            TeamFolderArchiveError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
24647        }
24648    }
24649}
24650
24651impl ::std::error::Error for TeamFolderArchiveError {
24652    fn source(&self) -> Option<&(dyn ::std::error::Error + 'static)> {
24653        match self {
24654            TeamFolderArchiveError::AccessError(inner) => Some(inner),
24655            TeamFolderArchiveError::StatusError(inner) => Some(inner),
24656            TeamFolderArchiveError::TeamSharedDropboxError(inner) => Some(inner),
24657            _ => None,
24658        }
24659    }
24660}
24661
24662impl ::std::fmt::Display for TeamFolderArchiveError {
24663    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
24664        match self {
24665            TeamFolderArchiveError::AccessError(inner) => write!(f, "TeamFolderArchiveError: {}", inner),
24666            TeamFolderArchiveError::StatusError(inner) => write!(f, "TeamFolderArchiveError: {}", inner),
24667            TeamFolderArchiveError::TeamSharedDropboxError(inner) => write!(f, "TeamFolderArchiveError: {}", inner),
24668            _ => write!(f, "{:?}", *self),
24669        }
24670    }
24671}
24672
24673// union extends BaseTeamFolderError
24674impl From<BaseTeamFolderError> for TeamFolderArchiveError {
24675    fn from(parent: BaseTeamFolderError) -> Self {
24676        match parent {
24677            BaseTeamFolderError::AccessError(x) => TeamFolderArchiveError::AccessError(x),
24678            BaseTeamFolderError::StatusError(x) => TeamFolderArchiveError::StatusError(x),
24679            BaseTeamFolderError::TeamSharedDropboxError(x) => TeamFolderArchiveError::TeamSharedDropboxError(x),
24680            BaseTeamFolderError::Other => TeamFolderArchiveError::Other,
24681        }
24682    }
24683}
24684#[derive(Debug, Clone, PartialEq, Eq)]
24685pub enum TeamFolderArchiveJobStatus {
24686    /// The asynchronous job is still in progress.
24687    InProgress,
24688    /// The archive job has finished. The value is the metadata for the resulting team folder.
24689    Complete(TeamFolderMetadata),
24690    /// Error occurred while performing an asynchronous job from
24691    /// [`team_folder_archive()`](crate::team::team_folder_archive).
24692    Failed(TeamFolderArchiveError),
24693}
24694
24695impl<'de> ::serde::de::Deserialize<'de> for TeamFolderArchiveJobStatus {
24696    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
24697        // union deserializer
24698        use serde::de::{self, MapAccess, Visitor};
24699        struct EnumVisitor;
24700        impl<'de> Visitor<'de> for EnumVisitor {
24701            type Value = TeamFolderArchiveJobStatus;
24702            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
24703                f.write_str("a TeamFolderArchiveJobStatus structure")
24704            }
24705            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
24706                let tag: &str = match map.next_key()? {
24707                    Some(".tag") => map.next_value()?,
24708                    _ => return Err(de::Error::missing_field(".tag"))
24709                };
24710                let value = match tag {
24711                    "in_progress" => TeamFolderArchiveJobStatus::InProgress,
24712                    "complete" => TeamFolderArchiveJobStatus::Complete(TeamFolderMetadata::internal_deserialize(&mut map)?),
24713                    "failed" => {
24714                        match map.next_key()? {
24715                            Some("failed") => TeamFolderArchiveJobStatus::Failed(map.next_value()?),
24716                            None => return Err(de::Error::missing_field("failed")),
24717                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
24718                        }
24719                    }
24720                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
24721                };
24722                crate::eat_json_fields(&mut map)?;
24723                Ok(value)
24724            }
24725        }
24726        const VARIANTS: &[&str] = &["in_progress",
24727                                    "complete",
24728                                    "failed"];
24729        deserializer.deserialize_struct("TeamFolderArchiveJobStatus", VARIANTS, EnumVisitor)
24730    }
24731}
24732
24733impl ::serde::ser::Serialize for TeamFolderArchiveJobStatus {
24734    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
24735        // union serializer
24736        use serde::ser::SerializeStruct;
24737        match self {
24738            TeamFolderArchiveJobStatus::InProgress => {
24739                // unit
24740                let mut s = serializer.serialize_struct("TeamFolderArchiveJobStatus", 1)?;
24741                s.serialize_field(".tag", "in_progress")?;
24742                s.end()
24743            }
24744            TeamFolderArchiveJobStatus::Complete(x) => {
24745                // struct
24746                let mut s = serializer.serialize_struct("TeamFolderArchiveJobStatus", 7)?;
24747                s.serialize_field(".tag", "complete")?;
24748                x.internal_serialize::<S>(&mut s)?;
24749                s.end()
24750            }
24751            TeamFolderArchiveJobStatus::Failed(x) => {
24752                // union or polymporphic struct
24753                let mut s = serializer.serialize_struct("TeamFolderArchiveJobStatus", 2)?;
24754                s.serialize_field(".tag", "failed")?;
24755                s.serialize_field("failed", x)?;
24756                s.end()
24757            }
24758        }
24759    }
24760}
24761
24762// union extends crate::types::dbx_async::PollResultBase
24763impl From<crate::types::dbx_async::PollResultBase> for TeamFolderArchiveJobStatus {
24764    fn from(parent: crate::types::dbx_async::PollResultBase) -> Self {
24765        match parent {
24766            crate::types::dbx_async::PollResultBase::InProgress => TeamFolderArchiveJobStatus::InProgress,
24767        }
24768    }
24769}
24770#[derive(Debug, Clone, PartialEq, Eq)]
24771pub enum TeamFolderArchiveLaunch {
24772    /// This response indicates that the processing is asynchronous. The string is an id that can be
24773    /// used to obtain the status of the asynchronous job.
24774    AsyncJobId(crate::types::dbx_async::AsyncJobId),
24775    Complete(TeamFolderMetadata),
24776}
24777
24778impl<'de> ::serde::de::Deserialize<'de> for TeamFolderArchiveLaunch {
24779    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
24780        // union deserializer
24781        use serde::de::{self, MapAccess, Visitor};
24782        struct EnumVisitor;
24783        impl<'de> Visitor<'de> for EnumVisitor {
24784            type Value = TeamFolderArchiveLaunch;
24785            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
24786                f.write_str("a TeamFolderArchiveLaunch structure")
24787            }
24788            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
24789                let tag: &str = match map.next_key()? {
24790                    Some(".tag") => map.next_value()?,
24791                    _ => return Err(de::Error::missing_field(".tag"))
24792                };
24793                let value = match tag {
24794                    "async_job_id" => {
24795                        match map.next_key()? {
24796                            Some("async_job_id") => TeamFolderArchiveLaunch::AsyncJobId(map.next_value()?),
24797                            None => return Err(de::Error::missing_field("async_job_id")),
24798                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
24799                        }
24800                    }
24801                    "complete" => TeamFolderArchiveLaunch::Complete(TeamFolderMetadata::internal_deserialize(&mut map)?),
24802                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
24803                };
24804                crate::eat_json_fields(&mut map)?;
24805                Ok(value)
24806            }
24807        }
24808        const VARIANTS: &[&str] = &["async_job_id",
24809                                    "complete"];
24810        deserializer.deserialize_struct("TeamFolderArchiveLaunch", VARIANTS, EnumVisitor)
24811    }
24812}
24813
24814impl ::serde::ser::Serialize for TeamFolderArchiveLaunch {
24815    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
24816        // union serializer
24817        use serde::ser::SerializeStruct;
24818        match self {
24819            TeamFolderArchiveLaunch::AsyncJobId(x) => {
24820                // primitive
24821                let mut s = serializer.serialize_struct("TeamFolderArchiveLaunch", 2)?;
24822                s.serialize_field(".tag", "async_job_id")?;
24823                s.serialize_field("async_job_id", x)?;
24824                s.end()
24825            }
24826            TeamFolderArchiveLaunch::Complete(x) => {
24827                // struct
24828                let mut s = serializer.serialize_struct("TeamFolderArchiveLaunch", 7)?;
24829                s.serialize_field(".tag", "complete")?;
24830                x.internal_serialize::<S>(&mut s)?;
24831                s.end()
24832            }
24833        }
24834    }
24835}
24836
24837// union extends crate::types::dbx_async::LaunchResultBase
24838impl From<crate::types::dbx_async::LaunchResultBase> for TeamFolderArchiveLaunch {
24839    fn from(parent: crate::types::dbx_async::LaunchResultBase) -> Self {
24840        match parent {
24841            crate::types::dbx_async::LaunchResultBase::AsyncJobId(x) => TeamFolderArchiveLaunch::AsyncJobId(x),
24842        }
24843    }
24844}
24845#[derive(Debug, Clone, PartialEq, Eq)]
24846#[non_exhaustive] // structs may have more fields added in the future.
24847pub struct TeamFolderCreateArg {
24848    /// Name for the new team folder.
24849    pub name: String,
24850    /// The sync setting to apply to this team folder. Only permitted if the team has team selective
24851    /// sync enabled.
24852    pub sync_setting: Option<crate::types::files::SyncSettingArg>,
24853}
24854
24855impl TeamFolderCreateArg {
24856    pub fn new(name: String) -> Self {
24857        TeamFolderCreateArg {
24858            name,
24859            sync_setting: None,
24860        }
24861    }
24862
24863    pub fn with_sync_setting(mut self, value: crate::types::files::SyncSettingArg) -> Self {
24864        self.sync_setting = Some(value);
24865        self
24866    }
24867}
24868
24869const TEAM_FOLDER_CREATE_ARG_FIELDS: &[&str] = &["name",
24870                                                 "sync_setting"];
24871impl TeamFolderCreateArg {
24872    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
24873        map: V,
24874    ) -> Result<TeamFolderCreateArg, V::Error> {
24875        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
24876    }
24877
24878    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
24879        mut map: V,
24880        optional: bool,
24881    ) -> Result<Option<TeamFolderCreateArg>, V::Error> {
24882        let mut field_name = None;
24883        let mut field_sync_setting = None;
24884        let mut nothing = true;
24885        while let Some(key) = map.next_key::<&str>()? {
24886            nothing = false;
24887            match key {
24888                "name" => {
24889                    if field_name.is_some() {
24890                        return Err(::serde::de::Error::duplicate_field("name"));
24891                    }
24892                    field_name = Some(map.next_value()?);
24893                }
24894                "sync_setting" => {
24895                    if field_sync_setting.is_some() {
24896                        return Err(::serde::de::Error::duplicate_field("sync_setting"));
24897                    }
24898                    field_sync_setting = Some(map.next_value()?);
24899                }
24900                _ => {
24901                    // unknown field allowed and ignored
24902                    map.next_value::<::serde_json::Value>()?;
24903                }
24904            }
24905        }
24906        if optional && nothing {
24907            return Ok(None);
24908        }
24909        let result = TeamFolderCreateArg {
24910            name: field_name.ok_or_else(|| ::serde::de::Error::missing_field("name"))?,
24911            sync_setting: field_sync_setting.and_then(Option::flatten),
24912        };
24913        Ok(Some(result))
24914    }
24915
24916    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
24917        &self,
24918        s: &mut S::SerializeStruct,
24919    ) -> Result<(), S::Error> {
24920        use serde::ser::SerializeStruct;
24921        s.serialize_field("name", &self.name)?;
24922        if let Some(val) = &self.sync_setting {
24923            s.serialize_field("sync_setting", val)?;
24924        }
24925        Ok(())
24926    }
24927}
24928
24929impl<'de> ::serde::de::Deserialize<'de> for TeamFolderCreateArg {
24930    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
24931        // struct deserializer
24932        use serde::de::{MapAccess, Visitor};
24933        struct StructVisitor;
24934        impl<'de> Visitor<'de> for StructVisitor {
24935            type Value = TeamFolderCreateArg;
24936            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
24937                f.write_str("a TeamFolderCreateArg struct")
24938            }
24939            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
24940                TeamFolderCreateArg::internal_deserialize(map)
24941            }
24942        }
24943        deserializer.deserialize_struct("TeamFolderCreateArg", TEAM_FOLDER_CREATE_ARG_FIELDS, StructVisitor)
24944    }
24945}
24946
24947impl ::serde::ser::Serialize for TeamFolderCreateArg {
24948    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
24949        // struct serializer
24950        use serde::ser::SerializeStruct;
24951        let mut s = serializer.serialize_struct("TeamFolderCreateArg", 2)?;
24952        self.internal_serialize::<S>(&mut s)?;
24953        s.end()
24954    }
24955}
24956
24957#[derive(Debug, Clone, PartialEq, Eq)]
24958#[non_exhaustive] // variants may be added in the future
24959pub enum TeamFolderCreateError {
24960    /// The provided name cannot be used.
24961    InvalidFolderName,
24962    /// There is already a team folder with the provided name.
24963    FolderNameAlreadyUsed,
24964    /// The provided name cannot be used because it is reserved.
24965    FolderNameReserved,
24966    /// An error occurred setting the sync settings.
24967    SyncSettingsError(crate::types::files::SyncSettingsError),
24968    /// Catch-all used for unrecognized values returned from the server. Encountering this value
24969    /// typically indicates that this SDK version is out of date.
24970    Other,
24971}
24972
24973impl<'de> ::serde::de::Deserialize<'de> for TeamFolderCreateError {
24974    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
24975        // union deserializer
24976        use serde::de::{self, MapAccess, Visitor};
24977        struct EnumVisitor;
24978        impl<'de> Visitor<'de> for EnumVisitor {
24979            type Value = TeamFolderCreateError;
24980            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
24981                f.write_str("a TeamFolderCreateError structure")
24982            }
24983            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
24984                let tag: &str = match map.next_key()? {
24985                    Some(".tag") => map.next_value()?,
24986                    _ => return Err(de::Error::missing_field(".tag"))
24987                };
24988                let value = match tag {
24989                    "invalid_folder_name" => TeamFolderCreateError::InvalidFolderName,
24990                    "folder_name_already_used" => TeamFolderCreateError::FolderNameAlreadyUsed,
24991                    "folder_name_reserved" => TeamFolderCreateError::FolderNameReserved,
24992                    "sync_settings_error" => {
24993                        match map.next_key()? {
24994                            Some("sync_settings_error") => TeamFolderCreateError::SyncSettingsError(map.next_value()?),
24995                            None => return Err(de::Error::missing_field("sync_settings_error")),
24996                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
24997                        }
24998                    }
24999                    _ => TeamFolderCreateError::Other,
25000                };
25001                crate::eat_json_fields(&mut map)?;
25002                Ok(value)
25003            }
25004        }
25005        const VARIANTS: &[&str] = &["invalid_folder_name",
25006                                    "folder_name_already_used",
25007                                    "folder_name_reserved",
25008                                    "sync_settings_error",
25009                                    "other"];
25010        deserializer.deserialize_struct("TeamFolderCreateError", VARIANTS, EnumVisitor)
25011    }
25012}
25013
25014impl ::serde::ser::Serialize for TeamFolderCreateError {
25015    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
25016        // union serializer
25017        use serde::ser::SerializeStruct;
25018        match self {
25019            TeamFolderCreateError::InvalidFolderName => {
25020                // unit
25021                let mut s = serializer.serialize_struct("TeamFolderCreateError", 1)?;
25022                s.serialize_field(".tag", "invalid_folder_name")?;
25023                s.end()
25024            }
25025            TeamFolderCreateError::FolderNameAlreadyUsed => {
25026                // unit
25027                let mut s = serializer.serialize_struct("TeamFolderCreateError", 1)?;
25028                s.serialize_field(".tag", "folder_name_already_used")?;
25029                s.end()
25030            }
25031            TeamFolderCreateError::FolderNameReserved => {
25032                // unit
25033                let mut s = serializer.serialize_struct("TeamFolderCreateError", 1)?;
25034                s.serialize_field(".tag", "folder_name_reserved")?;
25035                s.end()
25036            }
25037            TeamFolderCreateError::SyncSettingsError(x) => {
25038                // union or polymporphic struct
25039                let mut s = serializer.serialize_struct("TeamFolderCreateError", 2)?;
25040                s.serialize_field(".tag", "sync_settings_error")?;
25041                s.serialize_field("sync_settings_error", x)?;
25042                s.end()
25043            }
25044            TeamFolderCreateError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
25045        }
25046    }
25047}
25048
25049impl ::std::error::Error for TeamFolderCreateError {
25050    fn source(&self) -> Option<&(dyn ::std::error::Error + 'static)> {
25051        match self {
25052            TeamFolderCreateError::SyncSettingsError(inner) => Some(inner),
25053            _ => None,
25054        }
25055    }
25056}
25057
25058impl ::std::fmt::Display for TeamFolderCreateError {
25059    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
25060        match self {
25061            TeamFolderCreateError::InvalidFolderName => f.write_str("The provided name cannot be used."),
25062            TeamFolderCreateError::FolderNameAlreadyUsed => f.write_str("There is already a team folder with the provided name."),
25063            TeamFolderCreateError::FolderNameReserved => f.write_str("The provided name cannot be used because it is reserved."),
25064            TeamFolderCreateError::SyncSettingsError(inner) => write!(f, "An error occurred setting the sync settings: {}", inner),
25065            _ => write!(f, "{:?}", *self),
25066        }
25067    }
25068}
25069
25070#[derive(Debug, Clone, PartialEq, Eq)]
25071pub enum TeamFolderGetInfoItem {
25072    /// An ID that was provided as a parameter to
25073    /// [`team_folder_get_info()`](crate::team::team_folder_get_info) did not match any of the
25074    /// team's team folders.
25075    IdNotFound(String),
25076    /// Properties of a team folder.
25077    TeamFolderMetadata(TeamFolderMetadata),
25078}
25079
25080impl<'de> ::serde::de::Deserialize<'de> for TeamFolderGetInfoItem {
25081    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
25082        // union deserializer
25083        use serde::de::{self, MapAccess, Visitor};
25084        struct EnumVisitor;
25085        impl<'de> Visitor<'de> for EnumVisitor {
25086            type Value = TeamFolderGetInfoItem;
25087            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
25088                f.write_str("a TeamFolderGetInfoItem structure")
25089            }
25090            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
25091                let tag: &str = match map.next_key()? {
25092                    Some(".tag") => map.next_value()?,
25093                    _ => return Err(de::Error::missing_field(".tag"))
25094                };
25095                let value = match tag {
25096                    "id_not_found" => {
25097                        match map.next_key()? {
25098                            Some("id_not_found") => TeamFolderGetInfoItem::IdNotFound(map.next_value()?),
25099                            None => return Err(de::Error::missing_field("id_not_found")),
25100                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
25101                        }
25102                    }
25103                    "team_folder_metadata" => TeamFolderGetInfoItem::TeamFolderMetadata(TeamFolderMetadata::internal_deserialize(&mut map)?),
25104                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
25105                };
25106                crate::eat_json_fields(&mut map)?;
25107                Ok(value)
25108            }
25109        }
25110        const VARIANTS: &[&str] = &["id_not_found",
25111                                    "team_folder_metadata"];
25112        deserializer.deserialize_struct("TeamFolderGetInfoItem", VARIANTS, EnumVisitor)
25113    }
25114}
25115
25116impl ::serde::ser::Serialize for TeamFolderGetInfoItem {
25117    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
25118        // union serializer
25119        use serde::ser::SerializeStruct;
25120        match self {
25121            TeamFolderGetInfoItem::IdNotFound(x) => {
25122                // primitive
25123                let mut s = serializer.serialize_struct("TeamFolderGetInfoItem", 2)?;
25124                s.serialize_field(".tag", "id_not_found")?;
25125                s.serialize_field("id_not_found", x)?;
25126                s.end()
25127            }
25128            TeamFolderGetInfoItem::TeamFolderMetadata(x) => {
25129                // struct
25130                let mut s = serializer.serialize_struct("TeamFolderGetInfoItem", 7)?;
25131                s.serialize_field(".tag", "team_folder_metadata")?;
25132                x.internal_serialize::<S>(&mut s)?;
25133                s.end()
25134            }
25135        }
25136    }
25137}
25138
25139#[derive(Debug, Clone, PartialEq, Eq)]
25140#[non_exhaustive] // structs may have more fields added in the future.
25141pub struct TeamFolderIdArg {
25142    /// The ID of the team folder.
25143    pub team_folder_id: crate::types::common::SharedFolderId,
25144}
25145
25146impl TeamFolderIdArg {
25147    pub fn new(team_folder_id: crate::types::common::SharedFolderId) -> Self {
25148        TeamFolderIdArg {
25149            team_folder_id,
25150        }
25151    }
25152}
25153
25154const TEAM_FOLDER_ID_ARG_FIELDS: &[&str] = &["team_folder_id"];
25155impl TeamFolderIdArg {
25156    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
25157        map: V,
25158    ) -> Result<TeamFolderIdArg, V::Error> {
25159        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
25160    }
25161
25162    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
25163        mut map: V,
25164        optional: bool,
25165    ) -> Result<Option<TeamFolderIdArg>, V::Error> {
25166        let mut field_team_folder_id = None;
25167        let mut nothing = true;
25168        while let Some(key) = map.next_key::<&str>()? {
25169            nothing = false;
25170            match key {
25171                "team_folder_id" => {
25172                    if field_team_folder_id.is_some() {
25173                        return Err(::serde::de::Error::duplicate_field("team_folder_id"));
25174                    }
25175                    field_team_folder_id = Some(map.next_value()?);
25176                }
25177                _ => {
25178                    // unknown field allowed and ignored
25179                    map.next_value::<::serde_json::Value>()?;
25180                }
25181            }
25182        }
25183        if optional && nothing {
25184            return Ok(None);
25185        }
25186        let result = TeamFolderIdArg {
25187            team_folder_id: field_team_folder_id.ok_or_else(|| ::serde::de::Error::missing_field("team_folder_id"))?,
25188        };
25189        Ok(Some(result))
25190    }
25191
25192    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
25193        &self,
25194        s: &mut S::SerializeStruct,
25195    ) -> Result<(), S::Error> {
25196        use serde::ser::SerializeStruct;
25197        s.serialize_field("team_folder_id", &self.team_folder_id)?;
25198        Ok(())
25199    }
25200}
25201
25202impl<'de> ::serde::de::Deserialize<'de> for TeamFolderIdArg {
25203    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
25204        // struct deserializer
25205        use serde::de::{MapAccess, Visitor};
25206        struct StructVisitor;
25207        impl<'de> Visitor<'de> for StructVisitor {
25208            type Value = TeamFolderIdArg;
25209            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
25210                f.write_str("a TeamFolderIdArg struct")
25211            }
25212            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
25213                TeamFolderIdArg::internal_deserialize(map)
25214            }
25215        }
25216        deserializer.deserialize_struct("TeamFolderIdArg", TEAM_FOLDER_ID_ARG_FIELDS, StructVisitor)
25217    }
25218}
25219
25220impl ::serde::ser::Serialize for TeamFolderIdArg {
25221    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
25222        // struct serializer
25223        use serde::ser::SerializeStruct;
25224        let mut s = serializer.serialize_struct("TeamFolderIdArg", 1)?;
25225        self.internal_serialize::<S>(&mut s)?;
25226        s.end()
25227    }
25228}
25229
25230#[derive(Debug, Clone, PartialEq, Eq)]
25231#[non_exhaustive] // structs may have more fields added in the future.
25232pub struct TeamFolderIdListArg {
25233    /// The list of team folder IDs.
25234    pub team_folder_ids: Vec<crate::types::common::SharedFolderId>,
25235}
25236
25237impl TeamFolderIdListArg {
25238    pub fn new(team_folder_ids: Vec<crate::types::common::SharedFolderId>) -> Self {
25239        TeamFolderIdListArg {
25240            team_folder_ids,
25241        }
25242    }
25243}
25244
25245const TEAM_FOLDER_ID_LIST_ARG_FIELDS: &[&str] = &["team_folder_ids"];
25246impl TeamFolderIdListArg {
25247    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
25248        map: V,
25249    ) -> Result<TeamFolderIdListArg, V::Error> {
25250        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
25251    }
25252
25253    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
25254        mut map: V,
25255        optional: bool,
25256    ) -> Result<Option<TeamFolderIdListArg>, V::Error> {
25257        let mut field_team_folder_ids = None;
25258        let mut nothing = true;
25259        while let Some(key) = map.next_key::<&str>()? {
25260            nothing = false;
25261            match key {
25262                "team_folder_ids" => {
25263                    if field_team_folder_ids.is_some() {
25264                        return Err(::serde::de::Error::duplicate_field("team_folder_ids"));
25265                    }
25266                    field_team_folder_ids = Some(map.next_value()?);
25267                }
25268                _ => {
25269                    // unknown field allowed and ignored
25270                    map.next_value::<::serde_json::Value>()?;
25271                }
25272            }
25273        }
25274        if optional && nothing {
25275            return Ok(None);
25276        }
25277        let result = TeamFolderIdListArg {
25278            team_folder_ids: field_team_folder_ids.ok_or_else(|| ::serde::de::Error::missing_field("team_folder_ids"))?,
25279        };
25280        Ok(Some(result))
25281    }
25282
25283    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
25284        &self,
25285        s: &mut S::SerializeStruct,
25286    ) -> Result<(), S::Error> {
25287        use serde::ser::SerializeStruct;
25288        s.serialize_field("team_folder_ids", &self.team_folder_ids)?;
25289        Ok(())
25290    }
25291}
25292
25293impl<'de> ::serde::de::Deserialize<'de> for TeamFolderIdListArg {
25294    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
25295        // struct deserializer
25296        use serde::de::{MapAccess, Visitor};
25297        struct StructVisitor;
25298        impl<'de> Visitor<'de> for StructVisitor {
25299            type Value = TeamFolderIdListArg;
25300            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
25301                f.write_str("a TeamFolderIdListArg struct")
25302            }
25303            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
25304                TeamFolderIdListArg::internal_deserialize(map)
25305            }
25306        }
25307        deserializer.deserialize_struct("TeamFolderIdListArg", TEAM_FOLDER_ID_LIST_ARG_FIELDS, StructVisitor)
25308    }
25309}
25310
25311impl ::serde::ser::Serialize for TeamFolderIdListArg {
25312    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
25313        // struct serializer
25314        use serde::ser::SerializeStruct;
25315        let mut s = serializer.serialize_struct("TeamFolderIdListArg", 1)?;
25316        self.internal_serialize::<S>(&mut s)?;
25317        s.end()
25318    }
25319}
25320
25321#[derive(Debug, Clone, PartialEq, Eq)]
25322#[non_exhaustive] // variants may be added in the future
25323pub enum TeamFolderInvalidStatusError {
25324    /// The folder is active and the operation did not succeed.
25325    Active,
25326    /// The folder is archived and the operation did not succeed.
25327    Archived,
25328    /// The folder is being archived and the operation did not succeed.
25329    ArchiveInProgress,
25330    /// Catch-all used for unrecognized values returned from the server. Encountering this value
25331    /// typically indicates that this SDK version is out of date.
25332    Other,
25333}
25334
25335impl<'de> ::serde::de::Deserialize<'de> for TeamFolderInvalidStatusError {
25336    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
25337        // union deserializer
25338        use serde::de::{self, MapAccess, Visitor};
25339        struct EnumVisitor;
25340        impl<'de> Visitor<'de> for EnumVisitor {
25341            type Value = TeamFolderInvalidStatusError;
25342            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
25343                f.write_str("a TeamFolderInvalidStatusError structure")
25344            }
25345            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
25346                let tag: &str = match map.next_key()? {
25347                    Some(".tag") => map.next_value()?,
25348                    _ => return Err(de::Error::missing_field(".tag"))
25349                };
25350                let value = match tag {
25351                    "active" => TeamFolderInvalidStatusError::Active,
25352                    "archived" => TeamFolderInvalidStatusError::Archived,
25353                    "archive_in_progress" => TeamFolderInvalidStatusError::ArchiveInProgress,
25354                    _ => TeamFolderInvalidStatusError::Other,
25355                };
25356                crate::eat_json_fields(&mut map)?;
25357                Ok(value)
25358            }
25359        }
25360        const VARIANTS: &[&str] = &["active",
25361                                    "archived",
25362                                    "archive_in_progress",
25363                                    "other"];
25364        deserializer.deserialize_struct("TeamFolderInvalidStatusError", VARIANTS, EnumVisitor)
25365    }
25366}
25367
25368impl ::serde::ser::Serialize for TeamFolderInvalidStatusError {
25369    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
25370        // union serializer
25371        use serde::ser::SerializeStruct;
25372        match self {
25373            TeamFolderInvalidStatusError::Active => {
25374                // unit
25375                let mut s = serializer.serialize_struct("TeamFolderInvalidStatusError", 1)?;
25376                s.serialize_field(".tag", "active")?;
25377                s.end()
25378            }
25379            TeamFolderInvalidStatusError::Archived => {
25380                // unit
25381                let mut s = serializer.serialize_struct("TeamFolderInvalidStatusError", 1)?;
25382                s.serialize_field(".tag", "archived")?;
25383                s.end()
25384            }
25385            TeamFolderInvalidStatusError::ArchiveInProgress => {
25386                // unit
25387                let mut s = serializer.serialize_struct("TeamFolderInvalidStatusError", 1)?;
25388                s.serialize_field(".tag", "archive_in_progress")?;
25389                s.end()
25390            }
25391            TeamFolderInvalidStatusError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
25392        }
25393    }
25394}
25395
25396impl ::std::error::Error for TeamFolderInvalidStatusError {
25397}
25398
25399impl ::std::fmt::Display for TeamFolderInvalidStatusError {
25400    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
25401        match self {
25402            TeamFolderInvalidStatusError::Active => f.write_str("The folder is active and the operation did not succeed."),
25403            TeamFolderInvalidStatusError::Archived => f.write_str("The folder is archived and the operation did not succeed."),
25404            TeamFolderInvalidStatusError::ArchiveInProgress => f.write_str("The folder is being archived and the operation did not succeed."),
25405            _ => write!(f, "{:?}", *self),
25406        }
25407    }
25408}
25409
25410#[derive(Debug, Clone, PartialEq, Eq)]
25411#[non_exhaustive] // structs may have more fields added in the future.
25412pub struct TeamFolderListArg {
25413    /// The maximum number of results to return per request.
25414    pub limit: u32,
25415}
25416
25417impl Default for TeamFolderListArg {
25418    fn default() -> Self {
25419        TeamFolderListArg {
25420            limit: 1000,
25421        }
25422    }
25423}
25424
25425impl TeamFolderListArg {
25426    pub fn with_limit(mut self, value: u32) -> Self {
25427        self.limit = value;
25428        self
25429    }
25430}
25431
25432const TEAM_FOLDER_LIST_ARG_FIELDS: &[&str] = &["limit"];
25433impl TeamFolderListArg {
25434    // no _opt deserializer
25435    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
25436        mut map: V,
25437    ) -> Result<TeamFolderListArg, V::Error> {
25438        let mut field_limit = None;
25439        while let Some(key) = map.next_key::<&str>()? {
25440            match key {
25441                "limit" => {
25442                    if field_limit.is_some() {
25443                        return Err(::serde::de::Error::duplicate_field("limit"));
25444                    }
25445                    field_limit = Some(map.next_value()?);
25446                }
25447                _ => {
25448                    // unknown field allowed and ignored
25449                    map.next_value::<::serde_json::Value>()?;
25450                }
25451            }
25452        }
25453        let result = TeamFolderListArg {
25454            limit: field_limit.unwrap_or(1000),
25455        };
25456        Ok(result)
25457    }
25458
25459    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
25460        &self,
25461        s: &mut S::SerializeStruct,
25462    ) -> Result<(), S::Error> {
25463        use serde::ser::SerializeStruct;
25464        if self.limit != 1000 {
25465            s.serialize_field("limit", &self.limit)?;
25466        }
25467        Ok(())
25468    }
25469}
25470
25471impl<'de> ::serde::de::Deserialize<'de> for TeamFolderListArg {
25472    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
25473        // struct deserializer
25474        use serde::de::{MapAccess, Visitor};
25475        struct StructVisitor;
25476        impl<'de> Visitor<'de> for StructVisitor {
25477            type Value = TeamFolderListArg;
25478            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
25479                f.write_str("a TeamFolderListArg struct")
25480            }
25481            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
25482                TeamFolderListArg::internal_deserialize(map)
25483            }
25484        }
25485        deserializer.deserialize_struct("TeamFolderListArg", TEAM_FOLDER_LIST_ARG_FIELDS, StructVisitor)
25486    }
25487}
25488
25489impl ::serde::ser::Serialize for TeamFolderListArg {
25490    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
25491        // struct serializer
25492        use serde::ser::SerializeStruct;
25493        let mut s = serializer.serialize_struct("TeamFolderListArg", 1)?;
25494        self.internal_serialize::<S>(&mut s)?;
25495        s.end()
25496    }
25497}
25498
25499#[derive(Debug, Clone, PartialEq, Eq)]
25500#[non_exhaustive] // structs may have more fields added in the future.
25501pub struct TeamFolderListContinueArg {
25502    /// Indicates from what point to get the next set of team folders.
25503    pub cursor: String,
25504}
25505
25506impl TeamFolderListContinueArg {
25507    pub fn new(cursor: String) -> Self {
25508        TeamFolderListContinueArg {
25509            cursor,
25510        }
25511    }
25512}
25513
25514const TEAM_FOLDER_LIST_CONTINUE_ARG_FIELDS: &[&str] = &["cursor"];
25515impl TeamFolderListContinueArg {
25516    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
25517        map: V,
25518    ) -> Result<TeamFolderListContinueArg, V::Error> {
25519        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
25520    }
25521
25522    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
25523        mut map: V,
25524        optional: bool,
25525    ) -> Result<Option<TeamFolderListContinueArg>, V::Error> {
25526        let mut field_cursor = None;
25527        let mut nothing = true;
25528        while let Some(key) = map.next_key::<&str>()? {
25529            nothing = false;
25530            match key {
25531                "cursor" => {
25532                    if field_cursor.is_some() {
25533                        return Err(::serde::de::Error::duplicate_field("cursor"));
25534                    }
25535                    field_cursor = Some(map.next_value()?);
25536                }
25537                _ => {
25538                    // unknown field allowed and ignored
25539                    map.next_value::<::serde_json::Value>()?;
25540                }
25541            }
25542        }
25543        if optional && nothing {
25544            return Ok(None);
25545        }
25546        let result = TeamFolderListContinueArg {
25547            cursor: field_cursor.ok_or_else(|| ::serde::de::Error::missing_field("cursor"))?,
25548        };
25549        Ok(Some(result))
25550    }
25551
25552    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
25553        &self,
25554        s: &mut S::SerializeStruct,
25555    ) -> Result<(), S::Error> {
25556        use serde::ser::SerializeStruct;
25557        s.serialize_field("cursor", &self.cursor)?;
25558        Ok(())
25559    }
25560}
25561
25562impl<'de> ::serde::de::Deserialize<'de> for TeamFolderListContinueArg {
25563    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
25564        // struct deserializer
25565        use serde::de::{MapAccess, Visitor};
25566        struct StructVisitor;
25567        impl<'de> Visitor<'de> for StructVisitor {
25568            type Value = TeamFolderListContinueArg;
25569            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
25570                f.write_str("a TeamFolderListContinueArg struct")
25571            }
25572            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
25573                TeamFolderListContinueArg::internal_deserialize(map)
25574            }
25575        }
25576        deserializer.deserialize_struct("TeamFolderListContinueArg", TEAM_FOLDER_LIST_CONTINUE_ARG_FIELDS, StructVisitor)
25577    }
25578}
25579
25580impl ::serde::ser::Serialize for TeamFolderListContinueArg {
25581    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
25582        // struct serializer
25583        use serde::ser::SerializeStruct;
25584        let mut s = serializer.serialize_struct("TeamFolderListContinueArg", 1)?;
25585        self.internal_serialize::<S>(&mut s)?;
25586        s.end()
25587    }
25588}
25589
25590#[derive(Debug, Clone, PartialEq, Eq)]
25591#[non_exhaustive] // variants may be added in the future
25592pub enum TeamFolderListContinueError {
25593    /// The cursor is invalid.
25594    InvalidCursor,
25595    /// Catch-all used for unrecognized values returned from the server. Encountering this value
25596    /// typically indicates that this SDK version is out of date.
25597    Other,
25598}
25599
25600impl<'de> ::serde::de::Deserialize<'de> for TeamFolderListContinueError {
25601    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
25602        // union deserializer
25603        use serde::de::{self, MapAccess, Visitor};
25604        struct EnumVisitor;
25605        impl<'de> Visitor<'de> for EnumVisitor {
25606            type Value = TeamFolderListContinueError;
25607            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
25608                f.write_str("a TeamFolderListContinueError structure")
25609            }
25610            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
25611                let tag: &str = match map.next_key()? {
25612                    Some(".tag") => map.next_value()?,
25613                    _ => return Err(de::Error::missing_field(".tag"))
25614                };
25615                let value = match tag {
25616                    "invalid_cursor" => TeamFolderListContinueError::InvalidCursor,
25617                    _ => TeamFolderListContinueError::Other,
25618                };
25619                crate::eat_json_fields(&mut map)?;
25620                Ok(value)
25621            }
25622        }
25623        const VARIANTS: &[&str] = &["invalid_cursor",
25624                                    "other"];
25625        deserializer.deserialize_struct("TeamFolderListContinueError", VARIANTS, EnumVisitor)
25626    }
25627}
25628
25629impl ::serde::ser::Serialize for TeamFolderListContinueError {
25630    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
25631        // union serializer
25632        use serde::ser::SerializeStruct;
25633        match self {
25634            TeamFolderListContinueError::InvalidCursor => {
25635                // unit
25636                let mut s = serializer.serialize_struct("TeamFolderListContinueError", 1)?;
25637                s.serialize_field(".tag", "invalid_cursor")?;
25638                s.end()
25639            }
25640            TeamFolderListContinueError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
25641        }
25642    }
25643}
25644
25645impl ::std::error::Error for TeamFolderListContinueError {
25646}
25647
25648impl ::std::fmt::Display for TeamFolderListContinueError {
25649    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
25650        match self {
25651            TeamFolderListContinueError::InvalidCursor => f.write_str("The cursor is invalid."),
25652            _ => write!(f, "{:?}", *self),
25653        }
25654    }
25655}
25656
25657#[derive(Debug, Clone, PartialEq, Eq)]
25658#[non_exhaustive] // structs may have more fields added in the future.
25659pub struct TeamFolderListError {
25660    pub access_error: TeamFolderAccessError,
25661}
25662
25663impl TeamFolderListError {
25664    pub fn new(access_error: TeamFolderAccessError) -> Self {
25665        TeamFolderListError {
25666            access_error,
25667        }
25668    }
25669}
25670
25671const TEAM_FOLDER_LIST_ERROR_FIELDS: &[&str] = &["access_error"];
25672impl TeamFolderListError {
25673    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
25674        map: V,
25675    ) -> Result<TeamFolderListError, V::Error> {
25676        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
25677    }
25678
25679    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
25680        mut map: V,
25681        optional: bool,
25682    ) -> Result<Option<TeamFolderListError>, V::Error> {
25683        let mut field_access_error = None;
25684        let mut nothing = true;
25685        while let Some(key) = map.next_key::<&str>()? {
25686            nothing = false;
25687            match key {
25688                "access_error" => {
25689                    if field_access_error.is_some() {
25690                        return Err(::serde::de::Error::duplicate_field("access_error"));
25691                    }
25692                    field_access_error = Some(map.next_value()?);
25693                }
25694                _ => {
25695                    // unknown field allowed and ignored
25696                    map.next_value::<::serde_json::Value>()?;
25697                }
25698            }
25699        }
25700        if optional && nothing {
25701            return Ok(None);
25702        }
25703        let result = TeamFolderListError {
25704            access_error: field_access_error.ok_or_else(|| ::serde::de::Error::missing_field("access_error"))?,
25705        };
25706        Ok(Some(result))
25707    }
25708
25709    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
25710        &self,
25711        s: &mut S::SerializeStruct,
25712    ) -> Result<(), S::Error> {
25713        use serde::ser::SerializeStruct;
25714        s.serialize_field("access_error", &self.access_error)?;
25715        Ok(())
25716    }
25717}
25718
25719impl<'de> ::serde::de::Deserialize<'de> for TeamFolderListError {
25720    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
25721        // struct deserializer
25722        use serde::de::{MapAccess, Visitor};
25723        struct StructVisitor;
25724        impl<'de> Visitor<'de> for StructVisitor {
25725            type Value = TeamFolderListError;
25726            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
25727                f.write_str("a TeamFolderListError struct")
25728            }
25729            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
25730                TeamFolderListError::internal_deserialize(map)
25731            }
25732        }
25733        deserializer.deserialize_struct("TeamFolderListError", TEAM_FOLDER_LIST_ERROR_FIELDS, StructVisitor)
25734    }
25735}
25736
25737impl ::serde::ser::Serialize for TeamFolderListError {
25738    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
25739        // struct serializer
25740        use serde::ser::SerializeStruct;
25741        let mut s = serializer.serialize_struct("TeamFolderListError", 1)?;
25742        self.internal_serialize::<S>(&mut s)?;
25743        s.end()
25744    }
25745}
25746
25747impl ::std::error::Error for TeamFolderListError {
25748}
25749
25750impl ::std::fmt::Display for TeamFolderListError {
25751    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
25752        write!(f, "{:?}", *self)
25753    }
25754}
25755
25756/// Result for [`team_folder_list()`](crate::team::team_folder_list) and
25757/// [`team_folder_list_continue()`](crate::team::team_folder_list_continue).
25758#[derive(Debug, Clone, PartialEq, Eq)]
25759#[non_exhaustive] // structs may have more fields added in the future.
25760pub struct TeamFolderListResult {
25761    /// List of all team folders in the authenticated team.
25762    pub team_folders: Vec<TeamFolderMetadata>,
25763    /// Pass the cursor into [`team_folder_list_continue()`](crate::team::team_folder_list_continue)
25764    /// to obtain additional team folders.
25765    pub cursor: String,
25766    /// Is true if there are additional team folders that have not been returned yet. An additional
25767    /// call to [`team_folder_list_continue()`](crate::team::team_folder_list_continue) can retrieve
25768    /// them.
25769    pub has_more: bool,
25770}
25771
25772impl TeamFolderListResult {
25773    pub fn new(team_folders: Vec<TeamFolderMetadata>, cursor: String, has_more: bool) -> Self {
25774        TeamFolderListResult {
25775            team_folders,
25776            cursor,
25777            has_more,
25778        }
25779    }
25780}
25781
25782const TEAM_FOLDER_LIST_RESULT_FIELDS: &[&str] = &["team_folders",
25783                                                  "cursor",
25784                                                  "has_more"];
25785impl TeamFolderListResult {
25786    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
25787        map: V,
25788    ) -> Result<TeamFolderListResult, V::Error> {
25789        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
25790    }
25791
25792    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
25793        mut map: V,
25794        optional: bool,
25795    ) -> Result<Option<TeamFolderListResult>, V::Error> {
25796        let mut field_team_folders = None;
25797        let mut field_cursor = None;
25798        let mut field_has_more = None;
25799        let mut nothing = true;
25800        while let Some(key) = map.next_key::<&str>()? {
25801            nothing = false;
25802            match key {
25803                "team_folders" => {
25804                    if field_team_folders.is_some() {
25805                        return Err(::serde::de::Error::duplicate_field("team_folders"));
25806                    }
25807                    field_team_folders = Some(map.next_value()?);
25808                }
25809                "cursor" => {
25810                    if field_cursor.is_some() {
25811                        return Err(::serde::de::Error::duplicate_field("cursor"));
25812                    }
25813                    field_cursor = Some(map.next_value()?);
25814                }
25815                "has_more" => {
25816                    if field_has_more.is_some() {
25817                        return Err(::serde::de::Error::duplicate_field("has_more"));
25818                    }
25819                    field_has_more = Some(map.next_value()?);
25820                }
25821                _ => {
25822                    // unknown field allowed and ignored
25823                    map.next_value::<::serde_json::Value>()?;
25824                }
25825            }
25826        }
25827        if optional && nothing {
25828            return Ok(None);
25829        }
25830        let result = TeamFolderListResult {
25831            team_folders: field_team_folders.ok_or_else(|| ::serde::de::Error::missing_field("team_folders"))?,
25832            cursor: field_cursor.ok_or_else(|| ::serde::de::Error::missing_field("cursor"))?,
25833            has_more: field_has_more.ok_or_else(|| ::serde::de::Error::missing_field("has_more"))?,
25834        };
25835        Ok(Some(result))
25836    }
25837
25838    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
25839        &self,
25840        s: &mut S::SerializeStruct,
25841    ) -> Result<(), S::Error> {
25842        use serde::ser::SerializeStruct;
25843        s.serialize_field("team_folders", &self.team_folders)?;
25844        s.serialize_field("cursor", &self.cursor)?;
25845        s.serialize_field("has_more", &self.has_more)?;
25846        Ok(())
25847    }
25848}
25849
25850impl<'de> ::serde::de::Deserialize<'de> for TeamFolderListResult {
25851    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
25852        // struct deserializer
25853        use serde::de::{MapAccess, Visitor};
25854        struct StructVisitor;
25855        impl<'de> Visitor<'de> for StructVisitor {
25856            type Value = TeamFolderListResult;
25857            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
25858                f.write_str("a TeamFolderListResult struct")
25859            }
25860            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
25861                TeamFolderListResult::internal_deserialize(map)
25862            }
25863        }
25864        deserializer.deserialize_struct("TeamFolderListResult", TEAM_FOLDER_LIST_RESULT_FIELDS, StructVisitor)
25865    }
25866}
25867
25868impl ::serde::ser::Serialize for TeamFolderListResult {
25869    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
25870        // struct serializer
25871        use serde::ser::SerializeStruct;
25872        let mut s = serializer.serialize_struct("TeamFolderListResult", 3)?;
25873        self.internal_serialize::<S>(&mut s)?;
25874        s.end()
25875    }
25876}
25877
25878/// Properties of a team folder.
25879#[derive(Debug, Clone, PartialEq, Eq)]
25880#[non_exhaustive] // structs may have more fields added in the future.
25881pub struct TeamFolderMetadata {
25882    /// The ID of the team folder.
25883    pub team_folder_id: crate::types::common::SharedFolderId,
25884    /// The name of the team folder.
25885    pub name: String,
25886    /// The status of the team folder.
25887    pub status: TeamFolderStatus,
25888    /// True if this team folder is a shared team root.
25889    pub is_team_shared_dropbox: bool,
25890    /// The sync setting applied to this team folder.
25891    pub sync_setting: crate::types::files::SyncSetting,
25892    /// Sync settings applied to contents of this team folder.
25893    pub content_sync_settings: Vec<crate::types::files::ContentSyncSetting>,
25894}
25895
25896impl TeamFolderMetadata {
25897    pub fn new(
25898        team_folder_id: crate::types::common::SharedFolderId,
25899        name: String,
25900        status: TeamFolderStatus,
25901        is_team_shared_dropbox: bool,
25902        sync_setting: crate::types::files::SyncSetting,
25903        content_sync_settings: Vec<crate::types::files::ContentSyncSetting>,
25904    ) -> Self {
25905        TeamFolderMetadata {
25906            team_folder_id,
25907            name,
25908            status,
25909            is_team_shared_dropbox,
25910            sync_setting,
25911            content_sync_settings,
25912        }
25913    }
25914}
25915
25916const TEAM_FOLDER_METADATA_FIELDS: &[&str] = &["team_folder_id",
25917                                               "name",
25918                                               "status",
25919                                               "is_team_shared_dropbox",
25920                                               "sync_setting",
25921                                               "content_sync_settings"];
25922impl TeamFolderMetadata {
25923    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
25924        map: V,
25925    ) -> Result<TeamFolderMetadata, V::Error> {
25926        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
25927    }
25928
25929    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
25930        mut map: V,
25931        optional: bool,
25932    ) -> Result<Option<TeamFolderMetadata>, V::Error> {
25933        let mut field_team_folder_id = None;
25934        let mut field_name = None;
25935        let mut field_status = None;
25936        let mut field_is_team_shared_dropbox = None;
25937        let mut field_sync_setting = None;
25938        let mut field_content_sync_settings = None;
25939        let mut nothing = true;
25940        while let Some(key) = map.next_key::<&str>()? {
25941            nothing = false;
25942            match key {
25943                "team_folder_id" => {
25944                    if field_team_folder_id.is_some() {
25945                        return Err(::serde::de::Error::duplicate_field("team_folder_id"));
25946                    }
25947                    field_team_folder_id = Some(map.next_value()?);
25948                }
25949                "name" => {
25950                    if field_name.is_some() {
25951                        return Err(::serde::de::Error::duplicate_field("name"));
25952                    }
25953                    field_name = Some(map.next_value()?);
25954                }
25955                "status" => {
25956                    if field_status.is_some() {
25957                        return Err(::serde::de::Error::duplicate_field("status"));
25958                    }
25959                    field_status = Some(map.next_value()?);
25960                }
25961                "is_team_shared_dropbox" => {
25962                    if field_is_team_shared_dropbox.is_some() {
25963                        return Err(::serde::de::Error::duplicate_field("is_team_shared_dropbox"));
25964                    }
25965                    field_is_team_shared_dropbox = Some(map.next_value()?);
25966                }
25967                "sync_setting" => {
25968                    if field_sync_setting.is_some() {
25969                        return Err(::serde::de::Error::duplicate_field("sync_setting"));
25970                    }
25971                    field_sync_setting = Some(map.next_value()?);
25972                }
25973                "content_sync_settings" => {
25974                    if field_content_sync_settings.is_some() {
25975                        return Err(::serde::de::Error::duplicate_field("content_sync_settings"));
25976                    }
25977                    field_content_sync_settings = Some(map.next_value()?);
25978                }
25979                _ => {
25980                    // unknown field allowed and ignored
25981                    map.next_value::<::serde_json::Value>()?;
25982                }
25983            }
25984        }
25985        if optional && nothing {
25986            return Ok(None);
25987        }
25988        let result = TeamFolderMetadata {
25989            team_folder_id: field_team_folder_id.ok_or_else(|| ::serde::de::Error::missing_field("team_folder_id"))?,
25990            name: field_name.ok_or_else(|| ::serde::de::Error::missing_field("name"))?,
25991            status: field_status.ok_or_else(|| ::serde::de::Error::missing_field("status"))?,
25992            is_team_shared_dropbox: field_is_team_shared_dropbox.ok_or_else(|| ::serde::de::Error::missing_field("is_team_shared_dropbox"))?,
25993            sync_setting: field_sync_setting.ok_or_else(|| ::serde::de::Error::missing_field("sync_setting"))?,
25994            content_sync_settings: field_content_sync_settings.ok_or_else(|| ::serde::de::Error::missing_field("content_sync_settings"))?,
25995        };
25996        Ok(Some(result))
25997    }
25998
25999    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
26000        &self,
26001        s: &mut S::SerializeStruct,
26002    ) -> Result<(), S::Error> {
26003        use serde::ser::SerializeStruct;
26004        s.serialize_field("team_folder_id", &self.team_folder_id)?;
26005        s.serialize_field("name", &self.name)?;
26006        s.serialize_field("status", &self.status)?;
26007        s.serialize_field("is_team_shared_dropbox", &self.is_team_shared_dropbox)?;
26008        s.serialize_field("sync_setting", &self.sync_setting)?;
26009        s.serialize_field("content_sync_settings", &self.content_sync_settings)?;
26010        Ok(())
26011    }
26012}
26013
26014impl<'de> ::serde::de::Deserialize<'de> for TeamFolderMetadata {
26015    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
26016        // struct deserializer
26017        use serde::de::{MapAccess, Visitor};
26018        struct StructVisitor;
26019        impl<'de> Visitor<'de> for StructVisitor {
26020            type Value = TeamFolderMetadata;
26021            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
26022                f.write_str("a TeamFolderMetadata struct")
26023            }
26024            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
26025                TeamFolderMetadata::internal_deserialize(map)
26026            }
26027        }
26028        deserializer.deserialize_struct("TeamFolderMetadata", TEAM_FOLDER_METADATA_FIELDS, StructVisitor)
26029    }
26030}
26031
26032impl ::serde::ser::Serialize for TeamFolderMetadata {
26033    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
26034        // struct serializer
26035        use serde::ser::SerializeStruct;
26036        let mut s = serializer.serialize_struct("TeamFolderMetadata", 6)?;
26037        self.internal_serialize::<S>(&mut s)?;
26038        s.end()
26039    }
26040}
26041
26042
26043#[derive(Debug, Clone, PartialEq, Eq)]
26044#[non_exhaustive] // variants may be added in the future
26045pub enum TeamFolderPermanentlyDeleteError {
26046    AccessError(TeamFolderAccessError),
26047    StatusError(TeamFolderInvalidStatusError),
26048    TeamSharedDropboxError(TeamFolderTeamSharedDropboxError),
26049    /// Catch-all used for unrecognized values returned from the server. Encountering this value
26050    /// typically indicates that this SDK version is out of date.
26051    Other,
26052}
26053
26054impl<'de> ::serde::de::Deserialize<'de> for TeamFolderPermanentlyDeleteError {
26055    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
26056        // union deserializer
26057        use serde::de::{self, MapAccess, Visitor};
26058        struct EnumVisitor;
26059        impl<'de> Visitor<'de> for EnumVisitor {
26060            type Value = TeamFolderPermanentlyDeleteError;
26061            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
26062                f.write_str("a TeamFolderPermanentlyDeleteError structure")
26063            }
26064            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
26065                let tag: &str = match map.next_key()? {
26066                    Some(".tag") => map.next_value()?,
26067                    _ => return Err(de::Error::missing_field(".tag"))
26068                };
26069                let value = match tag {
26070                    "access_error" => {
26071                        match map.next_key()? {
26072                            Some("access_error") => TeamFolderPermanentlyDeleteError::AccessError(map.next_value()?),
26073                            None => return Err(de::Error::missing_field("access_error")),
26074                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
26075                        }
26076                    }
26077                    "status_error" => {
26078                        match map.next_key()? {
26079                            Some("status_error") => TeamFolderPermanentlyDeleteError::StatusError(map.next_value()?),
26080                            None => return Err(de::Error::missing_field("status_error")),
26081                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
26082                        }
26083                    }
26084                    "team_shared_dropbox_error" => {
26085                        match map.next_key()? {
26086                            Some("team_shared_dropbox_error") => TeamFolderPermanentlyDeleteError::TeamSharedDropboxError(map.next_value()?),
26087                            None => return Err(de::Error::missing_field("team_shared_dropbox_error")),
26088                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
26089                        }
26090                    }
26091                    _ => TeamFolderPermanentlyDeleteError::Other,
26092                };
26093                crate::eat_json_fields(&mut map)?;
26094                Ok(value)
26095            }
26096        }
26097        const VARIANTS: &[&str] = &["access_error",
26098                                    "status_error",
26099                                    "team_shared_dropbox_error",
26100                                    "other"];
26101        deserializer.deserialize_struct("TeamFolderPermanentlyDeleteError", VARIANTS, EnumVisitor)
26102    }
26103}
26104
26105impl ::serde::ser::Serialize for TeamFolderPermanentlyDeleteError {
26106    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
26107        // union serializer
26108        use serde::ser::SerializeStruct;
26109        match self {
26110            TeamFolderPermanentlyDeleteError::AccessError(x) => {
26111                // union or polymporphic struct
26112                let mut s = serializer.serialize_struct("TeamFolderPermanentlyDeleteError", 2)?;
26113                s.serialize_field(".tag", "access_error")?;
26114                s.serialize_field("access_error", x)?;
26115                s.end()
26116            }
26117            TeamFolderPermanentlyDeleteError::StatusError(x) => {
26118                // union or polymporphic struct
26119                let mut s = serializer.serialize_struct("TeamFolderPermanentlyDeleteError", 2)?;
26120                s.serialize_field(".tag", "status_error")?;
26121                s.serialize_field("status_error", x)?;
26122                s.end()
26123            }
26124            TeamFolderPermanentlyDeleteError::TeamSharedDropboxError(x) => {
26125                // union or polymporphic struct
26126                let mut s = serializer.serialize_struct("TeamFolderPermanentlyDeleteError", 2)?;
26127                s.serialize_field(".tag", "team_shared_dropbox_error")?;
26128                s.serialize_field("team_shared_dropbox_error", x)?;
26129                s.end()
26130            }
26131            TeamFolderPermanentlyDeleteError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
26132        }
26133    }
26134}
26135
26136impl ::std::error::Error for TeamFolderPermanentlyDeleteError {
26137    fn source(&self) -> Option<&(dyn ::std::error::Error + 'static)> {
26138        match self {
26139            TeamFolderPermanentlyDeleteError::AccessError(inner) => Some(inner),
26140            TeamFolderPermanentlyDeleteError::StatusError(inner) => Some(inner),
26141            TeamFolderPermanentlyDeleteError::TeamSharedDropboxError(inner) => Some(inner),
26142            _ => None,
26143        }
26144    }
26145}
26146
26147impl ::std::fmt::Display for TeamFolderPermanentlyDeleteError {
26148    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
26149        match self {
26150            TeamFolderPermanentlyDeleteError::AccessError(inner) => write!(f, "TeamFolderPermanentlyDeleteError: {}", inner),
26151            TeamFolderPermanentlyDeleteError::StatusError(inner) => write!(f, "TeamFolderPermanentlyDeleteError: {}", inner),
26152            TeamFolderPermanentlyDeleteError::TeamSharedDropboxError(inner) => write!(f, "TeamFolderPermanentlyDeleteError: {}", inner),
26153            _ => write!(f, "{:?}", *self),
26154        }
26155    }
26156}
26157
26158// union extends BaseTeamFolderError
26159impl From<BaseTeamFolderError> for TeamFolderPermanentlyDeleteError {
26160    fn from(parent: BaseTeamFolderError) -> Self {
26161        match parent {
26162            BaseTeamFolderError::AccessError(x) => TeamFolderPermanentlyDeleteError::AccessError(x),
26163            BaseTeamFolderError::StatusError(x) => TeamFolderPermanentlyDeleteError::StatusError(x),
26164            BaseTeamFolderError::TeamSharedDropboxError(x) => TeamFolderPermanentlyDeleteError::TeamSharedDropboxError(x),
26165            BaseTeamFolderError::Other => TeamFolderPermanentlyDeleteError::Other,
26166        }
26167    }
26168}
26169#[derive(Debug, Clone, PartialEq, Eq)]
26170#[non_exhaustive] // structs may have more fields added in the future.
26171pub struct TeamFolderRenameArg {
26172    /// The ID of the team folder.
26173    pub team_folder_id: crate::types::common::SharedFolderId,
26174    /// New team folder name.
26175    pub name: String,
26176}
26177
26178impl TeamFolderRenameArg {
26179    pub fn new(team_folder_id: crate::types::common::SharedFolderId, name: String) -> Self {
26180        TeamFolderRenameArg {
26181            team_folder_id,
26182            name,
26183        }
26184    }
26185}
26186
26187const TEAM_FOLDER_RENAME_ARG_FIELDS: &[&str] = &["team_folder_id",
26188                                                 "name"];
26189impl TeamFolderRenameArg {
26190    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
26191        map: V,
26192    ) -> Result<TeamFolderRenameArg, V::Error> {
26193        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
26194    }
26195
26196    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
26197        mut map: V,
26198        optional: bool,
26199    ) -> Result<Option<TeamFolderRenameArg>, V::Error> {
26200        let mut field_team_folder_id = None;
26201        let mut field_name = None;
26202        let mut nothing = true;
26203        while let Some(key) = map.next_key::<&str>()? {
26204            nothing = false;
26205            match key {
26206                "team_folder_id" => {
26207                    if field_team_folder_id.is_some() {
26208                        return Err(::serde::de::Error::duplicate_field("team_folder_id"));
26209                    }
26210                    field_team_folder_id = Some(map.next_value()?);
26211                }
26212                "name" => {
26213                    if field_name.is_some() {
26214                        return Err(::serde::de::Error::duplicate_field("name"));
26215                    }
26216                    field_name = Some(map.next_value()?);
26217                }
26218                _ => {
26219                    // unknown field allowed and ignored
26220                    map.next_value::<::serde_json::Value>()?;
26221                }
26222            }
26223        }
26224        if optional && nothing {
26225            return Ok(None);
26226        }
26227        let result = TeamFolderRenameArg {
26228            team_folder_id: field_team_folder_id.ok_or_else(|| ::serde::de::Error::missing_field("team_folder_id"))?,
26229            name: field_name.ok_or_else(|| ::serde::de::Error::missing_field("name"))?,
26230        };
26231        Ok(Some(result))
26232    }
26233
26234    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
26235        &self,
26236        s: &mut S::SerializeStruct,
26237    ) -> Result<(), S::Error> {
26238        use serde::ser::SerializeStruct;
26239        s.serialize_field("team_folder_id", &self.team_folder_id)?;
26240        s.serialize_field("name", &self.name)?;
26241        Ok(())
26242    }
26243}
26244
26245impl<'de> ::serde::de::Deserialize<'de> for TeamFolderRenameArg {
26246    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
26247        // struct deserializer
26248        use serde::de::{MapAccess, Visitor};
26249        struct StructVisitor;
26250        impl<'de> Visitor<'de> for StructVisitor {
26251            type Value = TeamFolderRenameArg;
26252            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
26253                f.write_str("a TeamFolderRenameArg struct")
26254            }
26255            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
26256                TeamFolderRenameArg::internal_deserialize(map)
26257            }
26258        }
26259        deserializer.deserialize_struct("TeamFolderRenameArg", TEAM_FOLDER_RENAME_ARG_FIELDS, StructVisitor)
26260    }
26261}
26262
26263impl ::serde::ser::Serialize for TeamFolderRenameArg {
26264    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
26265        // struct serializer
26266        use serde::ser::SerializeStruct;
26267        let mut s = serializer.serialize_struct("TeamFolderRenameArg", 2)?;
26268        self.internal_serialize::<S>(&mut s)?;
26269        s.end()
26270    }
26271}
26272
26273// struct extends TeamFolderIdArg
26274impl From<TeamFolderRenameArg> for TeamFolderIdArg {
26275    fn from(subtype: TeamFolderRenameArg) -> Self {
26276        Self {
26277            team_folder_id: subtype.team_folder_id,
26278        }
26279    }
26280}
26281#[derive(Debug, Clone, PartialEq, Eq)]
26282#[non_exhaustive] // variants may be added in the future
26283pub enum TeamFolderRenameError {
26284    AccessError(TeamFolderAccessError),
26285    StatusError(TeamFolderInvalidStatusError),
26286    TeamSharedDropboxError(TeamFolderTeamSharedDropboxError),
26287    /// The provided folder name cannot be used.
26288    InvalidFolderName,
26289    /// There is already a team folder with the same name.
26290    FolderNameAlreadyUsed,
26291    /// The provided name cannot be used because it is reserved.
26292    FolderNameReserved,
26293    /// Catch-all used for unrecognized values returned from the server. Encountering this value
26294    /// typically indicates that this SDK version is out of date.
26295    Other,
26296}
26297
26298impl<'de> ::serde::de::Deserialize<'de> for TeamFolderRenameError {
26299    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
26300        // union deserializer
26301        use serde::de::{self, MapAccess, Visitor};
26302        struct EnumVisitor;
26303        impl<'de> Visitor<'de> for EnumVisitor {
26304            type Value = TeamFolderRenameError;
26305            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
26306                f.write_str("a TeamFolderRenameError structure")
26307            }
26308            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
26309                let tag: &str = match map.next_key()? {
26310                    Some(".tag") => map.next_value()?,
26311                    _ => return Err(de::Error::missing_field(".tag"))
26312                };
26313                let value = match tag {
26314                    "access_error" => {
26315                        match map.next_key()? {
26316                            Some("access_error") => TeamFolderRenameError::AccessError(map.next_value()?),
26317                            None => return Err(de::Error::missing_field("access_error")),
26318                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
26319                        }
26320                    }
26321                    "status_error" => {
26322                        match map.next_key()? {
26323                            Some("status_error") => TeamFolderRenameError::StatusError(map.next_value()?),
26324                            None => return Err(de::Error::missing_field("status_error")),
26325                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
26326                        }
26327                    }
26328                    "team_shared_dropbox_error" => {
26329                        match map.next_key()? {
26330                            Some("team_shared_dropbox_error") => TeamFolderRenameError::TeamSharedDropboxError(map.next_value()?),
26331                            None => return Err(de::Error::missing_field("team_shared_dropbox_error")),
26332                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
26333                        }
26334                    }
26335                    "invalid_folder_name" => TeamFolderRenameError::InvalidFolderName,
26336                    "folder_name_already_used" => TeamFolderRenameError::FolderNameAlreadyUsed,
26337                    "folder_name_reserved" => TeamFolderRenameError::FolderNameReserved,
26338                    _ => TeamFolderRenameError::Other,
26339                };
26340                crate::eat_json_fields(&mut map)?;
26341                Ok(value)
26342            }
26343        }
26344        const VARIANTS: &[&str] = &["access_error",
26345                                    "status_error",
26346                                    "team_shared_dropbox_error",
26347                                    "other",
26348                                    "invalid_folder_name",
26349                                    "folder_name_already_used",
26350                                    "folder_name_reserved"];
26351        deserializer.deserialize_struct("TeamFolderRenameError", VARIANTS, EnumVisitor)
26352    }
26353}
26354
26355impl ::serde::ser::Serialize for TeamFolderRenameError {
26356    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
26357        // union serializer
26358        use serde::ser::SerializeStruct;
26359        match self {
26360            TeamFolderRenameError::AccessError(x) => {
26361                // union or polymporphic struct
26362                let mut s = serializer.serialize_struct("TeamFolderRenameError", 2)?;
26363                s.serialize_field(".tag", "access_error")?;
26364                s.serialize_field("access_error", x)?;
26365                s.end()
26366            }
26367            TeamFolderRenameError::StatusError(x) => {
26368                // union or polymporphic struct
26369                let mut s = serializer.serialize_struct("TeamFolderRenameError", 2)?;
26370                s.serialize_field(".tag", "status_error")?;
26371                s.serialize_field("status_error", x)?;
26372                s.end()
26373            }
26374            TeamFolderRenameError::TeamSharedDropboxError(x) => {
26375                // union or polymporphic struct
26376                let mut s = serializer.serialize_struct("TeamFolderRenameError", 2)?;
26377                s.serialize_field(".tag", "team_shared_dropbox_error")?;
26378                s.serialize_field("team_shared_dropbox_error", x)?;
26379                s.end()
26380            }
26381            TeamFolderRenameError::InvalidFolderName => {
26382                // unit
26383                let mut s = serializer.serialize_struct("TeamFolderRenameError", 1)?;
26384                s.serialize_field(".tag", "invalid_folder_name")?;
26385                s.end()
26386            }
26387            TeamFolderRenameError::FolderNameAlreadyUsed => {
26388                // unit
26389                let mut s = serializer.serialize_struct("TeamFolderRenameError", 1)?;
26390                s.serialize_field(".tag", "folder_name_already_used")?;
26391                s.end()
26392            }
26393            TeamFolderRenameError::FolderNameReserved => {
26394                // unit
26395                let mut s = serializer.serialize_struct("TeamFolderRenameError", 1)?;
26396                s.serialize_field(".tag", "folder_name_reserved")?;
26397                s.end()
26398            }
26399            TeamFolderRenameError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
26400        }
26401    }
26402}
26403
26404impl ::std::error::Error for TeamFolderRenameError {
26405    fn source(&self) -> Option<&(dyn ::std::error::Error + 'static)> {
26406        match self {
26407            TeamFolderRenameError::AccessError(inner) => Some(inner),
26408            TeamFolderRenameError::StatusError(inner) => Some(inner),
26409            TeamFolderRenameError::TeamSharedDropboxError(inner) => Some(inner),
26410            _ => None,
26411        }
26412    }
26413}
26414
26415impl ::std::fmt::Display for TeamFolderRenameError {
26416    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
26417        match self {
26418            TeamFolderRenameError::AccessError(inner) => write!(f, "TeamFolderRenameError: {}", inner),
26419            TeamFolderRenameError::StatusError(inner) => write!(f, "TeamFolderRenameError: {}", inner),
26420            TeamFolderRenameError::TeamSharedDropboxError(inner) => write!(f, "TeamFolderRenameError: {}", inner),
26421            TeamFolderRenameError::InvalidFolderName => f.write_str("The provided folder name cannot be used."),
26422            TeamFolderRenameError::FolderNameAlreadyUsed => f.write_str("There is already a team folder with the same name."),
26423            TeamFolderRenameError::FolderNameReserved => f.write_str("The provided name cannot be used because it is reserved."),
26424            _ => write!(f, "{:?}", *self),
26425        }
26426    }
26427}
26428
26429// union extends BaseTeamFolderError
26430impl From<BaseTeamFolderError> for TeamFolderRenameError {
26431    fn from(parent: BaseTeamFolderError) -> Self {
26432        match parent {
26433            BaseTeamFolderError::AccessError(x) => TeamFolderRenameError::AccessError(x),
26434            BaseTeamFolderError::StatusError(x) => TeamFolderRenameError::StatusError(x),
26435            BaseTeamFolderError::TeamSharedDropboxError(x) => TeamFolderRenameError::TeamSharedDropboxError(x),
26436            BaseTeamFolderError::Other => TeamFolderRenameError::Other,
26437        }
26438    }
26439}
26440#[derive(Debug, Clone, PartialEq, Eq)]
26441#[non_exhaustive] // variants may be added in the future
26442pub enum TeamFolderStatus {
26443    /// The team folder and sub-folders are available to all members.
26444    Active,
26445    /// The team folder is not accessible outside of the team folder manager.
26446    Archived,
26447    /// The team folder is not accessible outside of the team folder manager.
26448    ArchiveInProgress,
26449    /// Catch-all used for unrecognized values returned from the server. Encountering this value
26450    /// typically indicates that this SDK version is out of date.
26451    Other,
26452}
26453
26454impl<'de> ::serde::de::Deserialize<'de> for TeamFolderStatus {
26455    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
26456        // union deserializer
26457        use serde::de::{self, MapAccess, Visitor};
26458        struct EnumVisitor;
26459        impl<'de> Visitor<'de> for EnumVisitor {
26460            type Value = TeamFolderStatus;
26461            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
26462                f.write_str("a TeamFolderStatus structure")
26463            }
26464            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
26465                let tag: &str = match map.next_key()? {
26466                    Some(".tag") => map.next_value()?,
26467                    _ => return Err(de::Error::missing_field(".tag"))
26468                };
26469                let value = match tag {
26470                    "active" => TeamFolderStatus::Active,
26471                    "archived" => TeamFolderStatus::Archived,
26472                    "archive_in_progress" => TeamFolderStatus::ArchiveInProgress,
26473                    _ => TeamFolderStatus::Other,
26474                };
26475                crate::eat_json_fields(&mut map)?;
26476                Ok(value)
26477            }
26478        }
26479        const VARIANTS: &[&str] = &["active",
26480                                    "archived",
26481                                    "archive_in_progress",
26482                                    "other"];
26483        deserializer.deserialize_struct("TeamFolderStatus", VARIANTS, EnumVisitor)
26484    }
26485}
26486
26487impl ::serde::ser::Serialize for TeamFolderStatus {
26488    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
26489        // union serializer
26490        use serde::ser::SerializeStruct;
26491        match self {
26492            TeamFolderStatus::Active => {
26493                // unit
26494                let mut s = serializer.serialize_struct("TeamFolderStatus", 1)?;
26495                s.serialize_field(".tag", "active")?;
26496                s.end()
26497            }
26498            TeamFolderStatus::Archived => {
26499                // unit
26500                let mut s = serializer.serialize_struct("TeamFolderStatus", 1)?;
26501                s.serialize_field(".tag", "archived")?;
26502                s.end()
26503            }
26504            TeamFolderStatus::ArchiveInProgress => {
26505                // unit
26506                let mut s = serializer.serialize_struct("TeamFolderStatus", 1)?;
26507                s.serialize_field(".tag", "archive_in_progress")?;
26508                s.end()
26509            }
26510            TeamFolderStatus::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
26511        }
26512    }
26513}
26514
26515#[derive(Debug, Clone, PartialEq, Eq)]
26516#[non_exhaustive] // variants may be added in the future
26517pub enum TeamFolderTeamSharedDropboxError {
26518    /// This action is not allowed for a shared team root.
26519    Disallowed,
26520    /// Catch-all used for unrecognized values returned from the server. Encountering this value
26521    /// typically indicates that this SDK version is out of date.
26522    Other,
26523}
26524
26525impl<'de> ::serde::de::Deserialize<'de> for TeamFolderTeamSharedDropboxError {
26526    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
26527        // union deserializer
26528        use serde::de::{self, MapAccess, Visitor};
26529        struct EnumVisitor;
26530        impl<'de> Visitor<'de> for EnumVisitor {
26531            type Value = TeamFolderTeamSharedDropboxError;
26532            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
26533                f.write_str("a TeamFolderTeamSharedDropboxError structure")
26534            }
26535            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
26536                let tag: &str = match map.next_key()? {
26537                    Some(".tag") => map.next_value()?,
26538                    _ => return Err(de::Error::missing_field(".tag"))
26539                };
26540                let value = match tag {
26541                    "disallowed" => TeamFolderTeamSharedDropboxError::Disallowed,
26542                    _ => TeamFolderTeamSharedDropboxError::Other,
26543                };
26544                crate::eat_json_fields(&mut map)?;
26545                Ok(value)
26546            }
26547        }
26548        const VARIANTS: &[&str] = &["disallowed",
26549                                    "other"];
26550        deserializer.deserialize_struct("TeamFolderTeamSharedDropboxError", VARIANTS, EnumVisitor)
26551    }
26552}
26553
26554impl ::serde::ser::Serialize for TeamFolderTeamSharedDropboxError {
26555    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
26556        // union serializer
26557        use serde::ser::SerializeStruct;
26558        match self {
26559            TeamFolderTeamSharedDropboxError::Disallowed => {
26560                // unit
26561                let mut s = serializer.serialize_struct("TeamFolderTeamSharedDropboxError", 1)?;
26562                s.serialize_field(".tag", "disallowed")?;
26563                s.end()
26564            }
26565            TeamFolderTeamSharedDropboxError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
26566        }
26567    }
26568}
26569
26570impl ::std::error::Error for TeamFolderTeamSharedDropboxError {
26571}
26572
26573impl ::std::fmt::Display for TeamFolderTeamSharedDropboxError {
26574    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
26575        match self {
26576            TeamFolderTeamSharedDropboxError::Disallowed => f.write_str("This action is not allowed for a shared team root."),
26577            _ => write!(f, "{:?}", *self),
26578        }
26579    }
26580}
26581
26582#[derive(Debug, Clone, PartialEq, Eq)]
26583#[non_exhaustive] // structs may have more fields added in the future.
26584pub struct TeamFolderUpdateSyncSettingsArg {
26585    /// The ID of the team folder.
26586    pub team_folder_id: crate::types::common::SharedFolderId,
26587    /// Sync setting to apply to the team folder itself. Only meaningful if the team folder is not a
26588    /// shared team root.
26589    pub sync_setting: Option<crate::types::files::SyncSettingArg>,
26590    /// Sync settings to apply to contents of this team folder.
26591    pub content_sync_settings: Option<Vec<crate::types::files::ContentSyncSettingArg>>,
26592}
26593
26594impl TeamFolderUpdateSyncSettingsArg {
26595    pub fn new(team_folder_id: crate::types::common::SharedFolderId) -> Self {
26596        TeamFolderUpdateSyncSettingsArg {
26597            team_folder_id,
26598            sync_setting: None,
26599            content_sync_settings: None,
26600        }
26601    }
26602
26603    pub fn with_sync_setting(mut self, value: crate::types::files::SyncSettingArg) -> Self {
26604        self.sync_setting = Some(value);
26605        self
26606    }
26607
26608    pub fn with_content_sync_settings(
26609        mut self,
26610        value: Vec<crate::types::files::ContentSyncSettingArg>,
26611    ) -> Self {
26612        self.content_sync_settings = Some(value);
26613        self
26614    }
26615}
26616
26617const TEAM_FOLDER_UPDATE_SYNC_SETTINGS_ARG_FIELDS: &[&str] = &["team_folder_id",
26618                                                               "sync_setting",
26619                                                               "content_sync_settings"];
26620impl TeamFolderUpdateSyncSettingsArg {
26621    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
26622        map: V,
26623    ) -> Result<TeamFolderUpdateSyncSettingsArg, V::Error> {
26624        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
26625    }
26626
26627    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
26628        mut map: V,
26629        optional: bool,
26630    ) -> Result<Option<TeamFolderUpdateSyncSettingsArg>, V::Error> {
26631        let mut field_team_folder_id = None;
26632        let mut field_sync_setting = None;
26633        let mut field_content_sync_settings = None;
26634        let mut nothing = true;
26635        while let Some(key) = map.next_key::<&str>()? {
26636            nothing = false;
26637            match key {
26638                "team_folder_id" => {
26639                    if field_team_folder_id.is_some() {
26640                        return Err(::serde::de::Error::duplicate_field("team_folder_id"));
26641                    }
26642                    field_team_folder_id = Some(map.next_value()?);
26643                }
26644                "sync_setting" => {
26645                    if field_sync_setting.is_some() {
26646                        return Err(::serde::de::Error::duplicate_field("sync_setting"));
26647                    }
26648                    field_sync_setting = Some(map.next_value()?);
26649                }
26650                "content_sync_settings" => {
26651                    if field_content_sync_settings.is_some() {
26652                        return Err(::serde::de::Error::duplicate_field("content_sync_settings"));
26653                    }
26654                    field_content_sync_settings = Some(map.next_value()?);
26655                }
26656                _ => {
26657                    // unknown field allowed and ignored
26658                    map.next_value::<::serde_json::Value>()?;
26659                }
26660            }
26661        }
26662        if optional && nothing {
26663            return Ok(None);
26664        }
26665        let result = TeamFolderUpdateSyncSettingsArg {
26666            team_folder_id: field_team_folder_id.ok_or_else(|| ::serde::de::Error::missing_field("team_folder_id"))?,
26667            sync_setting: field_sync_setting.and_then(Option::flatten),
26668            content_sync_settings: field_content_sync_settings.and_then(Option::flatten),
26669        };
26670        Ok(Some(result))
26671    }
26672
26673    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
26674        &self,
26675        s: &mut S::SerializeStruct,
26676    ) -> Result<(), S::Error> {
26677        use serde::ser::SerializeStruct;
26678        s.serialize_field("team_folder_id", &self.team_folder_id)?;
26679        if let Some(val) = &self.sync_setting {
26680            s.serialize_field("sync_setting", val)?;
26681        }
26682        if let Some(val) = &self.content_sync_settings {
26683            s.serialize_field("content_sync_settings", val)?;
26684        }
26685        Ok(())
26686    }
26687}
26688
26689impl<'de> ::serde::de::Deserialize<'de> for TeamFolderUpdateSyncSettingsArg {
26690    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
26691        // struct deserializer
26692        use serde::de::{MapAccess, Visitor};
26693        struct StructVisitor;
26694        impl<'de> Visitor<'de> for StructVisitor {
26695            type Value = TeamFolderUpdateSyncSettingsArg;
26696            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
26697                f.write_str("a TeamFolderUpdateSyncSettingsArg struct")
26698            }
26699            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
26700                TeamFolderUpdateSyncSettingsArg::internal_deserialize(map)
26701            }
26702        }
26703        deserializer.deserialize_struct("TeamFolderUpdateSyncSettingsArg", TEAM_FOLDER_UPDATE_SYNC_SETTINGS_ARG_FIELDS, StructVisitor)
26704    }
26705}
26706
26707impl ::serde::ser::Serialize for TeamFolderUpdateSyncSettingsArg {
26708    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
26709        // struct serializer
26710        use serde::ser::SerializeStruct;
26711        let mut s = serializer.serialize_struct("TeamFolderUpdateSyncSettingsArg", 3)?;
26712        self.internal_serialize::<S>(&mut s)?;
26713        s.end()
26714    }
26715}
26716
26717// struct extends TeamFolderIdArg
26718impl From<TeamFolderUpdateSyncSettingsArg> for TeamFolderIdArg {
26719    fn from(subtype: TeamFolderUpdateSyncSettingsArg) -> Self {
26720        Self {
26721            team_folder_id: subtype.team_folder_id,
26722        }
26723    }
26724}
26725#[derive(Debug, Clone, PartialEq, Eq)]
26726#[non_exhaustive] // variants may be added in the future
26727pub enum TeamFolderUpdateSyncSettingsError {
26728    AccessError(TeamFolderAccessError),
26729    StatusError(TeamFolderInvalidStatusError),
26730    TeamSharedDropboxError(TeamFolderTeamSharedDropboxError),
26731    /// An error occurred setting the sync settings.
26732    SyncSettingsError(crate::types::files::SyncSettingsError),
26733    /// Catch-all used for unrecognized values returned from the server. Encountering this value
26734    /// typically indicates that this SDK version is out of date.
26735    Other,
26736}
26737
26738impl<'de> ::serde::de::Deserialize<'de> for TeamFolderUpdateSyncSettingsError {
26739    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
26740        // union deserializer
26741        use serde::de::{self, MapAccess, Visitor};
26742        struct EnumVisitor;
26743        impl<'de> Visitor<'de> for EnumVisitor {
26744            type Value = TeamFolderUpdateSyncSettingsError;
26745            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
26746                f.write_str("a TeamFolderUpdateSyncSettingsError structure")
26747            }
26748            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
26749                let tag: &str = match map.next_key()? {
26750                    Some(".tag") => map.next_value()?,
26751                    _ => return Err(de::Error::missing_field(".tag"))
26752                };
26753                let value = match tag {
26754                    "access_error" => {
26755                        match map.next_key()? {
26756                            Some("access_error") => TeamFolderUpdateSyncSettingsError::AccessError(map.next_value()?),
26757                            None => return Err(de::Error::missing_field("access_error")),
26758                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
26759                        }
26760                    }
26761                    "status_error" => {
26762                        match map.next_key()? {
26763                            Some("status_error") => TeamFolderUpdateSyncSettingsError::StatusError(map.next_value()?),
26764                            None => return Err(de::Error::missing_field("status_error")),
26765                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
26766                        }
26767                    }
26768                    "team_shared_dropbox_error" => {
26769                        match map.next_key()? {
26770                            Some("team_shared_dropbox_error") => TeamFolderUpdateSyncSettingsError::TeamSharedDropboxError(map.next_value()?),
26771                            None => return Err(de::Error::missing_field("team_shared_dropbox_error")),
26772                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
26773                        }
26774                    }
26775                    "sync_settings_error" => {
26776                        match map.next_key()? {
26777                            Some("sync_settings_error") => TeamFolderUpdateSyncSettingsError::SyncSettingsError(map.next_value()?),
26778                            None => return Err(de::Error::missing_field("sync_settings_error")),
26779                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
26780                        }
26781                    }
26782                    _ => TeamFolderUpdateSyncSettingsError::Other,
26783                };
26784                crate::eat_json_fields(&mut map)?;
26785                Ok(value)
26786            }
26787        }
26788        const VARIANTS: &[&str] = &["access_error",
26789                                    "status_error",
26790                                    "team_shared_dropbox_error",
26791                                    "other",
26792                                    "sync_settings_error"];
26793        deserializer.deserialize_struct("TeamFolderUpdateSyncSettingsError", VARIANTS, EnumVisitor)
26794    }
26795}
26796
26797impl ::serde::ser::Serialize for TeamFolderUpdateSyncSettingsError {
26798    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
26799        // union serializer
26800        use serde::ser::SerializeStruct;
26801        match self {
26802            TeamFolderUpdateSyncSettingsError::AccessError(x) => {
26803                // union or polymporphic struct
26804                let mut s = serializer.serialize_struct("TeamFolderUpdateSyncSettingsError", 2)?;
26805                s.serialize_field(".tag", "access_error")?;
26806                s.serialize_field("access_error", x)?;
26807                s.end()
26808            }
26809            TeamFolderUpdateSyncSettingsError::StatusError(x) => {
26810                // union or polymporphic struct
26811                let mut s = serializer.serialize_struct("TeamFolderUpdateSyncSettingsError", 2)?;
26812                s.serialize_field(".tag", "status_error")?;
26813                s.serialize_field("status_error", x)?;
26814                s.end()
26815            }
26816            TeamFolderUpdateSyncSettingsError::TeamSharedDropboxError(x) => {
26817                // union or polymporphic struct
26818                let mut s = serializer.serialize_struct("TeamFolderUpdateSyncSettingsError", 2)?;
26819                s.serialize_field(".tag", "team_shared_dropbox_error")?;
26820                s.serialize_field("team_shared_dropbox_error", x)?;
26821                s.end()
26822            }
26823            TeamFolderUpdateSyncSettingsError::SyncSettingsError(x) => {
26824                // union or polymporphic struct
26825                let mut s = serializer.serialize_struct("TeamFolderUpdateSyncSettingsError", 2)?;
26826                s.serialize_field(".tag", "sync_settings_error")?;
26827                s.serialize_field("sync_settings_error", x)?;
26828                s.end()
26829            }
26830            TeamFolderUpdateSyncSettingsError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
26831        }
26832    }
26833}
26834
26835impl ::std::error::Error for TeamFolderUpdateSyncSettingsError {
26836    fn source(&self) -> Option<&(dyn ::std::error::Error + 'static)> {
26837        match self {
26838            TeamFolderUpdateSyncSettingsError::AccessError(inner) => Some(inner),
26839            TeamFolderUpdateSyncSettingsError::StatusError(inner) => Some(inner),
26840            TeamFolderUpdateSyncSettingsError::TeamSharedDropboxError(inner) => Some(inner),
26841            TeamFolderUpdateSyncSettingsError::SyncSettingsError(inner) => Some(inner),
26842            _ => None,
26843        }
26844    }
26845}
26846
26847impl ::std::fmt::Display for TeamFolderUpdateSyncSettingsError {
26848    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
26849        match self {
26850            TeamFolderUpdateSyncSettingsError::AccessError(inner) => write!(f, "TeamFolderUpdateSyncSettingsError: {}", inner),
26851            TeamFolderUpdateSyncSettingsError::StatusError(inner) => write!(f, "TeamFolderUpdateSyncSettingsError: {}", inner),
26852            TeamFolderUpdateSyncSettingsError::TeamSharedDropboxError(inner) => write!(f, "TeamFolderUpdateSyncSettingsError: {}", inner),
26853            TeamFolderUpdateSyncSettingsError::SyncSettingsError(inner) => write!(f, "An error occurred setting the sync settings: {}", inner),
26854            _ => write!(f, "{:?}", *self),
26855        }
26856    }
26857}
26858
26859// union extends BaseTeamFolderError
26860impl From<BaseTeamFolderError> for TeamFolderUpdateSyncSettingsError {
26861    fn from(parent: BaseTeamFolderError) -> Self {
26862        match parent {
26863            BaseTeamFolderError::AccessError(x) => TeamFolderUpdateSyncSettingsError::AccessError(x),
26864            BaseTeamFolderError::StatusError(x) => TeamFolderUpdateSyncSettingsError::StatusError(x),
26865            BaseTeamFolderError::TeamSharedDropboxError(x) => TeamFolderUpdateSyncSettingsError::TeamSharedDropboxError(x),
26866            BaseTeamFolderError::Other => TeamFolderUpdateSyncSettingsError::Other,
26867        }
26868    }
26869}
26870#[derive(Debug, Clone, PartialEq, Eq)]
26871#[non_exhaustive] // structs may have more fields added in the future.
26872pub struct TeamGetInfoResult {
26873    /// The name of the team.
26874    pub name: String,
26875    /// The ID of the team.
26876    pub team_id: String,
26877    /// The number of licenses available to the team.
26878    pub num_licensed_users: u32,
26879    /// The number of accounts that have been invited or are already active members of the team.
26880    pub num_provisioned_users: u32,
26881    pub policies: crate::types::team_policies::TeamMemberPolicies,
26882    /// The number of licenses used on the team.
26883    pub num_used_licenses: u32,
26884}
26885
26886impl TeamGetInfoResult {
26887    pub fn new(
26888        name: String,
26889        team_id: String,
26890        num_licensed_users: u32,
26891        num_provisioned_users: u32,
26892        policies: crate::types::team_policies::TeamMemberPolicies,
26893    ) -> Self {
26894        TeamGetInfoResult {
26895            name,
26896            team_id,
26897            num_licensed_users,
26898            num_provisioned_users,
26899            policies,
26900            num_used_licenses: 0,
26901        }
26902    }
26903
26904    pub fn with_num_used_licenses(mut self, value: u32) -> Self {
26905        self.num_used_licenses = value;
26906        self
26907    }
26908}
26909
26910const TEAM_GET_INFO_RESULT_FIELDS: &[&str] = &["name",
26911                                               "team_id",
26912                                               "num_licensed_users",
26913                                               "num_provisioned_users",
26914                                               "policies",
26915                                               "num_used_licenses"];
26916impl TeamGetInfoResult {
26917    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
26918        map: V,
26919    ) -> Result<TeamGetInfoResult, V::Error> {
26920        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
26921    }
26922
26923    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
26924        mut map: V,
26925        optional: bool,
26926    ) -> Result<Option<TeamGetInfoResult>, V::Error> {
26927        let mut field_name = None;
26928        let mut field_team_id = None;
26929        let mut field_num_licensed_users = None;
26930        let mut field_num_provisioned_users = None;
26931        let mut field_policies = None;
26932        let mut field_num_used_licenses = None;
26933        let mut nothing = true;
26934        while let Some(key) = map.next_key::<&str>()? {
26935            nothing = false;
26936            match key {
26937                "name" => {
26938                    if field_name.is_some() {
26939                        return Err(::serde::de::Error::duplicate_field("name"));
26940                    }
26941                    field_name = Some(map.next_value()?);
26942                }
26943                "team_id" => {
26944                    if field_team_id.is_some() {
26945                        return Err(::serde::de::Error::duplicate_field("team_id"));
26946                    }
26947                    field_team_id = Some(map.next_value()?);
26948                }
26949                "num_licensed_users" => {
26950                    if field_num_licensed_users.is_some() {
26951                        return Err(::serde::de::Error::duplicate_field("num_licensed_users"));
26952                    }
26953                    field_num_licensed_users = Some(map.next_value()?);
26954                }
26955                "num_provisioned_users" => {
26956                    if field_num_provisioned_users.is_some() {
26957                        return Err(::serde::de::Error::duplicate_field("num_provisioned_users"));
26958                    }
26959                    field_num_provisioned_users = Some(map.next_value()?);
26960                }
26961                "policies" => {
26962                    if field_policies.is_some() {
26963                        return Err(::serde::de::Error::duplicate_field("policies"));
26964                    }
26965                    field_policies = Some(map.next_value()?);
26966                }
26967                "num_used_licenses" => {
26968                    if field_num_used_licenses.is_some() {
26969                        return Err(::serde::de::Error::duplicate_field("num_used_licenses"));
26970                    }
26971                    field_num_used_licenses = Some(map.next_value()?);
26972                }
26973                _ => {
26974                    // unknown field allowed and ignored
26975                    map.next_value::<::serde_json::Value>()?;
26976                }
26977            }
26978        }
26979        if optional && nothing {
26980            return Ok(None);
26981        }
26982        let result = TeamGetInfoResult {
26983            name: field_name.ok_or_else(|| ::serde::de::Error::missing_field("name"))?,
26984            team_id: field_team_id.ok_or_else(|| ::serde::de::Error::missing_field("team_id"))?,
26985            num_licensed_users: field_num_licensed_users.ok_or_else(|| ::serde::de::Error::missing_field("num_licensed_users"))?,
26986            num_provisioned_users: field_num_provisioned_users.ok_or_else(|| ::serde::de::Error::missing_field("num_provisioned_users"))?,
26987            policies: field_policies.ok_or_else(|| ::serde::de::Error::missing_field("policies"))?,
26988            num_used_licenses: field_num_used_licenses.unwrap_or(0),
26989        };
26990        Ok(Some(result))
26991    }
26992
26993    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
26994        &self,
26995        s: &mut S::SerializeStruct,
26996    ) -> Result<(), S::Error> {
26997        use serde::ser::SerializeStruct;
26998        s.serialize_field("name", &self.name)?;
26999        s.serialize_field("team_id", &self.team_id)?;
27000        s.serialize_field("num_licensed_users", &self.num_licensed_users)?;
27001        s.serialize_field("num_provisioned_users", &self.num_provisioned_users)?;
27002        s.serialize_field("policies", &self.policies)?;
27003        if self.num_used_licenses != 0 {
27004            s.serialize_field("num_used_licenses", &self.num_used_licenses)?;
27005        }
27006        Ok(())
27007    }
27008}
27009
27010impl<'de> ::serde::de::Deserialize<'de> for TeamGetInfoResult {
27011    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
27012        // struct deserializer
27013        use serde::de::{MapAccess, Visitor};
27014        struct StructVisitor;
27015        impl<'de> Visitor<'de> for StructVisitor {
27016            type Value = TeamGetInfoResult;
27017            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
27018                f.write_str("a TeamGetInfoResult struct")
27019            }
27020            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
27021                TeamGetInfoResult::internal_deserialize(map)
27022            }
27023        }
27024        deserializer.deserialize_struct("TeamGetInfoResult", TEAM_GET_INFO_RESULT_FIELDS, StructVisitor)
27025    }
27026}
27027
27028impl ::serde::ser::Serialize for TeamGetInfoResult {
27029    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
27030        // struct serializer
27031        use serde::ser::SerializeStruct;
27032        let mut s = serializer.serialize_struct("TeamGetInfoResult", 6)?;
27033        self.internal_serialize::<S>(&mut s)?;
27034        s.end()
27035    }
27036}
27037
27038/// Information about a team member.
27039#[derive(Debug, Clone, PartialEq, Eq)]
27040#[non_exhaustive] // structs may have more fields added in the future.
27041pub struct TeamMemberInfo {
27042    /// Profile of a user as a member of a team.
27043    pub profile: TeamMemberProfile,
27044    /// The user's role in the team.
27045    pub role: AdminTier,
27046}
27047
27048impl TeamMemberInfo {
27049    pub fn new(profile: TeamMemberProfile, role: AdminTier) -> Self {
27050        TeamMemberInfo {
27051            profile,
27052            role,
27053        }
27054    }
27055}
27056
27057const TEAM_MEMBER_INFO_FIELDS: &[&str] = &["profile",
27058                                           "role"];
27059impl TeamMemberInfo {
27060    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
27061        map: V,
27062    ) -> Result<TeamMemberInfo, V::Error> {
27063        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
27064    }
27065
27066    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
27067        mut map: V,
27068        optional: bool,
27069    ) -> Result<Option<TeamMemberInfo>, V::Error> {
27070        let mut field_profile = None;
27071        let mut field_role = None;
27072        let mut nothing = true;
27073        while let Some(key) = map.next_key::<&str>()? {
27074            nothing = false;
27075            match key {
27076                "profile" => {
27077                    if field_profile.is_some() {
27078                        return Err(::serde::de::Error::duplicate_field("profile"));
27079                    }
27080                    field_profile = Some(map.next_value()?);
27081                }
27082                "role" => {
27083                    if field_role.is_some() {
27084                        return Err(::serde::de::Error::duplicate_field("role"));
27085                    }
27086                    field_role = Some(map.next_value()?);
27087                }
27088                _ => {
27089                    // unknown field allowed and ignored
27090                    map.next_value::<::serde_json::Value>()?;
27091                }
27092            }
27093        }
27094        if optional && nothing {
27095            return Ok(None);
27096        }
27097        let result = TeamMemberInfo {
27098            profile: field_profile.ok_or_else(|| ::serde::de::Error::missing_field("profile"))?,
27099            role: field_role.ok_or_else(|| ::serde::de::Error::missing_field("role"))?,
27100        };
27101        Ok(Some(result))
27102    }
27103
27104    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
27105        &self,
27106        s: &mut S::SerializeStruct,
27107    ) -> Result<(), S::Error> {
27108        use serde::ser::SerializeStruct;
27109        s.serialize_field("profile", &self.profile)?;
27110        s.serialize_field("role", &self.role)?;
27111        Ok(())
27112    }
27113}
27114
27115impl<'de> ::serde::de::Deserialize<'de> for TeamMemberInfo {
27116    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
27117        // struct deserializer
27118        use serde::de::{MapAccess, Visitor};
27119        struct StructVisitor;
27120        impl<'de> Visitor<'de> for StructVisitor {
27121            type Value = TeamMemberInfo;
27122            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
27123                f.write_str("a TeamMemberInfo struct")
27124            }
27125            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
27126                TeamMemberInfo::internal_deserialize(map)
27127            }
27128        }
27129        deserializer.deserialize_struct("TeamMemberInfo", TEAM_MEMBER_INFO_FIELDS, StructVisitor)
27130    }
27131}
27132
27133impl ::serde::ser::Serialize for TeamMemberInfo {
27134    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
27135        // struct serializer
27136        use serde::ser::SerializeStruct;
27137        let mut s = serializer.serialize_struct("TeamMemberInfo", 2)?;
27138        self.internal_serialize::<S>(&mut s)?;
27139        s.end()
27140    }
27141}
27142
27143/// Information about a team member.
27144#[derive(Debug, Clone, PartialEq, Eq)]
27145#[non_exhaustive] // structs may have more fields added in the future.
27146pub struct TeamMemberInfoV2 {
27147    /// Profile of a user as a member of a team.
27148    pub profile: TeamMemberProfile,
27149    /// The user's roles in the team.
27150    pub roles: Option<Vec<TeamMemberRole>>,
27151}
27152
27153impl TeamMemberInfoV2 {
27154    pub fn new(profile: TeamMemberProfile) -> Self {
27155        TeamMemberInfoV2 {
27156            profile,
27157            roles: None,
27158        }
27159    }
27160
27161    pub fn with_roles(mut self, value: Vec<TeamMemberRole>) -> Self {
27162        self.roles = Some(value);
27163        self
27164    }
27165}
27166
27167const TEAM_MEMBER_INFO_V2_FIELDS: &[&str] = &["profile",
27168                                              "roles"];
27169impl TeamMemberInfoV2 {
27170    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
27171        map: V,
27172    ) -> Result<TeamMemberInfoV2, V::Error> {
27173        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
27174    }
27175
27176    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
27177        mut map: V,
27178        optional: bool,
27179    ) -> Result<Option<TeamMemberInfoV2>, V::Error> {
27180        let mut field_profile = None;
27181        let mut field_roles = None;
27182        let mut nothing = true;
27183        while let Some(key) = map.next_key::<&str>()? {
27184            nothing = false;
27185            match key {
27186                "profile" => {
27187                    if field_profile.is_some() {
27188                        return Err(::serde::de::Error::duplicate_field("profile"));
27189                    }
27190                    field_profile = Some(map.next_value()?);
27191                }
27192                "roles" => {
27193                    if field_roles.is_some() {
27194                        return Err(::serde::de::Error::duplicate_field("roles"));
27195                    }
27196                    field_roles = Some(map.next_value()?);
27197                }
27198                _ => {
27199                    // unknown field allowed and ignored
27200                    map.next_value::<::serde_json::Value>()?;
27201                }
27202            }
27203        }
27204        if optional && nothing {
27205            return Ok(None);
27206        }
27207        let result = TeamMemberInfoV2 {
27208            profile: field_profile.ok_or_else(|| ::serde::de::Error::missing_field("profile"))?,
27209            roles: field_roles.and_then(Option::flatten),
27210        };
27211        Ok(Some(result))
27212    }
27213
27214    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
27215        &self,
27216        s: &mut S::SerializeStruct,
27217    ) -> Result<(), S::Error> {
27218        use serde::ser::SerializeStruct;
27219        s.serialize_field("profile", &self.profile)?;
27220        if let Some(val) = &self.roles {
27221            s.serialize_field("roles", val)?;
27222        }
27223        Ok(())
27224    }
27225}
27226
27227impl<'de> ::serde::de::Deserialize<'de> for TeamMemberInfoV2 {
27228    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
27229        // struct deserializer
27230        use serde::de::{MapAccess, Visitor};
27231        struct StructVisitor;
27232        impl<'de> Visitor<'de> for StructVisitor {
27233            type Value = TeamMemberInfoV2;
27234            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
27235                f.write_str("a TeamMemberInfoV2 struct")
27236            }
27237            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
27238                TeamMemberInfoV2::internal_deserialize(map)
27239            }
27240        }
27241        deserializer.deserialize_struct("TeamMemberInfoV2", TEAM_MEMBER_INFO_V2_FIELDS, StructVisitor)
27242    }
27243}
27244
27245impl ::serde::ser::Serialize for TeamMemberInfoV2 {
27246    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
27247        // struct serializer
27248        use serde::ser::SerializeStruct;
27249        let mut s = serializer.serialize_struct("TeamMemberInfoV2", 2)?;
27250        self.internal_serialize::<S>(&mut s)?;
27251        s.end()
27252    }
27253}
27254
27255/// Information about a team member, after the change, like at
27256/// [`members_set_profile_v2()`](crate::team::members_set_profile_v2).
27257#[derive(Debug, Clone, PartialEq, Eq)]
27258#[non_exhaustive] // structs may have more fields added in the future.
27259pub struct TeamMemberInfoV2Result {
27260    /// Member info, after the change.
27261    pub member_info: TeamMemberInfoV2,
27262}
27263
27264impl TeamMemberInfoV2Result {
27265    pub fn new(member_info: TeamMemberInfoV2) -> Self {
27266        TeamMemberInfoV2Result {
27267            member_info,
27268        }
27269    }
27270}
27271
27272const TEAM_MEMBER_INFO_V2_RESULT_FIELDS: &[&str] = &["member_info"];
27273impl TeamMemberInfoV2Result {
27274    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
27275        map: V,
27276    ) -> Result<TeamMemberInfoV2Result, V::Error> {
27277        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
27278    }
27279
27280    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
27281        mut map: V,
27282        optional: bool,
27283    ) -> Result<Option<TeamMemberInfoV2Result>, V::Error> {
27284        let mut field_member_info = None;
27285        let mut nothing = true;
27286        while let Some(key) = map.next_key::<&str>()? {
27287            nothing = false;
27288            match key {
27289                "member_info" => {
27290                    if field_member_info.is_some() {
27291                        return Err(::serde::de::Error::duplicate_field("member_info"));
27292                    }
27293                    field_member_info = Some(map.next_value()?);
27294                }
27295                _ => {
27296                    // unknown field allowed and ignored
27297                    map.next_value::<::serde_json::Value>()?;
27298                }
27299            }
27300        }
27301        if optional && nothing {
27302            return Ok(None);
27303        }
27304        let result = TeamMemberInfoV2Result {
27305            member_info: field_member_info.ok_or_else(|| ::serde::de::Error::missing_field("member_info"))?,
27306        };
27307        Ok(Some(result))
27308    }
27309
27310    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
27311        &self,
27312        s: &mut S::SerializeStruct,
27313    ) -> Result<(), S::Error> {
27314        use serde::ser::SerializeStruct;
27315        s.serialize_field("member_info", &self.member_info)?;
27316        Ok(())
27317    }
27318}
27319
27320impl<'de> ::serde::de::Deserialize<'de> for TeamMemberInfoV2Result {
27321    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
27322        // struct deserializer
27323        use serde::de::{MapAccess, Visitor};
27324        struct StructVisitor;
27325        impl<'de> Visitor<'de> for StructVisitor {
27326            type Value = TeamMemberInfoV2Result;
27327            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
27328                f.write_str("a TeamMemberInfoV2Result struct")
27329            }
27330            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
27331                TeamMemberInfoV2Result::internal_deserialize(map)
27332            }
27333        }
27334        deserializer.deserialize_struct("TeamMemberInfoV2Result", TEAM_MEMBER_INFO_V2_RESULT_FIELDS, StructVisitor)
27335    }
27336}
27337
27338impl ::serde::ser::Serialize for TeamMemberInfoV2Result {
27339    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
27340        // struct serializer
27341        use serde::ser::SerializeStruct;
27342        let mut s = serializer.serialize_struct("TeamMemberInfoV2Result", 1)?;
27343        self.internal_serialize::<S>(&mut s)?;
27344        s.end()
27345    }
27346}
27347
27348/// Profile of a user as a member of a team.
27349#[derive(Debug, Clone, PartialEq, Eq)]
27350#[non_exhaustive] // structs may have more fields added in the future.
27351pub struct TeamMemberProfile {
27352    /// ID of user as a member of a team.
27353    pub team_member_id: crate::types::team_common::TeamMemberId,
27354    /// Email address of user.
27355    pub email: String,
27356    /// Is true if the user's email is verified to be owned by the user.
27357    pub email_verified: bool,
27358    /// The user's status as a member of a specific team.
27359    pub status: TeamMemberStatus,
27360    /// Representations for a person's name.
27361    pub name: crate::types::users::Name,
27362    /// The user's membership type: full (normal team member) vs limited (does not use a license; no
27363    /// access to the team's shared quota).
27364    pub membership_type: TeamMembershipType,
27365    /// List of group IDs of groups that the user belongs to.
27366    pub groups: Vec<crate::types::team_common::GroupId>,
27367    /// The namespace id of the user's root folder.
27368    pub member_folder_id: crate::types::common::NamespaceId,
27369    /// External ID that a team can attach to the user. An application using the API may find it
27370    /// easier to use their own IDs instead of Dropbox IDs like account_id or team_member_id.
27371    pub external_id: Option<String>,
27372    /// A user's account identifier.
27373    pub account_id: Option<crate::types::users_common::AccountId>,
27374    /// Secondary emails of a user.
27375    pub secondary_emails: Option<Vec<crate::types::secondary_emails::SecondaryEmail>>,
27376    /// The date and time the user was invited to the team (contains value only when the member's
27377    /// status matches [`TeamMemberStatus::Invited`]).
27378    pub invited_on: Option<crate::types::common::DropboxTimestamp>,
27379    /// The date and time the user joined as a member of a specific team.
27380    pub joined_on: Option<crate::types::common::DropboxTimestamp>,
27381    /// The date and time the user was suspended from the team (contains value only when the
27382    /// member's status matches [`TeamMemberStatus::Suspended`]).
27383    pub suspended_on: Option<crate::types::common::DropboxTimestamp>,
27384    /// Persistent ID that a team can attach to the user. The persistent ID is unique ID to be used
27385    /// for SAML authentication.
27386    pub persistent_id: Option<String>,
27387    /// Whether the user is a directory restricted user.
27388    pub is_directory_restricted: Option<bool>,
27389    /// URL for the photo representing the user, if one is set.
27390    pub profile_photo_url: Option<String>,
27391}
27392
27393impl TeamMemberProfile {
27394    pub fn new(
27395        team_member_id: crate::types::team_common::TeamMemberId,
27396        email: String,
27397        email_verified: bool,
27398        status: TeamMemberStatus,
27399        name: crate::types::users::Name,
27400        membership_type: TeamMembershipType,
27401        groups: Vec<crate::types::team_common::GroupId>,
27402        member_folder_id: crate::types::common::NamespaceId,
27403    ) -> Self {
27404        TeamMemberProfile {
27405            team_member_id,
27406            email,
27407            email_verified,
27408            status,
27409            name,
27410            membership_type,
27411            groups,
27412            member_folder_id,
27413            external_id: None,
27414            account_id: None,
27415            secondary_emails: None,
27416            invited_on: None,
27417            joined_on: None,
27418            suspended_on: None,
27419            persistent_id: None,
27420            is_directory_restricted: None,
27421            profile_photo_url: None,
27422        }
27423    }
27424
27425    pub fn with_external_id(mut self, value: String) -> Self {
27426        self.external_id = Some(value);
27427        self
27428    }
27429
27430    pub fn with_account_id(mut self, value: crate::types::users_common::AccountId) -> Self {
27431        self.account_id = Some(value);
27432        self
27433    }
27434
27435    pub fn with_secondary_emails(
27436        mut self,
27437        value: Vec<crate::types::secondary_emails::SecondaryEmail>,
27438    ) -> Self {
27439        self.secondary_emails = Some(value);
27440        self
27441    }
27442
27443    pub fn with_invited_on(mut self, value: crate::types::common::DropboxTimestamp) -> Self {
27444        self.invited_on = Some(value);
27445        self
27446    }
27447
27448    pub fn with_joined_on(mut self, value: crate::types::common::DropboxTimestamp) -> Self {
27449        self.joined_on = Some(value);
27450        self
27451    }
27452
27453    pub fn with_suspended_on(mut self, value: crate::types::common::DropboxTimestamp) -> Self {
27454        self.suspended_on = Some(value);
27455        self
27456    }
27457
27458    pub fn with_persistent_id(mut self, value: String) -> Self {
27459        self.persistent_id = Some(value);
27460        self
27461    }
27462
27463    pub fn with_is_directory_restricted(mut self, value: bool) -> Self {
27464        self.is_directory_restricted = Some(value);
27465        self
27466    }
27467
27468    pub fn with_profile_photo_url(mut self, value: String) -> Self {
27469        self.profile_photo_url = Some(value);
27470        self
27471    }
27472}
27473
27474const TEAM_MEMBER_PROFILE_FIELDS: &[&str] = &["team_member_id",
27475                                              "email",
27476                                              "email_verified",
27477                                              "status",
27478                                              "name",
27479                                              "membership_type",
27480                                              "groups",
27481                                              "member_folder_id",
27482                                              "external_id",
27483                                              "account_id",
27484                                              "secondary_emails",
27485                                              "invited_on",
27486                                              "joined_on",
27487                                              "suspended_on",
27488                                              "persistent_id",
27489                                              "is_directory_restricted",
27490                                              "profile_photo_url"];
27491impl TeamMemberProfile {
27492    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
27493        map: V,
27494    ) -> Result<TeamMemberProfile, V::Error> {
27495        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
27496    }
27497
27498    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
27499        mut map: V,
27500        optional: bool,
27501    ) -> Result<Option<TeamMemberProfile>, V::Error> {
27502        let mut field_team_member_id = None;
27503        let mut field_email = None;
27504        let mut field_email_verified = None;
27505        let mut field_status = None;
27506        let mut field_name = None;
27507        let mut field_membership_type = None;
27508        let mut field_groups = None;
27509        let mut field_member_folder_id = None;
27510        let mut field_external_id = None;
27511        let mut field_account_id = None;
27512        let mut field_secondary_emails = None;
27513        let mut field_invited_on = None;
27514        let mut field_joined_on = None;
27515        let mut field_suspended_on = None;
27516        let mut field_persistent_id = None;
27517        let mut field_is_directory_restricted = None;
27518        let mut field_profile_photo_url = None;
27519        let mut nothing = true;
27520        while let Some(key) = map.next_key::<&str>()? {
27521            nothing = false;
27522            match key {
27523                "team_member_id" => {
27524                    if field_team_member_id.is_some() {
27525                        return Err(::serde::de::Error::duplicate_field("team_member_id"));
27526                    }
27527                    field_team_member_id = Some(map.next_value()?);
27528                }
27529                "email" => {
27530                    if field_email.is_some() {
27531                        return Err(::serde::de::Error::duplicate_field("email"));
27532                    }
27533                    field_email = Some(map.next_value()?);
27534                }
27535                "email_verified" => {
27536                    if field_email_verified.is_some() {
27537                        return Err(::serde::de::Error::duplicate_field("email_verified"));
27538                    }
27539                    field_email_verified = Some(map.next_value()?);
27540                }
27541                "status" => {
27542                    if field_status.is_some() {
27543                        return Err(::serde::de::Error::duplicate_field("status"));
27544                    }
27545                    field_status = Some(map.next_value()?);
27546                }
27547                "name" => {
27548                    if field_name.is_some() {
27549                        return Err(::serde::de::Error::duplicate_field("name"));
27550                    }
27551                    field_name = Some(map.next_value()?);
27552                }
27553                "membership_type" => {
27554                    if field_membership_type.is_some() {
27555                        return Err(::serde::de::Error::duplicate_field("membership_type"));
27556                    }
27557                    field_membership_type = Some(map.next_value()?);
27558                }
27559                "groups" => {
27560                    if field_groups.is_some() {
27561                        return Err(::serde::de::Error::duplicate_field("groups"));
27562                    }
27563                    field_groups = Some(map.next_value()?);
27564                }
27565                "member_folder_id" => {
27566                    if field_member_folder_id.is_some() {
27567                        return Err(::serde::de::Error::duplicate_field("member_folder_id"));
27568                    }
27569                    field_member_folder_id = Some(map.next_value()?);
27570                }
27571                "external_id" => {
27572                    if field_external_id.is_some() {
27573                        return Err(::serde::de::Error::duplicate_field("external_id"));
27574                    }
27575                    field_external_id = Some(map.next_value()?);
27576                }
27577                "account_id" => {
27578                    if field_account_id.is_some() {
27579                        return Err(::serde::de::Error::duplicate_field("account_id"));
27580                    }
27581                    field_account_id = Some(map.next_value()?);
27582                }
27583                "secondary_emails" => {
27584                    if field_secondary_emails.is_some() {
27585                        return Err(::serde::de::Error::duplicate_field("secondary_emails"));
27586                    }
27587                    field_secondary_emails = Some(map.next_value()?);
27588                }
27589                "invited_on" => {
27590                    if field_invited_on.is_some() {
27591                        return Err(::serde::de::Error::duplicate_field("invited_on"));
27592                    }
27593                    field_invited_on = Some(map.next_value()?);
27594                }
27595                "joined_on" => {
27596                    if field_joined_on.is_some() {
27597                        return Err(::serde::de::Error::duplicate_field("joined_on"));
27598                    }
27599                    field_joined_on = Some(map.next_value()?);
27600                }
27601                "suspended_on" => {
27602                    if field_suspended_on.is_some() {
27603                        return Err(::serde::de::Error::duplicate_field("suspended_on"));
27604                    }
27605                    field_suspended_on = Some(map.next_value()?);
27606                }
27607                "persistent_id" => {
27608                    if field_persistent_id.is_some() {
27609                        return Err(::serde::de::Error::duplicate_field("persistent_id"));
27610                    }
27611                    field_persistent_id = Some(map.next_value()?);
27612                }
27613                "is_directory_restricted" => {
27614                    if field_is_directory_restricted.is_some() {
27615                        return Err(::serde::de::Error::duplicate_field("is_directory_restricted"));
27616                    }
27617                    field_is_directory_restricted = Some(map.next_value()?);
27618                }
27619                "profile_photo_url" => {
27620                    if field_profile_photo_url.is_some() {
27621                        return Err(::serde::de::Error::duplicate_field("profile_photo_url"));
27622                    }
27623                    field_profile_photo_url = Some(map.next_value()?);
27624                }
27625                _ => {
27626                    // unknown field allowed and ignored
27627                    map.next_value::<::serde_json::Value>()?;
27628                }
27629            }
27630        }
27631        if optional && nothing {
27632            return Ok(None);
27633        }
27634        let result = TeamMemberProfile {
27635            team_member_id: field_team_member_id.ok_or_else(|| ::serde::de::Error::missing_field("team_member_id"))?,
27636            email: field_email.ok_or_else(|| ::serde::de::Error::missing_field("email"))?,
27637            email_verified: field_email_verified.ok_or_else(|| ::serde::de::Error::missing_field("email_verified"))?,
27638            status: field_status.ok_or_else(|| ::serde::de::Error::missing_field("status"))?,
27639            name: field_name.ok_or_else(|| ::serde::de::Error::missing_field("name"))?,
27640            membership_type: field_membership_type.ok_or_else(|| ::serde::de::Error::missing_field("membership_type"))?,
27641            groups: field_groups.ok_or_else(|| ::serde::de::Error::missing_field("groups"))?,
27642            member_folder_id: field_member_folder_id.ok_or_else(|| ::serde::de::Error::missing_field("member_folder_id"))?,
27643            external_id: field_external_id.and_then(Option::flatten),
27644            account_id: field_account_id.and_then(Option::flatten),
27645            secondary_emails: field_secondary_emails.and_then(Option::flatten),
27646            invited_on: field_invited_on.and_then(Option::flatten),
27647            joined_on: field_joined_on.and_then(Option::flatten),
27648            suspended_on: field_suspended_on.and_then(Option::flatten),
27649            persistent_id: field_persistent_id.and_then(Option::flatten),
27650            is_directory_restricted: field_is_directory_restricted.and_then(Option::flatten),
27651            profile_photo_url: field_profile_photo_url.and_then(Option::flatten),
27652        };
27653        Ok(Some(result))
27654    }
27655
27656    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
27657        &self,
27658        s: &mut S::SerializeStruct,
27659    ) -> Result<(), S::Error> {
27660        use serde::ser::SerializeStruct;
27661        s.serialize_field("team_member_id", &self.team_member_id)?;
27662        s.serialize_field("email", &self.email)?;
27663        s.serialize_field("email_verified", &self.email_verified)?;
27664        s.serialize_field("status", &self.status)?;
27665        s.serialize_field("name", &self.name)?;
27666        s.serialize_field("membership_type", &self.membership_type)?;
27667        s.serialize_field("groups", &self.groups)?;
27668        s.serialize_field("member_folder_id", &self.member_folder_id)?;
27669        if let Some(val) = &self.external_id {
27670            s.serialize_field("external_id", val)?;
27671        }
27672        if let Some(val) = &self.account_id {
27673            s.serialize_field("account_id", val)?;
27674        }
27675        if let Some(val) = &self.secondary_emails {
27676            s.serialize_field("secondary_emails", val)?;
27677        }
27678        if let Some(val) = &self.invited_on {
27679            s.serialize_field("invited_on", val)?;
27680        }
27681        if let Some(val) = &self.joined_on {
27682            s.serialize_field("joined_on", val)?;
27683        }
27684        if let Some(val) = &self.suspended_on {
27685            s.serialize_field("suspended_on", val)?;
27686        }
27687        if let Some(val) = &self.persistent_id {
27688            s.serialize_field("persistent_id", val)?;
27689        }
27690        if let Some(val) = &self.is_directory_restricted {
27691            s.serialize_field("is_directory_restricted", val)?;
27692        }
27693        if let Some(val) = &self.profile_photo_url {
27694            s.serialize_field("profile_photo_url", val)?;
27695        }
27696        Ok(())
27697    }
27698}
27699
27700impl<'de> ::serde::de::Deserialize<'de> for TeamMemberProfile {
27701    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
27702        // struct deserializer
27703        use serde::de::{MapAccess, Visitor};
27704        struct StructVisitor;
27705        impl<'de> Visitor<'de> for StructVisitor {
27706            type Value = TeamMemberProfile;
27707            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
27708                f.write_str("a TeamMemberProfile struct")
27709            }
27710            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
27711                TeamMemberProfile::internal_deserialize(map)
27712            }
27713        }
27714        deserializer.deserialize_struct("TeamMemberProfile", TEAM_MEMBER_PROFILE_FIELDS, StructVisitor)
27715    }
27716}
27717
27718impl ::serde::ser::Serialize for TeamMemberProfile {
27719    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
27720        // struct serializer
27721        use serde::ser::SerializeStruct;
27722        let mut s = serializer.serialize_struct("TeamMemberProfile", 17)?;
27723        self.internal_serialize::<S>(&mut s)?;
27724        s.end()
27725    }
27726}
27727
27728// struct extends MemberProfile
27729impl From<TeamMemberProfile> for MemberProfile {
27730    fn from(subtype: TeamMemberProfile) -> Self {
27731        Self {
27732            team_member_id: subtype.team_member_id,
27733            email: subtype.email,
27734            email_verified: subtype.email_verified,
27735            status: subtype.status,
27736            name: subtype.name,
27737            membership_type: subtype.membership_type,
27738            external_id: subtype.external_id,
27739            account_id: subtype.account_id,
27740            secondary_emails: subtype.secondary_emails,
27741            invited_on: subtype.invited_on,
27742            joined_on: subtype.joined_on,
27743            suspended_on: subtype.suspended_on,
27744            persistent_id: subtype.persistent_id,
27745            is_directory_restricted: subtype.is_directory_restricted,
27746            profile_photo_url: subtype.profile_photo_url,
27747        }
27748    }
27749}
27750/// A role which can be attached to a team member. This replaces AdminTier; each AdminTier
27751/// corresponds to a new TeamMemberRole with a matching name.
27752#[derive(Debug, Clone, PartialEq, Eq)]
27753#[non_exhaustive] // structs may have more fields added in the future.
27754pub struct TeamMemberRole {
27755    /// A string containing encoded role ID. For roles defined by Dropbox, this is the same across
27756    /// all teams.
27757    pub role_id: TeamMemberRoleId,
27758    /// The role display name.
27759    pub name: String,
27760    /// Role description. Describes which permissions come with this role.
27761    pub description: String,
27762}
27763
27764impl TeamMemberRole {
27765    pub fn new(role_id: TeamMemberRoleId, name: String, description: String) -> Self {
27766        TeamMemberRole {
27767            role_id,
27768            name,
27769            description,
27770        }
27771    }
27772}
27773
27774const TEAM_MEMBER_ROLE_FIELDS: &[&str] = &["role_id",
27775                                           "name",
27776                                           "description"];
27777impl TeamMemberRole {
27778    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
27779        map: V,
27780    ) -> Result<TeamMemberRole, V::Error> {
27781        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
27782    }
27783
27784    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
27785        mut map: V,
27786        optional: bool,
27787    ) -> Result<Option<TeamMemberRole>, V::Error> {
27788        let mut field_role_id = None;
27789        let mut field_name = None;
27790        let mut field_description = None;
27791        let mut nothing = true;
27792        while let Some(key) = map.next_key::<&str>()? {
27793            nothing = false;
27794            match key {
27795                "role_id" => {
27796                    if field_role_id.is_some() {
27797                        return Err(::serde::de::Error::duplicate_field("role_id"));
27798                    }
27799                    field_role_id = Some(map.next_value()?);
27800                }
27801                "name" => {
27802                    if field_name.is_some() {
27803                        return Err(::serde::de::Error::duplicate_field("name"));
27804                    }
27805                    field_name = Some(map.next_value()?);
27806                }
27807                "description" => {
27808                    if field_description.is_some() {
27809                        return Err(::serde::de::Error::duplicate_field("description"));
27810                    }
27811                    field_description = Some(map.next_value()?);
27812                }
27813                _ => {
27814                    // unknown field allowed and ignored
27815                    map.next_value::<::serde_json::Value>()?;
27816                }
27817            }
27818        }
27819        if optional && nothing {
27820            return Ok(None);
27821        }
27822        let result = TeamMemberRole {
27823            role_id: field_role_id.ok_or_else(|| ::serde::de::Error::missing_field("role_id"))?,
27824            name: field_name.ok_or_else(|| ::serde::de::Error::missing_field("name"))?,
27825            description: field_description.ok_or_else(|| ::serde::de::Error::missing_field("description"))?,
27826        };
27827        Ok(Some(result))
27828    }
27829
27830    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
27831        &self,
27832        s: &mut S::SerializeStruct,
27833    ) -> Result<(), S::Error> {
27834        use serde::ser::SerializeStruct;
27835        s.serialize_field("role_id", &self.role_id)?;
27836        s.serialize_field("name", &self.name)?;
27837        s.serialize_field("description", &self.description)?;
27838        Ok(())
27839    }
27840}
27841
27842impl<'de> ::serde::de::Deserialize<'de> for TeamMemberRole {
27843    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
27844        // struct deserializer
27845        use serde::de::{MapAccess, Visitor};
27846        struct StructVisitor;
27847        impl<'de> Visitor<'de> for StructVisitor {
27848            type Value = TeamMemberRole;
27849            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
27850                f.write_str("a TeamMemberRole struct")
27851            }
27852            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
27853                TeamMemberRole::internal_deserialize(map)
27854            }
27855        }
27856        deserializer.deserialize_struct("TeamMemberRole", TEAM_MEMBER_ROLE_FIELDS, StructVisitor)
27857    }
27858}
27859
27860impl ::serde::ser::Serialize for TeamMemberRole {
27861    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
27862        // struct serializer
27863        use serde::ser::SerializeStruct;
27864        let mut s = serializer.serialize_struct("TeamMemberRole", 3)?;
27865        self.internal_serialize::<S>(&mut s)?;
27866        s.end()
27867    }
27868}
27869
27870/// The user's status as a member of a specific team.
27871#[derive(Debug, Clone, PartialEq, Eq)]
27872pub enum TeamMemberStatus {
27873    /// User has successfully joined the team.
27874    Active,
27875    /// User has been invited to a team, but has not joined the team yet.
27876    Invited,
27877    /// User is no longer a member of the team, but the account can be un-suspended, re-establishing
27878    /// the user as a team member.
27879    Suspended,
27880    /// User is no longer a member of the team. Removed users are only listed when include_removed
27881    /// is true in members/list.
27882    Removed(RemovedStatus),
27883}
27884
27885impl<'de> ::serde::de::Deserialize<'de> for TeamMemberStatus {
27886    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
27887        // union deserializer
27888        use serde::de::{self, MapAccess, Visitor};
27889        struct EnumVisitor;
27890        impl<'de> Visitor<'de> for EnumVisitor {
27891            type Value = TeamMemberStatus;
27892            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
27893                f.write_str("a TeamMemberStatus structure")
27894            }
27895            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
27896                let tag: &str = match map.next_key()? {
27897                    Some(".tag") => map.next_value()?,
27898                    _ => return Err(de::Error::missing_field(".tag"))
27899                };
27900                let value = match tag {
27901                    "active" => TeamMemberStatus::Active,
27902                    "invited" => TeamMemberStatus::Invited,
27903                    "suspended" => TeamMemberStatus::Suspended,
27904                    "removed" => TeamMemberStatus::Removed(RemovedStatus::internal_deserialize(&mut map)?),
27905                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
27906                };
27907                crate::eat_json_fields(&mut map)?;
27908                Ok(value)
27909            }
27910        }
27911        const VARIANTS: &[&str] = &["active",
27912                                    "invited",
27913                                    "suspended",
27914                                    "removed"];
27915        deserializer.deserialize_struct("TeamMemberStatus", VARIANTS, EnumVisitor)
27916    }
27917}
27918
27919impl ::serde::ser::Serialize for TeamMemberStatus {
27920    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
27921        // union serializer
27922        use serde::ser::SerializeStruct;
27923        match self {
27924            TeamMemberStatus::Active => {
27925                // unit
27926                let mut s = serializer.serialize_struct("TeamMemberStatus", 1)?;
27927                s.serialize_field(".tag", "active")?;
27928                s.end()
27929            }
27930            TeamMemberStatus::Invited => {
27931                // unit
27932                let mut s = serializer.serialize_struct("TeamMemberStatus", 1)?;
27933                s.serialize_field(".tag", "invited")?;
27934                s.end()
27935            }
27936            TeamMemberStatus::Suspended => {
27937                // unit
27938                let mut s = serializer.serialize_struct("TeamMemberStatus", 1)?;
27939                s.serialize_field(".tag", "suspended")?;
27940                s.end()
27941            }
27942            TeamMemberStatus::Removed(x) => {
27943                // struct
27944                let mut s = serializer.serialize_struct("TeamMemberStatus", 3)?;
27945                s.serialize_field(".tag", "removed")?;
27946                x.internal_serialize::<S>(&mut s)?;
27947                s.end()
27948            }
27949        }
27950    }
27951}
27952
27953#[derive(Debug, Clone, PartialEq, Eq)]
27954pub enum TeamMembershipType {
27955    /// User uses a license and has full access to team resources like the shared quota.
27956    Full,
27957    /// User does not have access to the shared quota and team admins have restricted administrative
27958    /// control.
27959    Limited,
27960}
27961
27962impl<'de> ::serde::de::Deserialize<'de> for TeamMembershipType {
27963    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
27964        // union deserializer
27965        use serde::de::{self, MapAccess, Visitor};
27966        struct EnumVisitor;
27967        impl<'de> Visitor<'de> for EnumVisitor {
27968            type Value = TeamMembershipType;
27969            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
27970                f.write_str("a TeamMembershipType structure")
27971            }
27972            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
27973                let tag: &str = match map.next_key()? {
27974                    Some(".tag") => map.next_value()?,
27975                    _ => return Err(de::Error::missing_field(".tag"))
27976                };
27977                let value = match tag {
27978                    "full" => TeamMembershipType::Full,
27979                    "limited" => TeamMembershipType::Limited,
27980                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
27981                };
27982                crate::eat_json_fields(&mut map)?;
27983                Ok(value)
27984            }
27985        }
27986        const VARIANTS: &[&str] = &["full",
27987                                    "limited"];
27988        deserializer.deserialize_struct("TeamMembershipType", VARIANTS, EnumVisitor)
27989    }
27990}
27991
27992impl ::serde::ser::Serialize for TeamMembershipType {
27993    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
27994        // union serializer
27995        use serde::ser::SerializeStruct;
27996        match self {
27997            TeamMembershipType::Full => {
27998                // unit
27999                let mut s = serializer.serialize_struct("TeamMembershipType", 1)?;
28000                s.serialize_field(".tag", "full")?;
28001                s.end()
28002            }
28003            TeamMembershipType::Limited => {
28004                // unit
28005                let mut s = serializer.serialize_struct("TeamMembershipType", 1)?;
28006                s.serialize_field(".tag", "limited")?;
28007                s.end()
28008            }
28009        }
28010    }
28011}
28012
28013#[derive(Debug, Clone, PartialEq, Eq)]
28014#[non_exhaustive] // structs may have more fields added in the future.
28015pub struct TeamNamespacesListArg {
28016    /// Specifying a value here has no effect.
28017    pub limit: u32,
28018}
28019
28020impl Default for TeamNamespacesListArg {
28021    fn default() -> Self {
28022        TeamNamespacesListArg {
28023            limit: 1000,
28024        }
28025    }
28026}
28027
28028impl TeamNamespacesListArg {
28029    pub fn with_limit(mut self, value: u32) -> Self {
28030        self.limit = value;
28031        self
28032    }
28033}
28034
28035const TEAM_NAMESPACES_LIST_ARG_FIELDS: &[&str] = &["limit"];
28036impl TeamNamespacesListArg {
28037    // no _opt deserializer
28038    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
28039        mut map: V,
28040    ) -> Result<TeamNamespacesListArg, V::Error> {
28041        let mut field_limit = None;
28042        while let Some(key) = map.next_key::<&str>()? {
28043            match key {
28044                "limit" => {
28045                    if field_limit.is_some() {
28046                        return Err(::serde::de::Error::duplicate_field("limit"));
28047                    }
28048                    field_limit = Some(map.next_value()?);
28049                }
28050                _ => {
28051                    // unknown field allowed and ignored
28052                    map.next_value::<::serde_json::Value>()?;
28053                }
28054            }
28055        }
28056        let result = TeamNamespacesListArg {
28057            limit: field_limit.unwrap_or(1000),
28058        };
28059        Ok(result)
28060    }
28061
28062    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
28063        &self,
28064        s: &mut S::SerializeStruct,
28065    ) -> Result<(), S::Error> {
28066        use serde::ser::SerializeStruct;
28067        if self.limit != 1000 {
28068            s.serialize_field("limit", &self.limit)?;
28069        }
28070        Ok(())
28071    }
28072}
28073
28074impl<'de> ::serde::de::Deserialize<'de> for TeamNamespacesListArg {
28075    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
28076        // struct deserializer
28077        use serde::de::{MapAccess, Visitor};
28078        struct StructVisitor;
28079        impl<'de> Visitor<'de> for StructVisitor {
28080            type Value = TeamNamespacesListArg;
28081            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
28082                f.write_str("a TeamNamespacesListArg struct")
28083            }
28084            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
28085                TeamNamespacesListArg::internal_deserialize(map)
28086            }
28087        }
28088        deserializer.deserialize_struct("TeamNamespacesListArg", TEAM_NAMESPACES_LIST_ARG_FIELDS, StructVisitor)
28089    }
28090}
28091
28092impl ::serde::ser::Serialize for TeamNamespacesListArg {
28093    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
28094        // struct serializer
28095        use serde::ser::SerializeStruct;
28096        let mut s = serializer.serialize_struct("TeamNamespacesListArg", 1)?;
28097        self.internal_serialize::<S>(&mut s)?;
28098        s.end()
28099    }
28100}
28101
28102#[derive(Debug, Clone, PartialEq, Eq)]
28103#[non_exhaustive] // structs may have more fields added in the future.
28104pub struct TeamNamespacesListContinueArg {
28105    /// Indicates from what point to get the next set of team-accessible namespaces.
28106    pub cursor: String,
28107}
28108
28109impl TeamNamespacesListContinueArg {
28110    pub fn new(cursor: String) -> Self {
28111        TeamNamespacesListContinueArg {
28112            cursor,
28113        }
28114    }
28115}
28116
28117const TEAM_NAMESPACES_LIST_CONTINUE_ARG_FIELDS: &[&str] = &["cursor"];
28118impl TeamNamespacesListContinueArg {
28119    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
28120        map: V,
28121    ) -> Result<TeamNamespacesListContinueArg, V::Error> {
28122        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
28123    }
28124
28125    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
28126        mut map: V,
28127        optional: bool,
28128    ) -> Result<Option<TeamNamespacesListContinueArg>, V::Error> {
28129        let mut field_cursor = None;
28130        let mut nothing = true;
28131        while let Some(key) = map.next_key::<&str>()? {
28132            nothing = false;
28133            match key {
28134                "cursor" => {
28135                    if field_cursor.is_some() {
28136                        return Err(::serde::de::Error::duplicate_field("cursor"));
28137                    }
28138                    field_cursor = Some(map.next_value()?);
28139                }
28140                _ => {
28141                    // unknown field allowed and ignored
28142                    map.next_value::<::serde_json::Value>()?;
28143                }
28144            }
28145        }
28146        if optional && nothing {
28147            return Ok(None);
28148        }
28149        let result = TeamNamespacesListContinueArg {
28150            cursor: field_cursor.ok_or_else(|| ::serde::de::Error::missing_field("cursor"))?,
28151        };
28152        Ok(Some(result))
28153    }
28154
28155    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
28156        &self,
28157        s: &mut S::SerializeStruct,
28158    ) -> Result<(), S::Error> {
28159        use serde::ser::SerializeStruct;
28160        s.serialize_field("cursor", &self.cursor)?;
28161        Ok(())
28162    }
28163}
28164
28165impl<'de> ::serde::de::Deserialize<'de> for TeamNamespacesListContinueArg {
28166    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
28167        // struct deserializer
28168        use serde::de::{MapAccess, Visitor};
28169        struct StructVisitor;
28170        impl<'de> Visitor<'de> for StructVisitor {
28171            type Value = TeamNamespacesListContinueArg;
28172            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
28173                f.write_str("a TeamNamespacesListContinueArg struct")
28174            }
28175            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
28176                TeamNamespacesListContinueArg::internal_deserialize(map)
28177            }
28178        }
28179        deserializer.deserialize_struct("TeamNamespacesListContinueArg", TEAM_NAMESPACES_LIST_CONTINUE_ARG_FIELDS, StructVisitor)
28180    }
28181}
28182
28183impl ::serde::ser::Serialize for TeamNamespacesListContinueArg {
28184    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
28185        // struct serializer
28186        use serde::ser::SerializeStruct;
28187        let mut s = serializer.serialize_struct("TeamNamespacesListContinueArg", 1)?;
28188        self.internal_serialize::<S>(&mut s)?;
28189        s.end()
28190    }
28191}
28192
28193#[derive(Debug, Clone, PartialEq, Eq)]
28194#[non_exhaustive] // variants may be added in the future
28195pub enum TeamNamespacesListContinueError {
28196    /// Argument passed in is invalid.
28197    InvalidArg,
28198    /// The cursor is invalid.
28199    InvalidCursor,
28200    /// Catch-all used for unrecognized values returned from the server. Encountering this value
28201    /// typically indicates that this SDK version is out of date.
28202    Other,
28203}
28204
28205impl<'de> ::serde::de::Deserialize<'de> for TeamNamespacesListContinueError {
28206    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
28207        // union deserializer
28208        use serde::de::{self, MapAccess, Visitor};
28209        struct EnumVisitor;
28210        impl<'de> Visitor<'de> for EnumVisitor {
28211            type Value = TeamNamespacesListContinueError;
28212            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
28213                f.write_str("a TeamNamespacesListContinueError structure")
28214            }
28215            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
28216                let tag: &str = match map.next_key()? {
28217                    Some(".tag") => map.next_value()?,
28218                    _ => return Err(de::Error::missing_field(".tag"))
28219                };
28220                let value = match tag {
28221                    "invalid_arg" => TeamNamespacesListContinueError::InvalidArg,
28222                    "invalid_cursor" => TeamNamespacesListContinueError::InvalidCursor,
28223                    _ => TeamNamespacesListContinueError::Other,
28224                };
28225                crate::eat_json_fields(&mut map)?;
28226                Ok(value)
28227            }
28228        }
28229        const VARIANTS: &[&str] = &["invalid_arg",
28230                                    "other",
28231                                    "invalid_cursor"];
28232        deserializer.deserialize_struct("TeamNamespacesListContinueError", VARIANTS, EnumVisitor)
28233    }
28234}
28235
28236impl ::serde::ser::Serialize for TeamNamespacesListContinueError {
28237    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
28238        // union serializer
28239        use serde::ser::SerializeStruct;
28240        match self {
28241            TeamNamespacesListContinueError::InvalidArg => {
28242                // unit
28243                let mut s = serializer.serialize_struct("TeamNamespacesListContinueError", 1)?;
28244                s.serialize_field(".tag", "invalid_arg")?;
28245                s.end()
28246            }
28247            TeamNamespacesListContinueError::InvalidCursor => {
28248                // unit
28249                let mut s = serializer.serialize_struct("TeamNamespacesListContinueError", 1)?;
28250                s.serialize_field(".tag", "invalid_cursor")?;
28251                s.end()
28252            }
28253            TeamNamespacesListContinueError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
28254        }
28255    }
28256}
28257
28258impl ::std::error::Error for TeamNamespacesListContinueError {
28259}
28260
28261impl ::std::fmt::Display for TeamNamespacesListContinueError {
28262    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
28263        match self {
28264            TeamNamespacesListContinueError::InvalidArg => f.write_str("Argument passed in is invalid."),
28265            TeamNamespacesListContinueError::InvalidCursor => f.write_str("The cursor is invalid."),
28266            _ => write!(f, "{:?}", *self),
28267        }
28268    }
28269}
28270
28271// union extends TeamNamespacesListError
28272impl From<TeamNamespacesListError> for TeamNamespacesListContinueError {
28273    fn from(parent: TeamNamespacesListError) -> Self {
28274        match parent {
28275            TeamNamespacesListError::InvalidArg => TeamNamespacesListContinueError::InvalidArg,
28276            TeamNamespacesListError::Other => TeamNamespacesListContinueError::Other,
28277        }
28278    }
28279}
28280#[derive(Debug, Clone, PartialEq, Eq)]
28281#[non_exhaustive] // variants may be added in the future
28282pub enum TeamNamespacesListError {
28283    /// Argument passed in is invalid.
28284    InvalidArg,
28285    /// Catch-all used for unrecognized values returned from the server. Encountering this value
28286    /// typically indicates that this SDK version is out of date.
28287    Other,
28288}
28289
28290impl<'de> ::serde::de::Deserialize<'de> for TeamNamespacesListError {
28291    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
28292        // union deserializer
28293        use serde::de::{self, MapAccess, Visitor};
28294        struct EnumVisitor;
28295        impl<'de> Visitor<'de> for EnumVisitor {
28296            type Value = TeamNamespacesListError;
28297            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
28298                f.write_str("a TeamNamespacesListError structure")
28299            }
28300            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
28301                let tag: &str = match map.next_key()? {
28302                    Some(".tag") => map.next_value()?,
28303                    _ => return Err(de::Error::missing_field(".tag"))
28304                };
28305                let value = match tag {
28306                    "invalid_arg" => TeamNamespacesListError::InvalidArg,
28307                    _ => TeamNamespacesListError::Other,
28308                };
28309                crate::eat_json_fields(&mut map)?;
28310                Ok(value)
28311            }
28312        }
28313        const VARIANTS: &[&str] = &["invalid_arg",
28314                                    "other"];
28315        deserializer.deserialize_struct("TeamNamespacesListError", VARIANTS, EnumVisitor)
28316    }
28317}
28318
28319impl ::serde::ser::Serialize for TeamNamespacesListError {
28320    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
28321        // union serializer
28322        use serde::ser::SerializeStruct;
28323        match self {
28324            TeamNamespacesListError::InvalidArg => {
28325                // unit
28326                let mut s = serializer.serialize_struct("TeamNamespacesListError", 1)?;
28327                s.serialize_field(".tag", "invalid_arg")?;
28328                s.end()
28329            }
28330            TeamNamespacesListError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
28331        }
28332    }
28333}
28334
28335impl ::std::error::Error for TeamNamespacesListError {
28336}
28337
28338impl ::std::fmt::Display for TeamNamespacesListError {
28339    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
28340        match self {
28341            TeamNamespacesListError::InvalidArg => f.write_str("Argument passed in is invalid."),
28342            _ => write!(f, "{:?}", *self),
28343        }
28344    }
28345}
28346
28347/// Result for [`namespaces_list()`](crate::team::namespaces_list).
28348#[derive(Debug, Clone, PartialEq, Eq)]
28349#[non_exhaustive] // structs may have more fields added in the future.
28350pub struct TeamNamespacesListResult {
28351    /// List of all namespaces the team can access.
28352    pub namespaces: Vec<NamespaceMetadata>,
28353    /// Pass the cursor into [`namespaces_list_continue()`](crate::team::namespaces_list_continue)
28354    /// to obtain additional namespaces. Note that duplicate namespaces may be returned.
28355    pub cursor: String,
28356    /// Is true if there are additional namespaces that have not been returned yet.
28357    pub has_more: bool,
28358}
28359
28360impl TeamNamespacesListResult {
28361    pub fn new(namespaces: Vec<NamespaceMetadata>, cursor: String, has_more: bool) -> Self {
28362        TeamNamespacesListResult {
28363            namespaces,
28364            cursor,
28365            has_more,
28366        }
28367    }
28368}
28369
28370const TEAM_NAMESPACES_LIST_RESULT_FIELDS: &[&str] = &["namespaces",
28371                                                      "cursor",
28372                                                      "has_more"];
28373impl TeamNamespacesListResult {
28374    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
28375        map: V,
28376    ) -> Result<TeamNamespacesListResult, V::Error> {
28377        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
28378    }
28379
28380    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
28381        mut map: V,
28382        optional: bool,
28383    ) -> Result<Option<TeamNamespacesListResult>, V::Error> {
28384        let mut field_namespaces = None;
28385        let mut field_cursor = None;
28386        let mut field_has_more = None;
28387        let mut nothing = true;
28388        while let Some(key) = map.next_key::<&str>()? {
28389            nothing = false;
28390            match key {
28391                "namespaces" => {
28392                    if field_namespaces.is_some() {
28393                        return Err(::serde::de::Error::duplicate_field("namespaces"));
28394                    }
28395                    field_namespaces = Some(map.next_value()?);
28396                }
28397                "cursor" => {
28398                    if field_cursor.is_some() {
28399                        return Err(::serde::de::Error::duplicate_field("cursor"));
28400                    }
28401                    field_cursor = Some(map.next_value()?);
28402                }
28403                "has_more" => {
28404                    if field_has_more.is_some() {
28405                        return Err(::serde::de::Error::duplicate_field("has_more"));
28406                    }
28407                    field_has_more = Some(map.next_value()?);
28408                }
28409                _ => {
28410                    // unknown field allowed and ignored
28411                    map.next_value::<::serde_json::Value>()?;
28412                }
28413            }
28414        }
28415        if optional && nothing {
28416            return Ok(None);
28417        }
28418        let result = TeamNamespacesListResult {
28419            namespaces: field_namespaces.ok_or_else(|| ::serde::de::Error::missing_field("namespaces"))?,
28420            cursor: field_cursor.ok_or_else(|| ::serde::de::Error::missing_field("cursor"))?,
28421            has_more: field_has_more.ok_or_else(|| ::serde::de::Error::missing_field("has_more"))?,
28422        };
28423        Ok(Some(result))
28424    }
28425
28426    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
28427        &self,
28428        s: &mut S::SerializeStruct,
28429    ) -> Result<(), S::Error> {
28430        use serde::ser::SerializeStruct;
28431        s.serialize_field("namespaces", &self.namespaces)?;
28432        s.serialize_field("cursor", &self.cursor)?;
28433        s.serialize_field("has_more", &self.has_more)?;
28434        Ok(())
28435    }
28436}
28437
28438impl<'de> ::serde::de::Deserialize<'de> for TeamNamespacesListResult {
28439    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
28440        // struct deserializer
28441        use serde::de::{MapAccess, Visitor};
28442        struct StructVisitor;
28443        impl<'de> Visitor<'de> for StructVisitor {
28444            type Value = TeamNamespacesListResult;
28445            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
28446                f.write_str("a TeamNamespacesListResult struct")
28447            }
28448            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
28449                TeamNamespacesListResult::internal_deserialize(map)
28450            }
28451        }
28452        deserializer.deserialize_struct("TeamNamespacesListResult", TEAM_NAMESPACES_LIST_RESULT_FIELDS, StructVisitor)
28453    }
28454}
28455
28456impl ::serde::ser::Serialize for TeamNamespacesListResult {
28457    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
28458        // struct serializer
28459        use serde::ser::SerializeStruct;
28460        let mut s = serializer.serialize_struct("TeamNamespacesListResult", 3)?;
28461        self.internal_serialize::<S>(&mut s)?;
28462        s.end()
28463    }
28464}
28465
28466#[derive(Debug, Clone, PartialEq, Eq)]
28467#[non_exhaustive] // variants may be added in the future
28468pub enum TeamReportFailureReason {
28469    /// We couldn't create the report, but we think this was a fluke. Everything should work if you
28470    /// try it again.
28471    TemporaryError,
28472    /// Too many other reports are being created right now. Try creating this report again once the
28473    /// others finish.
28474    ManyReportsAtOnce,
28475    /// We couldn't create the report. Try creating the report again with less data.
28476    TooMuchData,
28477    /// Catch-all used for unrecognized values returned from the server. Encountering this value
28478    /// typically indicates that this SDK version is out of date.
28479    Other,
28480}
28481
28482impl<'de> ::serde::de::Deserialize<'de> for TeamReportFailureReason {
28483    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
28484        // union deserializer
28485        use serde::de::{self, MapAccess, Visitor};
28486        struct EnumVisitor;
28487        impl<'de> Visitor<'de> for EnumVisitor {
28488            type Value = TeamReportFailureReason;
28489            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
28490                f.write_str("a TeamReportFailureReason structure")
28491            }
28492            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
28493                let tag: &str = match map.next_key()? {
28494                    Some(".tag") => map.next_value()?,
28495                    _ => return Err(de::Error::missing_field(".tag"))
28496                };
28497                let value = match tag {
28498                    "temporary_error" => TeamReportFailureReason::TemporaryError,
28499                    "many_reports_at_once" => TeamReportFailureReason::ManyReportsAtOnce,
28500                    "too_much_data" => TeamReportFailureReason::TooMuchData,
28501                    _ => TeamReportFailureReason::Other,
28502                };
28503                crate::eat_json_fields(&mut map)?;
28504                Ok(value)
28505            }
28506        }
28507        const VARIANTS: &[&str] = &["temporary_error",
28508                                    "many_reports_at_once",
28509                                    "too_much_data",
28510                                    "other"];
28511        deserializer.deserialize_struct("TeamReportFailureReason", VARIANTS, EnumVisitor)
28512    }
28513}
28514
28515impl ::serde::ser::Serialize for TeamReportFailureReason {
28516    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
28517        // union serializer
28518        use serde::ser::SerializeStruct;
28519        match self {
28520            TeamReportFailureReason::TemporaryError => {
28521                // unit
28522                let mut s = serializer.serialize_struct("TeamReportFailureReason", 1)?;
28523                s.serialize_field(".tag", "temporary_error")?;
28524                s.end()
28525            }
28526            TeamReportFailureReason::ManyReportsAtOnce => {
28527                // unit
28528                let mut s = serializer.serialize_struct("TeamReportFailureReason", 1)?;
28529                s.serialize_field(".tag", "many_reports_at_once")?;
28530                s.end()
28531            }
28532            TeamReportFailureReason::TooMuchData => {
28533                // unit
28534                let mut s = serializer.serialize_struct("TeamReportFailureReason", 1)?;
28535                s.serialize_field(".tag", "too_much_data")?;
28536                s.end()
28537            }
28538            TeamReportFailureReason::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
28539        }
28540    }
28541}
28542
28543/// Error returned by
28544/// [`token_get_authenticated_admin()`](crate::team::token_get_authenticated_admin).
28545#[derive(Debug, Clone, PartialEq, Eq)]
28546#[non_exhaustive] // variants may be added in the future
28547pub enum TokenGetAuthenticatedAdminError {
28548    /// The current token is not associated with a team admin, because mappings were not recorded
28549    /// when the token was created. Consider re-authorizing a new access token to record its
28550    /// authenticating admin.
28551    MappingNotFound,
28552    /// Either the team admin that authorized this token is no longer an active member of the team
28553    /// or no longer a team admin.
28554    AdminNotActive,
28555    /// Catch-all used for unrecognized values returned from the server. Encountering this value
28556    /// typically indicates that this SDK version is out of date.
28557    Other,
28558}
28559
28560impl<'de> ::serde::de::Deserialize<'de> for TokenGetAuthenticatedAdminError {
28561    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
28562        // union deserializer
28563        use serde::de::{self, MapAccess, Visitor};
28564        struct EnumVisitor;
28565        impl<'de> Visitor<'de> for EnumVisitor {
28566            type Value = TokenGetAuthenticatedAdminError;
28567            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
28568                f.write_str("a TokenGetAuthenticatedAdminError structure")
28569            }
28570            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
28571                let tag: &str = match map.next_key()? {
28572                    Some(".tag") => map.next_value()?,
28573                    _ => return Err(de::Error::missing_field(".tag"))
28574                };
28575                let value = match tag {
28576                    "mapping_not_found" => TokenGetAuthenticatedAdminError::MappingNotFound,
28577                    "admin_not_active" => TokenGetAuthenticatedAdminError::AdminNotActive,
28578                    _ => TokenGetAuthenticatedAdminError::Other,
28579                };
28580                crate::eat_json_fields(&mut map)?;
28581                Ok(value)
28582            }
28583        }
28584        const VARIANTS: &[&str] = &["mapping_not_found",
28585                                    "admin_not_active",
28586                                    "other"];
28587        deserializer.deserialize_struct("TokenGetAuthenticatedAdminError", VARIANTS, EnumVisitor)
28588    }
28589}
28590
28591impl ::serde::ser::Serialize for TokenGetAuthenticatedAdminError {
28592    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
28593        // union serializer
28594        use serde::ser::SerializeStruct;
28595        match self {
28596            TokenGetAuthenticatedAdminError::MappingNotFound => {
28597                // unit
28598                let mut s = serializer.serialize_struct("TokenGetAuthenticatedAdminError", 1)?;
28599                s.serialize_field(".tag", "mapping_not_found")?;
28600                s.end()
28601            }
28602            TokenGetAuthenticatedAdminError::AdminNotActive => {
28603                // unit
28604                let mut s = serializer.serialize_struct("TokenGetAuthenticatedAdminError", 1)?;
28605                s.serialize_field(".tag", "admin_not_active")?;
28606                s.end()
28607            }
28608            TokenGetAuthenticatedAdminError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
28609        }
28610    }
28611}
28612
28613impl ::std::error::Error for TokenGetAuthenticatedAdminError {
28614}
28615
28616impl ::std::fmt::Display for TokenGetAuthenticatedAdminError {
28617    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
28618        match self {
28619            TokenGetAuthenticatedAdminError::MappingNotFound => f.write_str("The current token is not associated with a team admin, because mappings were not recorded when the token was created. Consider re-authorizing a new access token to record its authenticating admin."),
28620            TokenGetAuthenticatedAdminError::AdminNotActive => f.write_str("Either the team admin that authorized this token is no longer an active member of the team or no longer a team admin."),
28621            _ => write!(f, "{:?}", *self),
28622        }
28623    }
28624}
28625
28626/// Results for [`token_get_authenticated_admin()`](crate::team::token_get_authenticated_admin).
28627#[derive(Debug, Clone, PartialEq, Eq)]
28628#[non_exhaustive] // structs may have more fields added in the future.
28629pub struct TokenGetAuthenticatedAdminResult {
28630    /// The admin who authorized the token.
28631    pub admin_profile: TeamMemberProfile,
28632}
28633
28634impl TokenGetAuthenticatedAdminResult {
28635    pub fn new(admin_profile: TeamMemberProfile) -> Self {
28636        TokenGetAuthenticatedAdminResult {
28637            admin_profile,
28638        }
28639    }
28640}
28641
28642const TOKEN_GET_AUTHENTICATED_ADMIN_RESULT_FIELDS: &[&str] = &["admin_profile"];
28643impl TokenGetAuthenticatedAdminResult {
28644    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
28645        map: V,
28646    ) -> Result<TokenGetAuthenticatedAdminResult, V::Error> {
28647        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
28648    }
28649
28650    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
28651        mut map: V,
28652        optional: bool,
28653    ) -> Result<Option<TokenGetAuthenticatedAdminResult>, V::Error> {
28654        let mut field_admin_profile = None;
28655        let mut nothing = true;
28656        while let Some(key) = map.next_key::<&str>()? {
28657            nothing = false;
28658            match key {
28659                "admin_profile" => {
28660                    if field_admin_profile.is_some() {
28661                        return Err(::serde::de::Error::duplicate_field("admin_profile"));
28662                    }
28663                    field_admin_profile = Some(map.next_value()?);
28664                }
28665                _ => {
28666                    // unknown field allowed and ignored
28667                    map.next_value::<::serde_json::Value>()?;
28668                }
28669            }
28670        }
28671        if optional && nothing {
28672            return Ok(None);
28673        }
28674        let result = TokenGetAuthenticatedAdminResult {
28675            admin_profile: field_admin_profile.ok_or_else(|| ::serde::de::Error::missing_field("admin_profile"))?,
28676        };
28677        Ok(Some(result))
28678    }
28679
28680    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
28681        &self,
28682        s: &mut S::SerializeStruct,
28683    ) -> Result<(), S::Error> {
28684        use serde::ser::SerializeStruct;
28685        s.serialize_field("admin_profile", &self.admin_profile)?;
28686        Ok(())
28687    }
28688}
28689
28690impl<'de> ::serde::de::Deserialize<'de> for TokenGetAuthenticatedAdminResult {
28691    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
28692        // struct deserializer
28693        use serde::de::{MapAccess, Visitor};
28694        struct StructVisitor;
28695        impl<'de> Visitor<'de> for StructVisitor {
28696            type Value = TokenGetAuthenticatedAdminResult;
28697            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
28698                f.write_str("a TokenGetAuthenticatedAdminResult struct")
28699            }
28700            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
28701                TokenGetAuthenticatedAdminResult::internal_deserialize(map)
28702            }
28703        }
28704        deserializer.deserialize_struct("TokenGetAuthenticatedAdminResult", TOKEN_GET_AUTHENTICATED_ADMIN_RESULT_FIELDS, StructVisitor)
28705    }
28706}
28707
28708impl ::serde::ser::Serialize for TokenGetAuthenticatedAdminResult {
28709    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
28710        // struct serializer
28711        use serde::ser::SerializeStruct;
28712        let mut s = serializer.serialize_struct("TokenGetAuthenticatedAdminResult", 1)?;
28713        self.internal_serialize::<S>(&mut s)?;
28714        s.end()
28715    }
28716}
28717
28718/// The value for [`Feature::UploadApiRateLimit`].
28719#[derive(Debug, Clone, PartialEq, Eq)]
28720#[non_exhaustive] // variants may be added in the future
28721pub enum UploadApiRateLimitValue {
28722    /// This team has unlimited upload API quota. So far both server version account and legacy
28723    /// account type have unlimited monthly upload api quota.
28724    Unlimited,
28725    /// The number of upload API calls allowed per month.
28726    Limit(u32),
28727    /// Catch-all used for unrecognized values returned from the server. Encountering this value
28728    /// typically indicates that this SDK version is out of date.
28729    Other,
28730}
28731
28732impl<'de> ::serde::de::Deserialize<'de> for UploadApiRateLimitValue {
28733    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
28734        // union deserializer
28735        use serde::de::{self, MapAccess, Visitor};
28736        struct EnumVisitor;
28737        impl<'de> Visitor<'de> for EnumVisitor {
28738            type Value = UploadApiRateLimitValue;
28739            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
28740                f.write_str("a UploadApiRateLimitValue structure")
28741            }
28742            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
28743                let tag: &str = match map.next_key()? {
28744                    Some(".tag") => map.next_value()?,
28745                    _ => return Err(de::Error::missing_field(".tag"))
28746                };
28747                let value = match tag {
28748                    "unlimited" => UploadApiRateLimitValue::Unlimited,
28749                    "limit" => {
28750                        match map.next_key()? {
28751                            Some("limit") => UploadApiRateLimitValue::Limit(map.next_value()?),
28752                            None => return Err(de::Error::missing_field("limit")),
28753                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
28754                        }
28755                    }
28756                    _ => UploadApiRateLimitValue::Other,
28757                };
28758                crate::eat_json_fields(&mut map)?;
28759                Ok(value)
28760            }
28761        }
28762        const VARIANTS: &[&str] = &["unlimited",
28763                                    "limit",
28764                                    "other"];
28765        deserializer.deserialize_struct("UploadApiRateLimitValue", VARIANTS, EnumVisitor)
28766    }
28767}
28768
28769impl ::serde::ser::Serialize for UploadApiRateLimitValue {
28770    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
28771        // union serializer
28772        use serde::ser::SerializeStruct;
28773        match self {
28774            UploadApiRateLimitValue::Unlimited => {
28775                // unit
28776                let mut s = serializer.serialize_struct("UploadApiRateLimitValue", 1)?;
28777                s.serialize_field(".tag", "unlimited")?;
28778                s.end()
28779            }
28780            UploadApiRateLimitValue::Limit(x) => {
28781                // primitive
28782                let mut s = serializer.serialize_struct("UploadApiRateLimitValue", 2)?;
28783                s.serialize_field(".tag", "limit")?;
28784                s.serialize_field("limit", x)?;
28785                s.end()
28786            }
28787            UploadApiRateLimitValue::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
28788        }
28789    }
28790}
28791
28792/// Result of trying to add secondary emails to a user. 'success' is the only value indicating that
28793/// a user was successfully retrieved for adding secondary emails. The other values explain the type
28794/// of error that occurred, and include the user for which the error occurred.
28795#[derive(Debug, Clone, PartialEq, Eq)]
28796#[non_exhaustive] // variants may be added in the future
28797pub enum UserAddResult {
28798    /// Describes a user and the results for each attempt to add a secondary email.
28799    Success(UserSecondaryEmailsResult),
28800    /// Specified user is not a valid target for adding secondary emails.
28801    InvalidUser(UserSelectorArg),
28802    /// Secondary emails can only be added to verified users.
28803    Unverified(UserSelectorArg),
28804    /// Secondary emails cannot be added to placeholder users.
28805    PlaceholderUser(UserSelectorArg),
28806    /// Catch-all used for unrecognized values returned from the server. Encountering this value
28807    /// typically indicates that this SDK version is out of date.
28808    Other,
28809}
28810
28811impl<'de> ::serde::de::Deserialize<'de> for UserAddResult {
28812    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
28813        // union deserializer
28814        use serde::de::{self, MapAccess, Visitor};
28815        struct EnumVisitor;
28816        impl<'de> Visitor<'de> for EnumVisitor {
28817            type Value = UserAddResult;
28818            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
28819                f.write_str("a UserAddResult structure")
28820            }
28821            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
28822                let tag: &str = match map.next_key()? {
28823                    Some(".tag") => map.next_value()?,
28824                    _ => return Err(de::Error::missing_field(".tag"))
28825                };
28826                let value = match tag {
28827                    "success" => UserAddResult::Success(UserSecondaryEmailsResult::internal_deserialize(&mut map)?),
28828                    "invalid_user" => {
28829                        match map.next_key()? {
28830                            Some("invalid_user") => UserAddResult::InvalidUser(map.next_value()?),
28831                            None => return Err(de::Error::missing_field("invalid_user")),
28832                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
28833                        }
28834                    }
28835                    "unverified" => {
28836                        match map.next_key()? {
28837                            Some("unverified") => UserAddResult::Unverified(map.next_value()?),
28838                            None => return Err(de::Error::missing_field("unverified")),
28839                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
28840                        }
28841                    }
28842                    "placeholder_user" => {
28843                        match map.next_key()? {
28844                            Some("placeholder_user") => UserAddResult::PlaceholderUser(map.next_value()?),
28845                            None => return Err(de::Error::missing_field("placeholder_user")),
28846                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
28847                        }
28848                    }
28849                    _ => UserAddResult::Other,
28850                };
28851                crate::eat_json_fields(&mut map)?;
28852                Ok(value)
28853            }
28854        }
28855        const VARIANTS: &[&str] = &["success",
28856                                    "invalid_user",
28857                                    "unverified",
28858                                    "placeholder_user",
28859                                    "other"];
28860        deserializer.deserialize_struct("UserAddResult", VARIANTS, EnumVisitor)
28861    }
28862}
28863
28864impl ::serde::ser::Serialize for UserAddResult {
28865    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
28866        // union serializer
28867        use serde::ser::SerializeStruct;
28868        match self {
28869            UserAddResult::Success(x) => {
28870                // struct
28871                let mut s = serializer.serialize_struct("UserAddResult", 3)?;
28872                s.serialize_field(".tag", "success")?;
28873                x.internal_serialize::<S>(&mut s)?;
28874                s.end()
28875            }
28876            UserAddResult::InvalidUser(x) => {
28877                // union or polymporphic struct
28878                let mut s = serializer.serialize_struct("UserAddResult", 2)?;
28879                s.serialize_field(".tag", "invalid_user")?;
28880                s.serialize_field("invalid_user", x)?;
28881                s.end()
28882            }
28883            UserAddResult::Unverified(x) => {
28884                // union or polymporphic struct
28885                let mut s = serializer.serialize_struct("UserAddResult", 2)?;
28886                s.serialize_field(".tag", "unverified")?;
28887                s.serialize_field("unverified", x)?;
28888                s.end()
28889            }
28890            UserAddResult::PlaceholderUser(x) => {
28891                // union or polymporphic struct
28892                let mut s = serializer.serialize_struct("UserAddResult", 2)?;
28893                s.serialize_field(".tag", "placeholder_user")?;
28894                s.serialize_field("placeholder_user", x)?;
28895                s.end()
28896            }
28897            UserAddResult::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
28898        }
28899    }
28900}
28901
28902/// User and their required custom quota in GB (1 TB = 1024 GB).
28903#[derive(Debug, Clone, PartialEq, Eq)]
28904#[non_exhaustive] // structs may have more fields added in the future.
28905pub struct UserCustomQuotaArg {
28906    pub user: UserSelectorArg,
28907    pub quota_gb: UserQuota,
28908}
28909
28910impl UserCustomQuotaArg {
28911    pub fn new(user: UserSelectorArg, quota_gb: UserQuota) -> Self {
28912        UserCustomQuotaArg {
28913            user,
28914            quota_gb,
28915        }
28916    }
28917}
28918
28919const USER_CUSTOM_QUOTA_ARG_FIELDS: &[&str] = &["user",
28920                                                "quota_gb"];
28921impl UserCustomQuotaArg {
28922    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
28923        map: V,
28924    ) -> Result<UserCustomQuotaArg, V::Error> {
28925        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
28926    }
28927
28928    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
28929        mut map: V,
28930        optional: bool,
28931    ) -> Result<Option<UserCustomQuotaArg>, V::Error> {
28932        let mut field_user = None;
28933        let mut field_quota_gb = None;
28934        let mut nothing = true;
28935        while let Some(key) = map.next_key::<&str>()? {
28936            nothing = false;
28937            match key {
28938                "user" => {
28939                    if field_user.is_some() {
28940                        return Err(::serde::de::Error::duplicate_field("user"));
28941                    }
28942                    field_user = Some(map.next_value()?);
28943                }
28944                "quota_gb" => {
28945                    if field_quota_gb.is_some() {
28946                        return Err(::serde::de::Error::duplicate_field("quota_gb"));
28947                    }
28948                    field_quota_gb = Some(map.next_value()?);
28949                }
28950                _ => {
28951                    // unknown field allowed and ignored
28952                    map.next_value::<::serde_json::Value>()?;
28953                }
28954            }
28955        }
28956        if optional && nothing {
28957            return Ok(None);
28958        }
28959        let result = UserCustomQuotaArg {
28960            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
28961            quota_gb: field_quota_gb.ok_or_else(|| ::serde::de::Error::missing_field("quota_gb"))?,
28962        };
28963        Ok(Some(result))
28964    }
28965
28966    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
28967        &self,
28968        s: &mut S::SerializeStruct,
28969    ) -> Result<(), S::Error> {
28970        use serde::ser::SerializeStruct;
28971        s.serialize_field("user", &self.user)?;
28972        s.serialize_field("quota_gb", &self.quota_gb)?;
28973        Ok(())
28974    }
28975}
28976
28977impl<'de> ::serde::de::Deserialize<'de> for UserCustomQuotaArg {
28978    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
28979        // struct deserializer
28980        use serde::de::{MapAccess, Visitor};
28981        struct StructVisitor;
28982        impl<'de> Visitor<'de> for StructVisitor {
28983            type Value = UserCustomQuotaArg;
28984            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
28985                f.write_str("a UserCustomQuotaArg struct")
28986            }
28987            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
28988                UserCustomQuotaArg::internal_deserialize(map)
28989            }
28990        }
28991        deserializer.deserialize_struct("UserCustomQuotaArg", USER_CUSTOM_QUOTA_ARG_FIELDS, StructVisitor)
28992    }
28993}
28994
28995impl ::serde::ser::Serialize for UserCustomQuotaArg {
28996    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
28997        // struct serializer
28998        use serde::ser::SerializeStruct;
28999        let mut s = serializer.serialize_struct("UserCustomQuotaArg", 2)?;
29000        self.internal_serialize::<S>(&mut s)?;
29001        s.end()
29002    }
29003}
29004
29005/// User and their custom quota in GB (1 TB = 1024 GB).  No quota returns if the user has no custom
29006/// quota set.
29007#[derive(Debug, Clone, PartialEq, Eq)]
29008#[non_exhaustive] // structs may have more fields added in the future.
29009pub struct UserCustomQuotaResult {
29010    pub user: UserSelectorArg,
29011    pub quota_gb: Option<UserQuota>,
29012}
29013
29014impl UserCustomQuotaResult {
29015    pub fn new(user: UserSelectorArg) -> Self {
29016        UserCustomQuotaResult {
29017            user,
29018            quota_gb: None,
29019        }
29020    }
29021
29022    pub fn with_quota_gb(mut self, value: UserQuota) -> Self {
29023        self.quota_gb = Some(value);
29024        self
29025    }
29026}
29027
29028const USER_CUSTOM_QUOTA_RESULT_FIELDS: &[&str] = &["user",
29029                                                   "quota_gb"];
29030impl UserCustomQuotaResult {
29031    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
29032        map: V,
29033    ) -> Result<UserCustomQuotaResult, V::Error> {
29034        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
29035    }
29036
29037    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
29038        mut map: V,
29039        optional: bool,
29040    ) -> Result<Option<UserCustomQuotaResult>, V::Error> {
29041        let mut field_user = None;
29042        let mut field_quota_gb = None;
29043        let mut nothing = true;
29044        while let Some(key) = map.next_key::<&str>()? {
29045            nothing = false;
29046            match key {
29047                "user" => {
29048                    if field_user.is_some() {
29049                        return Err(::serde::de::Error::duplicate_field("user"));
29050                    }
29051                    field_user = Some(map.next_value()?);
29052                }
29053                "quota_gb" => {
29054                    if field_quota_gb.is_some() {
29055                        return Err(::serde::de::Error::duplicate_field("quota_gb"));
29056                    }
29057                    field_quota_gb = Some(map.next_value()?);
29058                }
29059                _ => {
29060                    // unknown field allowed and ignored
29061                    map.next_value::<::serde_json::Value>()?;
29062                }
29063            }
29064        }
29065        if optional && nothing {
29066            return Ok(None);
29067        }
29068        let result = UserCustomQuotaResult {
29069            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
29070            quota_gb: field_quota_gb.and_then(Option::flatten),
29071        };
29072        Ok(Some(result))
29073    }
29074
29075    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
29076        &self,
29077        s: &mut S::SerializeStruct,
29078    ) -> Result<(), S::Error> {
29079        use serde::ser::SerializeStruct;
29080        s.serialize_field("user", &self.user)?;
29081        if let Some(val) = &self.quota_gb {
29082            s.serialize_field("quota_gb", val)?;
29083        }
29084        Ok(())
29085    }
29086}
29087
29088impl<'de> ::serde::de::Deserialize<'de> for UserCustomQuotaResult {
29089    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
29090        // struct deserializer
29091        use serde::de::{MapAccess, Visitor};
29092        struct StructVisitor;
29093        impl<'de> Visitor<'de> for StructVisitor {
29094            type Value = UserCustomQuotaResult;
29095            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
29096                f.write_str("a UserCustomQuotaResult struct")
29097            }
29098            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
29099                UserCustomQuotaResult::internal_deserialize(map)
29100            }
29101        }
29102        deserializer.deserialize_struct("UserCustomQuotaResult", USER_CUSTOM_QUOTA_RESULT_FIELDS, StructVisitor)
29103    }
29104}
29105
29106impl ::serde::ser::Serialize for UserCustomQuotaResult {
29107    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
29108        // struct serializer
29109        use serde::ser::SerializeStruct;
29110        let mut s = serializer.serialize_struct("UserCustomQuotaResult", 2)?;
29111        self.internal_serialize::<S>(&mut s)?;
29112        s.end()
29113    }
29114}
29115
29116#[derive(Debug, Clone, PartialEq, Eq)]
29117#[non_exhaustive] // structs may have more fields added in the future.
29118pub struct UserDeleteEmailsResult {
29119    pub user: UserSelectorArg,
29120    pub results: Vec<DeleteSecondaryEmailResult>,
29121}
29122
29123impl UserDeleteEmailsResult {
29124    pub fn new(user: UserSelectorArg, results: Vec<DeleteSecondaryEmailResult>) -> Self {
29125        UserDeleteEmailsResult {
29126            user,
29127            results,
29128        }
29129    }
29130}
29131
29132const USER_DELETE_EMAILS_RESULT_FIELDS: &[&str] = &["user",
29133                                                    "results"];
29134impl UserDeleteEmailsResult {
29135    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
29136        map: V,
29137    ) -> Result<UserDeleteEmailsResult, V::Error> {
29138        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
29139    }
29140
29141    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
29142        mut map: V,
29143        optional: bool,
29144    ) -> Result<Option<UserDeleteEmailsResult>, V::Error> {
29145        let mut field_user = None;
29146        let mut field_results = None;
29147        let mut nothing = true;
29148        while let Some(key) = map.next_key::<&str>()? {
29149            nothing = false;
29150            match key {
29151                "user" => {
29152                    if field_user.is_some() {
29153                        return Err(::serde::de::Error::duplicate_field("user"));
29154                    }
29155                    field_user = Some(map.next_value()?);
29156                }
29157                "results" => {
29158                    if field_results.is_some() {
29159                        return Err(::serde::de::Error::duplicate_field("results"));
29160                    }
29161                    field_results = Some(map.next_value()?);
29162                }
29163                _ => {
29164                    // unknown field allowed and ignored
29165                    map.next_value::<::serde_json::Value>()?;
29166                }
29167            }
29168        }
29169        if optional && nothing {
29170            return Ok(None);
29171        }
29172        let result = UserDeleteEmailsResult {
29173            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
29174            results: field_results.ok_or_else(|| ::serde::de::Error::missing_field("results"))?,
29175        };
29176        Ok(Some(result))
29177    }
29178
29179    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
29180        &self,
29181        s: &mut S::SerializeStruct,
29182    ) -> Result<(), S::Error> {
29183        use serde::ser::SerializeStruct;
29184        s.serialize_field("user", &self.user)?;
29185        s.serialize_field("results", &self.results)?;
29186        Ok(())
29187    }
29188}
29189
29190impl<'de> ::serde::de::Deserialize<'de> for UserDeleteEmailsResult {
29191    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
29192        // struct deserializer
29193        use serde::de::{MapAccess, Visitor};
29194        struct StructVisitor;
29195        impl<'de> Visitor<'de> for StructVisitor {
29196            type Value = UserDeleteEmailsResult;
29197            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
29198                f.write_str("a UserDeleteEmailsResult struct")
29199            }
29200            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
29201                UserDeleteEmailsResult::internal_deserialize(map)
29202            }
29203        }
29204        deserializer.deserialize_struct("UserDeleteEmailsResult", USER_DELETE_EMAILS_RESULT_FIELDS, StructVisitor)
29205    }
29206}
29207
29208impl ::serde::ser::Serialize for UserDeleteEmailsResult {
29209    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
29210        // struct serializer
29211        use serde::ser::SerializeStruct;
29212        let mut s = serializer.serialize_struct("UserDeleteEmailsResult", 2)?;
29213        self.internal_serialize::<S>(&mut s)?;
29214        s.end()
29215    }
29216}
29217
29218/// Result of trying to delete a user's secondary emails. 'success' is the only value indicating
29219/// that a user was successfully retrieved for deleting secondary emails. The other values explain
29220/// the type of error that occurred, and include the user for which the error occurred.
29221#[derive(Debug, Clone, PartialEq, Eq)]
29222#[non_exhaustive] // variants may be added in the future
29223pub enum UserDeleteResult {
29224    /// Describes a user and the results for each attempt to delete a secondary email.
29225    Success(UserDeleteEmailsResult),
29226    /// Specified user is not a valid target for deleting secondary emails.
29227    InvalidUser(UserSelectorArg),
29228    /// Catch-all used for unrecognized values returned from the server. Encountering this value
29229    /// typically indicates that this SDK version is out of date.
29230    Other,
29231}
29232
29233impl<'de> ::serde::de::Deserialize<'de> for UserDeleteResult {
29234    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
29235        // union deserializer
29236        use serde::de::{self, MapAccess, Visitor};
29237        struct EnumVisitor;
29238        impl<'de> Visitor<'de> for EnumVisitor {
29239            type Value = UserDeleteResult;
29240            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
29241                f.write_str("a UserDeleteResult structure")
29242            }
29243            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
29244                let tag: &str = match map.next_key()? {
29245                    Some(".tag") => map.next_value()?,
29246                    _ => return Err(de::Error::missing_field(".tag"))
29247                };
29248                let value = match tag {
29249                    "success" => UserDeleteResult::Success(UserDeleteEmailsResult::internal_deserialize(&mut map)?),
29250                    "invalid_user" => {
29251                        match map.next_key()? {
29252                            Some("invalid_user") => UserDeleteResult::InvalidUser(map.next_value()?),
29253                            None => return Err(de::Error::missing_field("invalid_user")),
29254                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
29255                        }
29256                    }
29257                    _ => UserDeleteResult::Other,
29258                };
29259                crate::eat_json_fields(&mut map)?;
29260                Ok(value)
29261            }
29262        }
29263        const VARIANTS: &[&str] = &["success",
29264                                    "invalid_user",
29265                                    "other"];
29266        deserializer.deserialize_struct("UserDeleteResult", VARIANTS, EnumVisitor)
29267    }
29268}
29269
29270impl ::serde::ser::Serialize for UserDeleteResult {
29271    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
29272        // union serializer
29273        use serde::ser::SerializeStruct;
29274        match self {
29275            UserDeleteResult::Success(x) => {
29276                // struct
29277                let mut s = serializer.serialize_struct("UserDeleteResult", 3)?;
29278                s.serialize_field(".tag", "success")?;
29279                x.internal_serialize::<S>(&mut s)?;
29280                s.end()
29281            }
29282            UserDeleteResult::InvalidUser(x) => {
29283                // union or polymporphic struct
29284                let mut s = serializer.serialize_struct("UserDeleteResult", 2)?;
29285                s.serialize_field(".tag", "invalid_user")?;
29286                s.serialize_field("invalid_user", x)?;
29287                s.end()
29288            }
29289            UserDeleteResult::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
29290        }
29291    }
29292}
29293
29294#[derive(Debug, Clone, PartialEq, Eq)]
29295#[non_exhaustive] // structs may have more fields added in the future.
29296pub struct UserResendEmailsResult {
29297    pub user: UserSelectorArg,
29298    pub results: Vec<ResendSecondaryEmailResult>,
29299}
29300
29301impl UserResendEmailsResult {
29302    pub fn new(user: UserSelectorArg, results: Vec<ResendSecondaryEmailResult>) -> Self {
29303        UserResendEmailsResult {
29304            user,
29305            results,
29306        }
29307    }
29308}
29309
29310const USER_RESEND_EMAILS_RESULT_FIELDS: &[&str] = &["user",
29311                                                    "results"];
29312impl UserResendEmailsResult {
29313    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
29314        map: V,
29315    ) -> Result<UserResendEmailsResult, V::Error> {
29316        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
29317    }
29318
29319    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
29320        mut map: V,
29321        optional: bool,
29322    ) -> Result<Option<UserResendEmailsResult>, V::Error> {
29323        let mut field_user = None;
29324        let mut field_results = None;
29325        let mut nothing = true;
29326        while let Some(key) = map.next_key::<&str>()? {
29327            nothing = false;
29328            match key {
29329                "user" => {
29330                    if field_user.is_some() {
29331                        return Err(::serde::de::Error::duplicate_field("user"));
29332                    }
29333                    field_user = Some(map.next_value()?);
29334                }
29335                "results" => {
29336                    if field_results.is_some() {
29337                        return Err(::serde::de::Error::duplicate_field("results"));
29338                    }
29339                    field_results = Some(map.next_value()?);
29340                }
29341                _ => {
29342                    // unknown field allowed and ignored
29343                    map.next_value::<::serde_json::Value>()?;
29344                }
29345            }
29346        }
29347        if optional && nothing {
29348            return Ok(None);
29349        }
29350        let result = UserResendEmailsResult {
29351            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
29352            results: field_results.ok_or_else(|| ::serde::de::Error::missing_field("results"))?,
29353        };
29354        Ok(Some(result))
29355    }
29356
29357    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
29358        &self,
29359        s: &mut S::SerializeStruct,
29360    ) -> Result<(), S::Error> {
29361        use serde::ser::SerializeStruct;
29362        s.serialize_field("user", &self.user)?;
29363        s.serialize_field("results", &self.results)?;
29364        Ok(())
29365    }
29366}
29367
29368impl<'de> ::serde::de::Deserialize<'de> for UserResendEmailsResult {
29369    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
29370        // struct deserializer
29371        use serde::de::{MapAccess, Visitor};
29372        struct StructVisitor;
29373        impl<'de> Visitor<'de> for StructVisitor {
29374            type Value = UserResendEmailsResult;
29375            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
29376                f.write_str("a UserResendEmailsResult struct")
29377            }
29378            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
29379                UserResendEmailsResult::internal_deserialize(map)
29380            }
29381        }
29382        deserializer.deserialize_struct("UserResendEmailsResult", USER_RESEND_EMAILS_RESULT_FIELDS, StructVisitor)
29383    }
29384}
29385
29386impl ::serde::ser::Serialize for UserResendEmailsResult {
29387    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
29388        // struct serializer
29389        use serde::ser::SerializeStruct;
29390        let mut s = serializer.serialize_struct("UserResendEmailsResult", 2)?;
29391        self.internal_serialize::<S>(&mut s)?;
29392        s.end()
29393    }
29394}
29395
29396/// Result of trying to resend verification emails to a user. 'success' is the only value indicating
29397/// that a user was successfully retrieved for sending verification emails. The other values explain
29398/// the type of error that occurred, and include the user for which the error occurred.
29399#[derive(Debug, Clone, PartialEq, Eq)]
29400#[non_exhaustive] // variants may be added in the future
29401pub enum UserResendResult {
29402    /// Describes a user and the results for each attempt to resend verification emails.
29403    Success(UserResendEmailsResult),
29404    /// Specified user is not a valid target for resending verification emails.
29405    InvalidUser(UserSelectorArg),
29406    /// Catch-all used for unrecognized values returned from the server. Encountering this value
29407    /// typically indicates that this SDK version is out of date.
29408    Other,
29409}
29410
29411impl<'de> ::serde::de::Deserialize<'de> for UserResendResult {
29412    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
29413        // union deserializer
29414        use serde::de::{self, MapAccess, Visitor};
29415        struct EnumVisitor;
29416        impl<'de> Visitor<'de> for EnumVisitor {
29417            type Value = UserResendResult;
29418            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
29419                f.write_str("a UserResendResult structure")
29420            }
29421            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
29422                let tag: &str = match map.next_key()? {
29423                    Some(".tag") => map.next_value()?,
29424                    _ => return Err(de::Error::missing_field(".tag"))
29425                };
29426                let value = match tag {
29427                    "success" => UserResendResult::Success(UserResendEmailsResult::internal_deserialize(&mut map)?),
29428                    "invalid_user" => {
29429                        match map.next_key()? {
29430                            Some("invalid_user") => UserResendResult::InvalidUser(map.next_value()?),
29431                            None => return Err(de::Error::missing_field("invalid_user")),
29432                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
29433                        }
29434                    }
29435                    _ => UserResendResult::Other,
29436                };
29437                crate::eat_json_fields(&mut map)?;
29438                Ok(value)
29439            }
29440        }
29441        const VARIANTS: &[&str] = &["success",
29442                                    "invalid_user",
29443                                    "other"];
29444        deserializer.deserialize_struct("UserResendResult", VARIANTS, EnumVisitor)
29445    }
29446}
29447
29448impl ::serde::ser::Serialize for UserResendResult {
29449    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
29450        // union serializer
29451        use serde::ser::SerializeStruct;
29452        match self {
29453            UserResendResult::Success(x) => {
29454                // struct
29455                let mut s = serializer.serialize_struct("UserResendResult", 3)?;
29456                s.serialize_field(".tag", "success")?;
29457                x.internal_serialize::<S>(&mut s)?;
29458                s.end()
29459            }
29460            UserResendResult::InvalidUser(x) => {
29461                // union or polymporphic struct
29462                let mut s = serializer.serialize_struct("UserResendResult", 2)?;
29463                s.serialize_field(".tag", "invalid_user")?;
29464                s.serialize_field("invalid_user", x)?;
29465                s.end()
29466            }
29467            UserResendResult::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
29468        }
29469    }
29470}
29471
29472/// User and a list of secondary emails.
29473#[derive(Debug, Clone, PartialEq, Eq)]
29474#[non_exhaustive] // structs may have more fields added in the future.
29475pub struct UserSecondaryEmailsArg {
29476    pub user: UserSelectorArg,
29477    pub secondary_emails: Vec<crate::types::common::EmailAddress>,
29478}
29479
29480impl UserSecondaryEmailsArg {
29481    pub fn new(
29482        user: UserSelectorArg,
29483        secondary_emails: Vec<crate::types::common::EmailAddress>,
29484    ) -> Self {
29485        UserSecondaryEmailsArg {
29486            user,
29487            secondary_emails,
29488        }
29489    }
29490}
29491
29492const USER_SECONDARY_EMAILS_ARG_FIELDS: &[&str] = &["user",
29493                                                    "secondary_emails"];
29494impl UserSecondaryEmailsArg {
29495    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
29496        map: V,
29497    ) -> Result<UserSecondaryEmailsArg, V::Error> {
29498        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
29499    }
29500
29501    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
29502        mut map: V,
29503        optional: bool,
29504    ) -> Result<Option<UserSecondaryEmailsArg>, V::Error> {
29505        let mut field_user = None;
29506        let mut field_secondary_emails = None;
29507        let mut nothing = true;
29508        while let Some(key) = map.next_key::<&str>()? {
29509            nothing = false;
29510            match key {
29511                "user" => {
29512                    if field_user.is_some() {
29513                        return Err(::serde::de::Error::duplicate_field("user"));
29514                    }
29515                    field_user = Some(map.next_value()?);
29516                }
29517                "secondary_emails" => {
29518                    if field_secondary_emails.is_some() {
29519                        return Err(::serde::de::Error::duplicate_field("secondary_emails"));
29520                    }
29521                    field_secondary_emails = Some(map.next_value()?);
29522                }
29523                _ => {
29524                    // unknown field allowed and ignored
29525                    map.next_value::<::serde_json::Value>()?;
29526                }
29527            }
29528        }
29529        if optional && nothing {
29530            return Ok(None);
29531        }
29532        let result = UserSecondaryEmailsArg {
29533            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
29534            secondary_emails: field_secondary_emails.ok_or_else(|| ::serde::de::Error::missing_field("secondary_emails"))?,
29535        };
29536        Ok(Some(result))
29537    }
29538
29539    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
29540        &self,
29541        s: &mut S::SerializeStruct,
29542    ) -> Result<(), S::Error> {
29543        use serde::ser::SerializeStruct;
29544        s.serialize_field("user", &self.user)?;
29545        s.serialize_field("secondary_emails", &self.secondary_emails)?;
29546        Ok(())
29547    }
29548}
29549
29550impl<'de> ::serde::de::Deserialize<'de> for UserSecondaryEmailsArg {
29551    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
29552        // struct deserializer
29553        use serde::de::{MapAccess, Visitor};
29554        struct StructVisitor;
29555        impl<'de> Visitor<'de> for StructVisitor {
29556            type Value = UserSecondaryEmailsArg;
29557            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
29558                f.write_str("a UserSecondaryEmailsArg struct")
29559            }
29560            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
29561                UserSecondaryEmailsArg::internal_deserialize(map)
29562            }
29563        }
29564        deserializer.deserialize_struct("UserSecondaryEmailsArg", USER_SECONDARY_EMAILS_ARG_FIELDS, StructVisitor)
29565    }
29566}
29567
29568impl ::serde::ser::Serialize for UserSecondaryEmailsArg {
29569    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
29570        // struct serializer
29571        use serde::ser::SerializeStruct;
29572        let mut s = serializer.serialize_struct("UserSecondaryEmailsArg", 2)?;
29573        self.internal_serialize::<S>(&mut s)?;
29574        s.end()
29575    }
29576}
29577
29578#[derive(Debug, Clone, PartialEq, Eq)]
29579#[non_exhaustive] // structs may have more fields added in the future.
29580pub struct UserSecondaryEmailsResult {
29581    pub user: UserSelectorArg,
29582    pub results: Vec<AddSecondaryEmailResult>,
29583}
29584
29585impl UserSecondaryEmailsResult {
29586    pub fn new(user: UserSelectorArg, results: Vec<AddSecondaryEmailResult>) -> Self {
29587        UserSecondaryEmailsResult {
29588            user,
29589            results,
29590        }
29591    }
29592}
29593
29594const USER_SECONDARY_EMAILS_RESULT_FIELDS: &[&str] = &["user",
29595                                                       "results"];
29596impl UserSecondaryEmailsResult {
29597    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
29598        map: V,
29599    ) -> Result<UserSecondaryEmailsResult, V::Error> {
29600        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
29601    }
29602
29603    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
29604        mut map: V,
29605        optional: bool,
29606    ) -> Result<Option<UserSecondaryEmailsResult>, V::Error> {
29607        let mut field_user = None;
29608        let mut field_results = None;
29609        let mut nothing = true;
29610        while let Some(key) = map.next_key::<&str>()? {
29611            nothing = false;
29612            match key {
29613                "user" => {
29614                    if field_user.is_some() {
29615                        return Err(::serde::de::Error::duplicate_field("user"));
29616                    }
29617                    field_user = Some(map.next_value()?);
29618                }
29619                "results" => {
29620                    if field_results.is_some() {
29621                        return Err(::serde::de::Error::duplicate_field("results"));
29622                    }
29623                    field_results = Some(map.next_value()?);
29624                }
29625                _ => {
29626                    // unknown field allowed and ignored
29627                    map.next_value::<::serde_json::Value>()?;
29628                }
29629            }
29630        }
29631        if optional && nothing {
29632            return Ok(None);
29633        }
29634        let result = UserSecondaryEmailsResult {
29635            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
29636            results: field_results.ok_or_else(|| ::serde::de::Error::missing_field("results"))?,
29637        };
29638        Ok(Some(result))
29639    }
29640
29641    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
29642        &self,
29643        s: &mut S::SerializeStruct,
29644    ) -> Result<(), S::Error> {
29645        use serde::ser::SerializeStruct;
29646        s.serialize_field("user", &self.user)?;
29647        s.serialize_field("results", &self.results)?;
29648        Ok(())
29649    }
29650}
29651
29652impl<'de> ::serde::de::Deserialize<'de> for UserSecondaryEmailsResult {
29653    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
29654        // struct deserializer
29655        use serde::de::{MapAccess, Visitor};
29656        struct StructVisitor;
29657        impl<'de> Visitor<'de> for StructVisitor {
29658            type Value = UserSecondaryEmailsResult;
29659            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
29660                f.write_str("a UserSecondaryEmailsResult struct")
29661            }
29662            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
29663                UserSecondaryEmailsResult::internal_deserialize(map)
29664            }
29665        }
29666        deserializer.deserialize_struct("UserSecondaryEmailsResult", USER_SECONDARY_EMAILS_RESULT_FIELDS, StructVisitor)
29667    }
29668}
29669
29670impl ::serde::ser::Serialize for UserSecondaryEmailsResult {
29671    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
29672        // struct serializer
29673        use serde::ser::SerializeStruct;
29674        let mut s = serializer.serialize_struct("UserSecondaryEmailsResult", 2)?;
29675        self.internal_serialize::<S>(&mut s)?;
29676        s.end()
29677    }
29678}
29679
29680/// Argument for selecting a single user, either by team_member_id, external_id or email.
29681#[derive(Debug, Clone, PartialEq, Eq)]
29682pub enum UserSelectorArg {
29683    TeamMemberId(crate::types::team_common::TeamMemberId),
29684    ExternalId(crate::types::team_common::MemberExternalId),
29685    Email(crate::types::common::EmailAddress),
29686}
29687
29688impl<'de> ::serde::de::Deserialize<'de> for UserSelectorArg {
29689    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
29690        // union deserializer
29691        use serde::de::{self, MapAccess, Visitor};
29692        struct EnumVisitor;
29693        impl<'de> Visitor<'de> for EnumVisitor {
29694            type Value = UserSelectorArg;
29695            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
29696                f.write_str("a UserSelectorArg structure")
29697            }
29698            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
29699                let tag: &str = match map.next_key()? {
29700                    Some(".tag") => map.next_value()?,
29701                    _ => return Err(de::Error::missing_field(".tag"))
29702                };
29703                let value = match tag {
29704                    "team_member_id" => {
29705                        match map.next_key()? {
29706                            Some("team_member_id") => UserSelectorArg::TeamMemberId(map.next_value()?),
29707                            None => return Err(de::Error::missing_field("team_member_id")),
29708                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
29709                        }
29710                    }
29711                    "external_id" => {
29712                        match map.next_key()? {
29713                            Some("external_id") => UserSelectorArg::ExternalId(map.next_value()?),
29714                            None => return Err(de::Error::missing_field("external_id")),
29715                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
29716                        }
29717                    }
29718                    "email" => {
29719                        match map.next_key()? {
29720                            Some("email") => UserSelectorArg::Email(map.next_value()?),
29721                            None => return Err(de::Error::missing_field("email")),
29722                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
29723                        }
29724                    }
29725                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
29726                };
29727                crate::eat_json_fields(&mut map)?;
29728                Ok(value)
29729            }
29730        }
29731        const VARIANTS: &[&str] = &["team_member_id",
29732                                    "external_id",
29733                                    "email"];
29734        deserializer.deserialize_struct("UserSelectorArg", VARIANTS, EnumVisitor)
29735    }
29736}
29737
29738impl ::serde::ser::Serialize for UserSelectorArg {
29739    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
29740        // union serializer
29741        use serde::ser::SerializeStruct;
29742        match self {
29743            UserSelectorArg::TeamMemberId(x) => {
29744                // primitive
29745                let mut s = serializer.serialize_struct("UserSelectorArg", 2)?;
29746                s.serialize_field(".tag", "team_member_id")?;
29747                s.serialize_field("team_member_id", x)?;
29748                s.end()
29749            }
29750            UserSelectorArg::ExternalId(x) => {
29751                // primitive
29752                let mut s = serializer.serialize_struct("UserSelectorArg", 2)?;
29753                s.serialize_field(".tag", "external_id")?;
29754                s.serialize_field("external_id", x)?;
29755                s.end()
29756            }
29757            UserSelectorArg::Email(x) => {
29758                // primitive
29759                let mut s = serializer.serialize_struct("UserSelectorArg", 2)?;
29760                s.serialize_field(".tag", "email")?;
29761                s.serialize_field("email", x)?;
29762                s.end()
29763            }
29764        }
29765    }
29766}
29767
29768/// Error that can be returned whenever a struct derived from [`UserSelectorArg`] is used.
29769#[derive(Debug, Clone, PartialEq, Eq)]
29770pub enum UserSelectorError {
29771    /// No matching user found. The provided team_member_id, email, or external_id does not exist on
29772    /// this team.
29773    UserNotFound,
29774}
29775
29776impl<'de> ::serde::de::Deserialize<'de> for UserSelectorError {
29777    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
29778        // union deserializer
29779        use serde::de::{self, MapAccess, Visitor};
29780        struct EnumVisitor;
29781        impl<'de> Visitor<'de> for EnumVisitor {
29782            type Value = UserSelectorError;
29783            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
29784                f.write_str("a UserSelectorError structure")
29785            }
29786            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
29787                let tag: &str = match map.next_key()? {
29788                    Some(".tag") => map.next_value()?,
29789                    _ => return Err(de::Error::missing_field(".tag"))
29790                };
29791                let value = match tag {
29792                    "user_not_found" => UserSelectorError::UserNotFound,
29793                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
29794                };
29795                crate::eat_json_fields(&mut map)?;
29796                Ok(value)
29797            }
29798        }
29799        const VARIANTS: &[&str] = &["user_not_found"];
29800        deserializer.deserialize_struct("UserSelectorError", VARIANTS, EnumVisitor)
29801    }
29802}
29803
29804impl ::serde::ser::Serialize for UserSelectorError {
29805    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
29806        // union serializer
29807        use serde::ser::SerializeStruct;
29808        match self {
29809            UserSelectorError::UserNotFound => {
29810                // unit
29811                let mut s = serializer.serialize_struct("UserSelectorError", 1)?;
29812                s.serialize_field(".tag", "user_not_found")?;
29813                s.end()
29814            }
29815        }
29816    }
29817}
29818
29819impl ::std::error::Error for UserSelectorError {
29820}
29821
29822impl ::std::fmt::Display for UserSelectorError {
29823    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
29824        match self {
29825            UserSelectorError::UserNotFound => f.write_str("No matching user found. The provided team_member_id, email, or external_id does not exist on this team."),
29826        }
29827    }
29828}
29829
29830/// Argument for selecting a list of users, either by team_member_ids, external_ids or emails.
29831#[derive(Debug, Clone, PartialEq, Eq)]
29832pub enum UsersSelectorArg {
29833    /// List of member IDs.
29834    TeamMemberIds(Vec<crate::types::team_common::TeamMemberId>),
29835    /// List of external user IDs.
29836    ExternalIds(Vec<crate::types::team_common::MemberExternalId>),
29837    /// List of email addresses.
29838    Emails(Vec<crate::types::common::EmailAddress>),
29839}
29840
29841impl<'de> ::serde::de::Deserialize<'de> for UsersSelectorArg {
29842    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
29843        // union deserializer
29844        use serde::de::{self, MapAccess, Visitor};
29845        struct EnumVisitor;
29846        impl<'de> Visitor<'de> for EnumVisitor {
29847            type Value = UsersSelectorArg;
29848            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
29849                f.write_str("a UsersSelectorArg structure")
29850            }
29851            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
29852                let tag: &str = match map.next_key()? {
29853                    Some(".tag") => map.next_value()?,
29854                    _ => return Err(de::Error::missing_field(".tag"))
29855                };
29856                let value = match tag {
29857                    "team_member_ids" => {
29858                        match map.next_key()? {
29859                            Some("team_member_ids") => UsersSelectorArg::TeamMemberIds(map.next_value()?),
29860                            None => return Err(de::Error::missing_field("team_member_ids")),
29861                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
29862                        }
29863                    }
29864                    "external_ids" => {
29865                        match map.next_key()? {
29866                            Some("external_ids") => UsersSelectorArg::ExternalIds(map.next_value()?),
29867                            None => return Err(de::Error::missing_field("external_ids")),
29868                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
29869                        }
29870                    }
29871                    "emails" => {
29872                        match map.next_key()? {
29873                            Some("emails") => UsersSelectorArg::Emails(map.next_value()?),
29874                            None => return Err(de::Error::missing_field("emails")),
29875                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
29876                        }
29877                    }
29878                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
29879                };
29880                crate::eat_json_fields(&mut map)?;
29881                Ok(value)
29882            }
29883        }
29884        const VARIANTS: &[&str] = &["team_member_ids",
29885                                    "external_ids",
29886                                    "emails"];
29887        deserializer.deserialize_struct("UsersSelectorArg", VARIANTS, EnumVisitor)
29888    }
29889}
29890
29891impl ::serde::ser::Serialize for UsersSelectorArg {
29892    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
29893        // union serializer
29894        use serde::ser::SerializeStruct;
29895        match self {
29896            UsersSelectorArg::TeamMemberIds(x) => {
29897                // primitive
29898                let mut s = serializer.serialize_struct("UsersSelectorArg", 2)?;
29899                s.serialize_field(".tag", "team_member_ids")?;
29900                s.serialize_field("team_member_ids", x)?;
29901                s.end()
29902            }
29903            UsersSelectorArg::ExternalIds(x) => {
29904                // primitive
29905                let mut s = serializer.serialize_struct("UsersSelectorArg", 2)?;
29906                s.serialize_field(".tag", "external_ids")?;
29907                s.serialize_field("external_ids", x)?;
29908                s.end()
29909            }
29910            UsersSelectorArg::Emails(x) => {
29911                // primitive
29912                let mut s = serializer.serialize_struct("UsersSelectorArg", 2)?;
29913                s.serialize_field(".tag", "emails")?;
29914                s.serialize_field("emails", x)?;
29915                s.end()
29916            }
29917        }
29918    }
29919}
29920