Skip to main content

dropbox_sdk/generated/types/
paper.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    clippy::doc_lazy_continuation,
10)]
11
12//! This namespace contains endpoints and data types for managing docs and folders in Dropbox Paper.
13//! New Paper users will see docs they create in their filesystem as '.paper' files alongside their
14//! other Dropbox content. The /paper endpoints are being deprecated and you'll need to use /files
15//! and /sharing endpoints to interact with their Paper content. Read more in the [Paper Migration
16//! Guide](https://www.dropbox.com/lp/developers/reference/paper-migration-guide).
17
18pub type PaperDocId = String;
19
20#[derive(Debug, Clone, PartialEq, Eq)]
21#[non_exhaustive] // structs may have more fields added in the future.
22pub struct AddMember {
23    /// User which should be added to the Paper doc. Specify only email address or Dropbox account
24    /// ID.
25    pub member: crate::types::sharing::MemberSelector,
26    /// Permission for the user.
27    pub permission_level: PaperDocPermissionLevel,
28}
29
30impl AddMember {
31    pub fn new(member: crate::types::sharing::MemberSelector) -> Self {
32        AddMember {
33            member,
34            permission_level: PaperDocPermissionLevel::Edit,
35        }
36    }
37
38    pub fn with_permission_level(mut self, value: PaperDocPermissionLevel) -> Self {
39        self.permission_level = value;
40        self
41    }
42}
43
44const ADD_MEMBER_FIELDS: &[&str] = &["member",
45                                     "permission_level"];
46impl AddMember {
47    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
48        map: V,
49    ) -> Result<AddMember, V::Error> {
50        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
51    }
52
53    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
54        mut map: V,
55        optional: bool,
56    ) -> Result<Option<AddMember>, V::Error> {
57        let mut field_member = None;
58        let mut field_permission_level = None;
59        let mut nothing = true;
60        while let Some(key) = map.next_key::<&str>()? {
61            nothing = false;
62            match key {
63                "member" => {
64                    if field_member.is_some() {
65                        return Err(::serde::de::Error::duplicate_field("member"));
66                    }
67                    field_member = Some(map.next_value()?);
68                }
69                "permission_level" => {
70                    if field_permission_level.is_some() {
71                        return Err(::serde::de::Error::duplicate_field("permission_level"));
72                    }
73                    field_permission_level = Some(map.next_value()?);
74                }
75                _ => {
76                    // unknown field allowed and ignored
77                    map.next_value::<::serde_json::Value>()?;
78                }
79            }
80        }
81        if optional && nothing {
82            return Ok(None);
83        }
84        let result = AddMember {
85            member: field_member.ok_or_else(|| ::serde::de::Error::missing_field("member"))?,
86            permission_level: field_permission_level.unwrap_or(PaperDocPermissionLevel::Edit),
87        };
88        Ok(Some(result))
89    }
90
91    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
92        &self,
93        s: &mut S::SerializeStruct,
94    ) -> Result<(), S::Error> {
95        use serde::ser::SerializeStruct;
96        s.serialize_field("member", &self.member)?;
97        if self.permission_level != PaperDocPermissionLevel::Edit {
98            s.serialize_field("permission_level", &self.permission_level)?;
99        }
100        Ok(())
101    }
102}
103
104impl<'de> ::serde::de::Deserialize<'de> for AddMember {
105    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
106        // struct deserializer
107        use serde::de::{MapAccess, Visitor};
108        struct StructVisitor;
109        impl<'de> Visitor<'de> for StructVisitor {
110            type Value = AddMember;
111            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
112                f.write_str("a AddMember struct")
113            }
114            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
115                AddMember::internal_deserialize(map)
116            }
117        }
118        deserializer.deserialize_struct("AddMember", ADD_MEMBER_FIELDS, StructVisitor)
119    }
120}
121
122impl ::serde::ser::Serialize for AddMember {
123    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
124        // struct serializer
125        use serde::ser::SerializeStruct;
126        let mut s = serializer.serialize_struct("AddMember", 2)?;
127        self.internal_serialize::<S>(&mut s)?;
128        s.end()
129    }
130}
131
132#[derive(Debug, Clone, PartialEq, Eq)]
133#[non_exhaustive] // structs may have more fields added in the future.
134pub struct AddPaperDocUser {
135    /// The Paper doc ID.
136    pub doc_id: PaperDocId,
137    /// User which should be added to the Paper doc. Specify only email address or Dropbox account
138    /// ID.
139    pub members: Vec<AddMember>,
140    /// A personal message that will be emailed to each successfully added member.
141    pub custom_message: Option<String>,
142    /// Clients should set this to true if no email message shall be sent to added users.
143    pub quiet: bool,
144}
145
146impl AddPaperDocUser {
147    pub fn new(doc_id: PaperDocId, members: Vec<AddMember>) -> Self {
148        AddPaperDocUser {
149            doc_id,
150            members,
151            custom_message: None,
152            quiet: false,
153        }
154    }
155
156    pub fn with_custom_message(mut self, value: String) -> Self {
157        self.custom_message = Some(value);
158        self
159    }
160
161    pub fn with_quiet(mut self, value: bool) -> Self {
162        self.quiet = value;
163        self
164    }
165}
166
167const ADD_PAPER_DOC_USER_FIELDS: &[&str] = &["doc_id",
168                                             "members",
169                                             "custom_message",
170                                             "quiet"];
171impl AddPaperDocUser {
172    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
173        map: V,
174    ) -> Result<AddPaperDocUser, V::Error> {
175        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
176    }
177
178    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
179        mut map: V,
180        optional: bool,
181    ) -> Result<Option<AddPaperDocUser>, V::Error> {
182        let mut field_doc_id = None;
183        let mut field_members = None;
184        let mut field_custom_message = None;
185        let mut field_quiet = None;
186        let mut nothing = true;
187        while let Some(key) = map.next_key::<&str>()? {
188            nothing = false;
189            match key {
190                "doc_id" => {
191                    if field_doc_id.is_some() {
192                        return Err(::serde::de::Error::duplicate_field("doc_id"));
193                    }
194                    field_doc_id = Some(map.next_value()?);
195                }
196                "members" => {
197                    if field_members.is_some() {
198                        return Err(::serde::de::Error::duplicate_field("members"));
199                    }
200                    field_members = Some(map.next_value()?);
201                }
202                "custom_message" => {
203                    if field_custom_message.is_some() {
204                        return Err(::serde::de::Error::duplicate_field("custom_message"));
205                    }
206                    field_custom_message = Some(map.next_value()?);
207                }
208                "quiet" => {
209                    if field_quiet.is_some() {
210                        return Err(::serde::de::Error::duplicate_field("quiet"));
211                    }
212                    field_quiet = Some(map.next_value()?);
213                }
214                _ => {
215                    // unknown field allowed and ignored
216                    map.next_value::<::serde_json::Value>()?;
217                }
218            }
219        }
220        if optional && nothing {
221            return Ok(None);
222        }
223        let result = AddPaperDocUser {
224            doc_id: field_doc_id.ok_or_else(|| ::serde::de::Error::missing_field("doc_id"))?,
225            members: field_members.ok_or_else(|| ::serde::de::Error::missing_field("members"))?,
226            custom_message: field_custom_message.and_then(Option::flatten),
227            quiet: field_quiet.unwrap_or(false),
228        };
229        Ok(Some(result))
230    }
231
232    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
233        &self,
234        s: &mut S::SerializeStruct,
235    ) -> Result<(), S::Error> {
236        use serde::ser::SerializeStruct;
237        s.serialize_field("doc_id", &self.doc_id)?;
238        s.serialize_field("members", &self.members)?;
239        if let Some(val) = &self.custom_message {
240            s.serialize_field("custom_message", val)?;
241        }
242        if self.quiet {
243            s.serialize_field("quiet", &self.quiet)?;
244        }
245        Ok(())
246    }
247}
248
249impl<'de> ::serde::de::Deserialize<'de> for AddPaperDocUser {
250    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
251        // struct deserializer
252        use serde::de::{MapAccess, Visitor};
253        struct StructVisitor;
254        impl<'de> Visitor<'de> for StructVisitor {
255            type Value = AddPaperDocUser;
256            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
257                f.write_str("a AddPaperDocUser struct")
258            }
259            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
260                AddPaperDocUser::internal_deserialize(map)
261            }
262        }
263        deserializer.deserialize_struct("AddPaperDocUser", ADD_PAPER_DOC_USER_FIELDS, StructVisitor)
264    }
265}
266
267impl ::serde::ser::Serialize for AddPaperDocUser {
268    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
269        // struct serializer
270        use serde::ser::SerializeStruct;
271        let mut s = serializer.serialize_struct("AddPaperDocUser", 4)?;
272        self.internal_serialize::<S>(&mut s)?;
273        s.end()
274    }
275}
276
277// struct extends RefPaperDoc
278impl From<AddPaperDocUser> for RefPaperDoc {
279    fn from(subtype: AddPaperDocUser) -> Self {
280        Self {
281            doc_id: subtype.doc_id,
282        }
283    }
284}
285/// Per-member result for [`docs_users_add()`](crate::paper::docs_users_add).
286#[derive(Debug, Clone, PartialEq, Eq)]
287#[non_exhaustive] // structs may have more fields added in the future.
288pub struct AddPaperDocUserMemberResult {
289    /// One of specified input members.
290    pub member: crate::types::sharing::MemberSelector,
291    /// The outcome of the action on this member.
292    pub result: AddPaperDocUserResult,
293}
294
295impl AddPaperDocUserMemberResult {
296    pub fn new(
297        member: crate::types::sharing::MemberSelector,
298        result: AddPaperDocUserResult,
299    ) -> Self {
300        AddPaperDocUserMemberResult {
301            member,
302            result,
303        }
304    }
305}
306
307const ADD_PAPER_DOC_USER_MEMBER_RESULT_FIELDS: &[&str] = &["member",
308                                                           "result"];
309impl AddPaperDocUserMemberResult {
310    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
311        map: V,
312    ) -> Result<AddPaperDocUserMemberResult, V::Error> {
313        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
314    }
315
316    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
317        mut map: V,
318        optional: bool,
319    ) -> Result<Option<AddPaperDocUserMemberResult>, V::Error> {
320        let mut field_member = None;
321        let mut field_result = None;
322        let mut nothing = true;
323        while let Some(key) = map.next_key::<&str>()? {
324            nothing = false;
325            match key {
326                "member" => {
327                    if field_member.is_some() {
328                        return Err(::serde::de::Error::duplicate_field("member"));
329                    }
330                    field_member = Some(map.next_value()?);
331                }
332                "result" => {
333                    if field_result.is_some() {
334                        return Err(::serde::de::Error::duplicate_field("result"));
335                    }
336                    field_result = Some(map.next_value()?);
337                }
338                _ => {
339                    // unknown field allowed and ignored
340                    map.next_value::<::serde_json::Value>()?;
341                }
342            }
343        }
344        if optional && nothing {
345            return Ok(None);
346        }
347        let result = AddPaperDocUserMemberResult {
348            member: field_member.ok_or_else(|| ::serde::de::Error::missing_field("member"))?,
349            result: field_result.ok_or_else(|| ::serde::de::Error::missing_field("result"))?,
350        };
351        Ok(Some(result))
352    }
353
354    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
355        &self,
356        s: &mut S::SerializeStruct,
357    ) -> Result<(), S::Error> {
358        use serde::ser::SerializeStruct;
359        s.serialize_field("member", &self.member)?;
360        s.serialize_field("result", &self.result)?;
361        Ok(())
362    }
363}
364
365impl<'de> ::serde::de::Deserialize<'de> for AddPaperDocUserMemberResult {
366    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
367        // struct deserializer
368        use serde::de::{MapAccess, Visitor};
369        struct StructVisitor;
370        impl<'de> Visitor<'de> for StructVisitor {
371            type Value = AddPaperDocUserMemberResult;
372            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
373                f.write_str("a AddPaperDocUserMemberResult struct")
374            }
375            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
376                AddPaperDocUserMemberResult::internal_deserialize(map)
377            }
378        }
379        deserializer.deserialize_struct("AddPaperDocUserMemberResult", ADD_PAPER_DOC_USER_MEMBER_RESULT_FIELDS, StructVisitor)
380    }
381}
382
383impl ::serde::ser::Serialize for AddPaperDocUserMemberResult {
384    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
385        // struct serializer
386        use serde::ser::SerializeStruct;
387        let mut s = serializer.serialize_struct("AddPaperDocUserMemberResult", 2)?;
388        self.internal_serialize::<S>(&mut s)?;
389        s.end()
390    }
391}
392
393#[derive(Debug, Clone, PartialEq, Eq)]
394#[non_exhaustive] // variants may be added in the future
395pub enum AddPaperDocUserResult {
396    /// User was successfully added to the Paper doc.
397    Success,
398    /// Something unexpected happened when trying to add the user to the Paper doc.
399    UnknownError,
400    /// The Paper doc can be shared only with team members.
401    SharingOutsideTeamDisabled,
402    /// The daily limit of how many users can be added to the Paper doc was reached.
403    DailyLimitReached,
404    /// Owner's permissions cannot be changed.
405    UserIsOwner,
406    /// User data could not be retrieved. Clients should retry.
407    FailedUserDataRetrieval,
408    /// This user already has the correct permission to the Paper doc.
409    PermissionAlreadyGranted,
410    /// Catch-all used for unrecognized values returned from the server. Encountering this value
411    /// typically indicates that this SDK version is out of date.
412    Other,
413}
414
415impl<'de> ::serde::de::Deserialize<'de> for AddPaperDocUserResult {
416    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
417        // union deserializer
418        use serde::de::{self, MapAccess, Visitor};
419        struct EnumVisitor;
420        impl<'de> Visitor<'de> for EnumVisitor {
421            type Value = AddPaperDocUserResult;
422            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
423                f.write_str("a AddPaperDocUserResult structure")
424            }
425            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
426                let tag: &str = match map.next_key()? {
427                    Some(".tag") => map.next_value()?,
428                    _ => return Err(de::Error::missing_field(".tag"))
429                };
430                let value = match tag {
431                    "success" => AddPaperDocUserResult::Success,
432                    "unknown_error" => AddPaperDocUserResult::UnknownError,
433                    "sharing_outside_team_disabled" => AddPaperDocUserResult::SharingOutsideTeamDisabled,
434                    "daily_limit_reached" => AddPaperDocUserResult::DailyLimitReached,
435                    "user_is_owner" => AddPaperDocUserResult::UserIsOwner,
436                    "failed_user_data_retrieval" => AddPaperDocUserResult::FailedUserDataRetrieval,
437                    "permission_already_granted" => AddPaperDocUserResult::PermissionAlreadyGranted,
438                    _ => AddPaperDocUserResult::Other,
439                };
440                crate::eat_json_fields(&mut map)?;
441                Ok(value)
442            }
443        }
444        const VARIANTS: &[&str] = &["success",
445                                    "unknown_error",
446                                    "sharing_outside_team_disabled",
447                                    "daily_limit_reached",
448                                    "user_is_owner",
449                                    "failed_user_data_retrieval",
450                                    "permission_already_granted",
451                                    "other"];
452        deserializer.deserialize_struct("AddPaperDocUserResult", VARIANTS, EnumVisitor)
453    }
454}
455
456impl ::serde::ser::Serialize for AddPaperDocUserResult {
457    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
458        // union serializer
459        use serde::ser::SerializeStruct;
460        match self {
461            AddPaperDocUserResult::Success => {
462                // unit
463                let mut s = serializer.serialize_struct("AddPaperDocUserResult", 1)?;
464                s.serialize_field(".tag", "success")?;
465                s.end()
466            }
467            AddPaperDocUserResult::UnknownError => {
468                // unit
469                let mut s = serializer.serialize_struct("AddPaperDocUserResult", 1)?;
470                s.serialize_field(".tag", "unknown_error")?;
471                s.end()
472            }
473            AddPaperDocUserResult::SharingOutsideTeamDisabled => {
474                // unit
475                let mut s = serializer.serialize_struct("AddPaperDocUserResult", 1)?;
476                s.serialize_field(".tag", "sharing_outside_team_disabled")?;
477                s.end()
478            }
479            AddPaperDocUserResult::DailyLimitReached => {
480                // unit
481                let mut s = serializer.serialize_struct("AddPaperDocUserResult", 1)?;
482                s.serialize_field(".tag", "daily_limit_reached")?;
483                s.end()
484            }
485            AddPaperDocUserResult::UserIsOwner => {
486                // unit
487                let mut s = serializer.serialize_struct("AddPaperDocUserResult", 1)?;
488                s.serialize_field(".tag", "user_is_owner")?;
489                s.end()
490            }
491            AddPaperDocUserResult::FailedUserDataRetrieval => {
492                // unit
493                let mut s = serializer.serialize_struct("AddPaperDocUserResult", 1)?;
494                s.serialize_field(".tag", "failed_user_data_retrieval")?;
495                s.end()
496            }
497            AddPaperDocUserResult::PermissionAlreadyGranted => {
498                // unit
499                let mut s = serializer.serialize_struct("AddPaperDocUserResult", 1)?;
500                s.serialize_field(".tag", "permission_already_granted")?;
501                s.end()
502            }
503            AddPaperDocUserResult::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
504        }
505    }
506}
507
508#[derive(Debug, Clone, PartialEq, Eq)]
509#[non_exhaustive] // structs may have more fields added in the future.
510pub struct Cursor {
511    /// The actual cursor value.
512    pub value: String,
513    /// Expiration time of `value`. Some cursors might have expiration time assigned. This is a UTC
514    /// value after which the cursor is no longer valid and the API starts returning an error. If
515    /// cursor expires a new one needs to be obtained and pagination needs to be restarted. Some
516    /// cursors might be short-lived some cursors might be long-lived. This really depends on the
517    /// sorting type and order, e.g.: 1. on one hand, listing docs created by the user, sorted by
518    /// the created time ascending will have undefinite expiration because the results cannot change
519    /// while the iteration is happening. This cursor would be suitable for long term polling. 2. on
520    /// the other hand, listing docs sorted by the last modified time will have a very short
521    /// expiration as docs do get modified very often and the modified time can be changed while the
522    /// iteration is happening thus altering the results.
523    pub expiration: Option<crate::types::common::DropboxTimestamp>,
524}
525
526impl Cursor {
527    pub fn new(value: String) -> Self {
528        Cursor {
529            value,
530            expiration: None,
531        }
532    }
533
534    pub fn with_expiration(mut self, value: crate::types::common::DropboxTimestamp) -> Self {
535        self.expiration = Some(value);
536        self
537    }
538}
539
540const CURSOR_FIELDS: &[&str] = &["value",
541                                 "expiration"];
542impl Cursor {
543    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
544        map: V,
545    ) -> Result<Cursor, V::Error> {
546        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
547    }
548
549    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
550        mut map: V,
551        optional: bool,
552    ) -> Result<Option<Cursor>, V::Error> {
553        let mut field_value = None;
554        let mut field_expiration = None;
555        let mut nothing = true;
556        while let Some(key) = map.next_key::<&str>()? {
557            nothing = false;
558            match key {
559                "value" => {
560                    if field_value.is_some() {
561                        return Err(::serde::de::Error::duplicate_field("value"));
562                    }
563                    field_value = Some(map.next_value()?);
564                }
565                "expiration" => {
566                    if field_expiration.is_some() {
567                        return Err(::serde::de::Error::duplicate_field("expiration"));
568                    }
569                    field_expiration = Some(map.next_value()?);
570                }
571                _ => {
572                    // unknown field allowed and ignored
573                    map.next_value::<::serde_json::Value>()?;
574                }
575            }
576        }
577        if optional && nothing {
578            return Ok(None);
579        }
580        let result = Cursor {
581            value: field_value.ok_or_else(|| ::serde::de::Error::missing_field("value"))?,
582            expiration: field_expiration.and_then(Option::flatten),
583        };
584        Ok(Some(result))
585    }
586
587    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
588        &self,
589        s: &mut S::SerializeStruct,
590    ) -> Result<(), S::Error> {
591        use serde::ser::SerializeStruct;
592        s.serialize_field("value", &self.value)?;
593        if let Some(val) = &self.expiration {
594            s.serialize_field("expiration", val)?;
595        }
596        Ok(())
597    }
598}
599
600impl<'de> ::serde::de::Deserialize<'de> for Cursor {
601    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
602        // struct deserializer
603        use serde::de::{MapAccess, Visitor};
604        struct StructVisitor;
605        impl<'de> Visitor<'de> for StructVisitor {
606            type Value = Cursor;
607            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
608                f.write_str("a Cursor struct")
609            }
610            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
611                Cursor::internal_deserialize(map)
612            }
613        }
614        deserializer.deserialize_struct("Cursor", CURSOR_FIELDS, StructVisitor)
615    }
616}
617
618impl ::serde::ser::Serialize for Cursor {
619    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
620        // struct serializer
621        use serde::ser::SerializeStruct;
622        let mut s = serializer.serialize_struct("Cursor", 2)?;
623        self.internal_serialize::<S>(&mut s)?;
624        s.end()
625    }
626}
627
628#[derive(Debug, Clone, PartialEq, Eq)]
629#[non_exhaustive] // variants may be added in the future
630pub enum DocLookupError {
631    /// Your account does not have permissions to perform this action. This may be due to it only
632    /// having access to Paper as files in the Dropbox filesystem. For more information, refer to
633    /// the [Paper Migration
634    /// Guide](https://www.dropbox.com/lp/developers/reference/paper-migration-guide).
635    InsufficientPermissions,
636    /// The required doc was not found.
637    DocNotFound,
638    /// Catch-all used for unrecognized values returned from the server. Encountering this value
639    /// typically indicates that this SDK version is out of date.
640    Other,
641}
642
643impl<'de> ::serde::de::Deserialize<'de> for DocLookupError {
644    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
645        // union deserializer
646        use serde::de::{self, MapAccess, Visitor};
647        struct EnumVisitor;
648        impl<'de> Visitor<'de> for EnumVisitor {
649            type Value = DocLookupError;
650            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
651                f.write_str("a DocLookupError structure")
652            }
653            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
654                let tag: &str = match map.next_key()? {
655                    Some(".tag") => map.next_value()?,
656                    _ => return Err(de::Error::missing_field(".tag"))
657                };
658                let value = match tag {
659                    "insufficient_permissions" => DocLookupError::InsufficientPermissions,
660                    "doc_not_found" => DocLookupError::DocNotFound,
661                    _ => DocLookupError::Other,
662                };
663                crate::eat_json_fields(&mut map)?;
664                Ok(value)
665            }
666        }
667        const VARIANTS: &[&str] = &["insufficient_permissions",
668                                    "other",
669                                    "doc_not_found"];
670        deserializer.deserialize_struct("DocLookupError", VARIANTS, EnumVisitor)
671    }
672}
673
674impl ::serde::ser::Serialize for DocLookupError {
675    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
676        // union serializer
677        use serde::ser::SerializeStruct;
678        match self {
679            DocLookupError::InsufficientPermissions => {
680                // unit
681                let mut s = serializer.serialize_struct("DocLookupError", 1)?;
682                s.serialize_field(".tag", "insufficient_permissions")?;
683                s.end()
684            }
685            DocLookupError::DocNotFound => {
686                // unit
687                let mut s = serializer.serialize_struct("DocLookupError", 1)?;
688                s.serialize_field(".tag", "doc_not_found")?;
689                s.end()
690            }
691            DocLookupError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
692        }
693    }
694}
695
696impl ::std::error::Error for DocLookupError {
697}
698
699impl ::std::fmt::Display for DocLookupError {
700    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
701        match self {
702            DocLookupError::DocNotFound => f.write_str("The required doc was not found."),
703            _ => write!(f, "{:?}", *self),
704        }
705    }
706}
707
708// union extends PaperApiBaseError
709impl From<PaperApiBaseError> for DocLookupError {
710    fn from(parent: PaperApiBaseError) -> Self {
711        match parent {
712            PaperApiBaseError::InsufficientPermissions => DocLookupError::InsufficientPermissions,
713            PaperApiBaseError::Other => DocLookupError::Other,
714        }
715    }
716}
717/// The subscription level of a Paper doc.
718#[derive(Debug, Clone, PartialEq, Eq)]
719pub enum DocSubscriptionLevel {
720    /// No change email messages unless you're the creator.
721    Default,
722    /// Ignored: Not shown in pad lists or activity and no email message is sent.
723    Ignore,
724    /// Subscribed: Shown in pad lists and activity and change email messages are sent.
725    Every,
726    /// Unsubscribed: Shown in pad lists, but not in activity and no change email messages are sent.
727    NoEmail,
728}
729
730impl<'de> ::serde::de::Deserialize<'de> for DocSubscriptionLevel {
731    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
732        // union deserializer
733        use serde::de::{self, MapAccess, Visitor};
734        struct EnumVisitor;
735        impl<'de> Visitor<'de> for EnumVisitor {
736            type Value = DocSubscriptionLevel;
737            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
738                f.write_str("a DocSubscriptionLevel structure")
739            }
740            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
741                let tag: &str = match map.next_key()? {
742                    Some(".tag") => map.next_value()?,
743                    _ => return Err(de::Error::missing_field(".tag"))
744                };
745                let value = match tag {
746                    "default" => DocSubscriptionLevel::Default,
747                    "ignore" => DocSubscriptionLevel::Ignore,
748                    "every" => DocSubscriptionLevel::Every,
749                    "no_email" => DocSubscriptionLevel::NoEmail,
750                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
751                };
752                crate::eat_json_fields(&mut map)?;
753                Ok(value)
754            }
755        }
756        const VARIANTS: &[&str] = &["default",
757                                    "ignore",
758                                    "every",
759                                    "no_email"];
760        deserializer.deserialize_struct("DocSubscriptionLevel", VARIANTS, EnumVisitor)
761    }
762}
763
764impl ::serde::ser::Serialize for DocSubscriptionLevel {
765    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
766        // union serializer
767        use serde::ser::SerializeStruct;
768        match self {
769            DocSubscriptionLevel::Default => {
770                // unit
771                let mut s = serializer.serialize_struct("DocSubscriptionLevel", 1)?;
772                s.serialize_field(".tag", "default")?;
773                s.end()
774            }
775            DocSubscriptionLevel::Ignore => {
776                // unit
777                let mut s = serializer.serialize_struct("DocSubscriptionLevel", 1)?;
778                s.serialize_field(".tag", "ignore")?;
779                s.end()
780            }
781            DocSubscriptionLevel::Every => {
782                // unit
783                let mut s = serializer.serialize_struct("DocSubscriptionLevel", 1)?;
784                s.serialize_field(".tag", "every")?;
785                s.end()
786            }
787            DocSubscriptionLevel::NoEmail => {
788                // unit
789                let mut s = serializer.serialize_struct("DocSubscriptionLevel", 1)?;
790                s.serialize_field(".tag", "no_email")?;
791                s.end()
792            }
793        }
794    }
795}
796
797/// The desired export format of the Paper doc.
798#[derive(Debug, Clone, PartialEq, Eq)]
799#[non_exhaustive] // variants may be added in the future
800pub enum ExportFormat {
801    /// The HTML export format.
802    Html,
803    /// The markdown export format.
804    Markdown,
805    /// Doc metadata JSON export format.
806    Json,
807    /// Catch-all used for unrecognized values returned from the server. Encountering this value
808    /// typically indicates that this SDK version is out of date.
809    Other,
810}
811
812impl<'de> ::serde::de::Deserialize<'de> for ExportFormat {
813    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
814        // union deserializer
815        use serde::de::{self, MapAccess, Visitor};
816        struct EnumVisitor;
817        impl<'de> Visitor<'de> for EnumVisitor {
818            type Value = ExportFormat;
819            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
820                f.write_str("a ExportFormat structure")
821            }
822            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
823                let tag: &str = match map.next_key()? {
824                    Some(".tag") => map.next_value()?,
825                    _ => return Err(de::Error::missing_field(".tag"))
826                };
827                let value = match tag {
828                    "html" => ExportFormat::Html,
829                    "markdown" => ExportFormat::Markdown,
830                    "json" => ExportFormat::Json,
831                    _ => ExportFormat::Other,
832                };
833                crate::eat_json_fields(&mut map)?;
834                Ok(value)
835            }
836        }
837        const VARIANTS: &[&str] = &["html",
838                                    "markdown",
839                                    "json",
840                                    "other"];
841        deserializer.deserialize_struct("ExportFormat", VARIANTS, EnumVisitor)
842    }
843}
844
845impl ::serde::ser::Serialize for ExportFormat {
846    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
847        // union serializer
848        use serde::ser::SerializeStruct;
849        match self {
850            ExportFormat::Html => {
851                // unit
852                let mut s = serializer.serialize_struct("ExportFormat", 1)?;
853                s.serialize_field(".tag", "html")?;
854                s.end()
855            }
856            ExportFormat::Markdown => {
857                // unit
858                let mut s = serializer.serialize_struct("ExportFormat", 1)?;
859                s.serialize_field(".tag", "markdown")?;
860                s.end()
861            }
862            ExportFormat::Json => {
863                // unit
864                let mut s = serializer.serialize_struct("ExportFormat", 1)?;
865                s.serialize_field(".tag", "json")?;
866                s.end()
867            }
868            ExportFormat::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
869        }
870    }
871}
872
873/// Data structure representing a Paper folder.
874#[derive(Debug, Clone, PartialEq, Eq)]
875#[non_exhaustive] // structs may have more fields added in the future.
876pub struct Folder {
877    /// Paper folder ID. This ID uniquely identifies the folder.
878    pub id: String,
879    /// Paper folder name.
880    pub name: String,
881}
882
883impl Folder {
884    pub fn new(id: String, name: String) -> Self {
885        Folder {
886            id,
887            name,
888        }
889    }
890}
891
892const FOLDER_FIELDS: &[&str] = &["id",
893                                 "name"];
894impl Folder {
895    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
896        map: V,
897    ) -> Result<Folder, V::Error> {
898        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
899    }
900
901    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
902        mut map: V,
903        optional: bool,
904    ) -> Result<Option<Folder>, V::Error> {
905        let mut field_id = None;
906        let mut field_name = None;
907        let mut nothing = true;
908        while let Some(key) = map.next_key::<&str>()? {
909            nothing = false;
910            match key {
911                "id" => {
912                    if field_id.is_some() {
913                        return Err(::serde::de::Error::duplicate_field("id"));
914                    }
915                    field_id = Some(map.next_value()?);
916                }
917                "name" => {
918                    if field_name.is_some() {
919                        return Err(::serde::de::Error::duplicate_field("name"));
920                    }
921                    field_name = Some(map.next_value()?);
922                }
923                _ => {
924                    // unknown field allowed and ignored
925                    map.next_value::<::serde_json::Value>()?;
926                }
927            }
928        }
929        if optional && nothing {
930            return Ok(None);
931        }
932        let result = Folder {
933            id: field_id.ok_or_else(|| ::serde::de::Error::missing_field("id"))?,
934            name: field_name.ok_or_else(|| ::serde::de::Error::missing_field("name"))?,
935        };
936        Ok(Some(result))
937    }
938
939    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
940        &self,
941        s: &mut S::SerializeStruct,
942    ) -> Result<(), S::Error> {
943        use serde::ser::SerializeStruct;
944        s.serialize_field("id", &self.id)?;
945        s.serialize_field("name", &self.name)?;
946        Ok(())
947    }
948}
949
950impl<'de> ::serde::de::Deserialize<'de> for Folder {
951    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
952        // struct deserializer
953        use serde::de::{MapAccess, Visitor};
954        struct StructVisitor;
955        impl<'de> Visitor<'de> for StructVisitor {
956            type Value = Folder;
957            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
958                f.write_str("a Folder struct")
959            }
960            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
961                Folder::internal_deserialize(map)
962            }
963        }
964        deserializer.deserialize_struct("Folder", FOLDER_FIELDS, StructVisitor)
965    }
966}
967
968impl ::serde::ser::Serialize for Folder {
969    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
970        // struct serializer
971        use serde::ser::SerializeStruct;
972        let mut s = serializer.serialize_struct("Folder", 2)?;
973        self.internal_serialize::<S>(&mut s)?;
974        s.end()
975    }
976}
977
978/// The sharing policy of a Paper folder. The sharing policy of subfolders is inherited from the
979/// root folder.
980#[derive(Debug, Clone, PartialEq, Eq)]
981pub enum FolderSharingPolicyType {
982    /// Everyone in your team and anyone directly invited can access this folder.
983    Team,
984    /// Only people directly invited can access this folder.
985    InviteOnly,
986}
987
988impl<'de> ::serde::de::Deserialize<'de> for FolderSharingPolicyType {
989    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
990        // union deserializer
991        use serde::de::{self, MapAccess, Visitor};
992        struct EnumVisitor;
993        impl<'de> Visitor<'de> for EnumVisitor {
994            type Value = FolderSharingPolicyType;
995            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
996                f.write_str("a FolderSharingPolicyType structure")
997            }
998            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
999                let tag: &str = match map.next_key()? {
1000                    Some(".tag") => map.next_value()?,
1001                    _ => return Err(de::Error::missing_field(".tag"))
1002                };
1003                let value = match tag {
1004                    "team" => FolderSharingPolicyType::Team,
1005                    "invite_only" => FolderSharingPolicyType::InviteOnly,
1006                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
1007                };
1008                crate::eat_json_fields(&mut map)?;
1009                Ok(value)
1010            }
1011        }
1012        const VARIANTS: &[&str] = &["team",
1013                                    "invite_only"];
1014        deserializer.deserialize_struct("FolderSharingPolicyType", VARIANTS, EnumVisitor)
1015    }
1016}
1017
1018impl ::serde::ser::Serialize for FolderSharingPolicyType {
1019    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
1020        // union serializer
1021        use serde::ser::SerializeStruct;
1022        match self {
1023            FolderSharingPolicyType::Team => {
1024                // unit
1025                let mut s = serializer.serialize_struct("FolderSharingPolicyType", 1)?;
1026                s.serialize_field(".tag", "team")?;
1027                s.end()
1028            }
1029            FolderSharingPolicyType::InviteOnly => {
1030                // unit
1031                let mut s = serializer.serialize_struct("FolderSharingPolicyType", 1)?;
1032                s.serialize_field(".tag", "invite_only")?;
1033                s.end()
1034            }
1035        }
1036    }
1037}
1038
1039/// The subscription level of a Paper folder.
1040#[derive(Debug, Clone, PartialEq, Eq)]
1041pub enum FolderSubscriptionLevel {
1042    /// Not shown in activity, no email messages.
1043    None,
1044    /// Shown in activity, no email messages.
1045    ActivityOnly,
1046    /// Shown in activity, daily email messages.
1047    DailyEmails,
1048    /// Shown in activity, weekly email messages.
1049    WeeklyEmails,
1050}
1051
1052impl<'de> ::serde::de::Deserialize<'de> for FolderSubscriptionLevel {
1053    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1054        // union deserializer
1055        use serde::de::{self, MapAccess, Visitor};
1056        struct EnumVisitor;
1057        impl<'de> Visitor<'de> for EnumVisitor {
1058            type Value = FolderSubscriptionLevel;
1059            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
1060                f.write_str("a FolderSubscriptionLevel structure")
1061            }
1062            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
1063                let tag: &str = match map.next_key()? {
1064                    Some(".tag") => map.next_value()?,
1065                    _ => return Err(de::Error::missing_field(".tag"))
1066                };
1067                let value = match tag {
1068                    "none" => FolderSubscriptionLevel::None,
1069                    "activity_only" => FolderSubscriptionLevel::ActivityOnly,
1070                    "daily_emails" => FolderSubscriptionLevel::DailyEmails,
1071                    "weekly_emails" => FolderSubscriptionLevel::WeeklyEmails,
1072                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
1073                };
1074                crate::eat_json_fields(&mut map)?;
1075                Ok(value)
1076            }
1077        }
1078        const VARIANTS: &[&str] = &["none",
1079                                    "activity_only",
1080                                    "daily_emails",
1081                                    "weekly_emails"];
1082        deserializer.deserialize_struct("FolderSubscriptionLevel", VARIANTS, EnumVisitor)
1083    }
1084}
1085
1086impl ::serde::ser::Serialize for FolderSubscriptionLevel {
1087    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
1088        // union serializer
1089        use serde::ser::SerializeStruct;
1090        match self {
1091            FolderSubscriptionLevel::None => {
1092                // unit
1093                let mut s = serializer.serialize_struct("FolderSubscriptionLevel", 1)?;
1094                s.serialize_field(".tag", "none")?;
1095                s.end()
1096            }
1097            FolderSubscriptionLevel::ActivityOnly => {
1098                // unit
1099                let mut s = serializer.serialize_struct("FolderSubscriptionLevel", 1)?;
1100                s.serialize_field(".tag", "activity_only")?;
1101                s.end()
1102            }
1103            FolderSubscriptionLevel::DailyEmails => {
1104                // unit
1105                let mut s = serializer.serialize_struct("FolderSubscriptionLevel", 1)?;
1106                s.serialize_field(".tag", "daily_emails")?;
1107                s.end()
1108            }
1109            FolderSubscriptionLevel::WeeklyEmails => {
1110                // unit
1111                let mut s = serializer.serialize_struct("FolderSubscriptionLevel", 1)?;
1112                s.serialize_field(".tag", "weekly_emails")?;
1113                s.end()
1114            }
1115        }
1116    }
1117}
1118
1119/// Metadata about Paper folders containing the specififed Paper doc.
1120#[derive(Debug, Clone, PartialEq, Eq, Default)]
1121#[non_exhaustive] // structs may have more fields added in the future.
1122pub struct FoldersContainingPaperDoc {
1123    /// The sharing policy of the folder containing the Paper doc.
1124    pub folder_sharing_policy_type: Option<FolderSharingPolicyType>,
1125    /// The folder path. If present the first folder is the root folder.
1126    pub folders: Option<Vec<Folder>>,
1127}
1128
1129impl FoldersContainingPaperDoc {
1130    pub fn with_folder_sharing_policy_type(mut self, value: FolderSharingPolicyType) -> Self {
1131        self.folder_sharing_policy_type = Some(value);
1132        self
1133    }
1134
1135    pub fn with_folders(mut self, value: Vec<Folder>) -> Self {
1136        self.folders = Some(value);
1137        self
1138    }
1139}
1140
1141const FOLDERS_CONTAINING_PAPER_DOC_FIELDS: &[&str] = &["folder_sharing_policy_type",
1142                                                       "folders"];
1143impl FoldersContainingPaperDoc {
1144    // no _opt deserializer
1145    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
1146        mut map: V,
1147    ) -> Result<FoldersContainingPaperDoc, V::Error> {
1148        let mut field_folder_sharing_policy_type = None;
1149        let mut field_folders = None;
1150        while let Some(key) = map.next_key::<&str>()? {
1151            match key {
1152                "folder_sharing_policy_type" => {
1153                    if field_folder_sharing_policy_type.is_some() {
1154                        return Err(::serde::de::Error::duplicate_field("folder_sharing_policy_type"));
1155                    }
1156                    field_folder_sharing_policy_type = Some(map.next_value()?);
1157                }
1158                "folders" => {
1159                    if field_folders.is_some() {
1160                        return Err(::serde::de::Error::duplicate_field("folders"));
1161                    }
1162                    field_folders = Some(map.next_value()?);
1163                }
1164                _ => {
1165                    // unknown field allowed and ignored
1166                    map.next_value::<::serde_json::Value>()?;
1167                }
1168            }
1169        }
1170        let result = FoldersContainingPaperDoc {
1171            folder_sharing_policy_type: field_folder_sharing_policy_type.and_then(Option::flatten),
1172            folders: field_folders.and_then(Option::flatten),
1173        };
1174        Ok(result)
1175    }
1176
1177    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
1178        &self,
1179        s: &mut S::SerializeStruct,
1180    ) -> Result<(), S::Error> {
1181        use serde::ser::SerializeStruct;
1182        if let Some(val) = &self.folder_sharing_policy_type {
1183            s.serialize_field("folder_sharing_policy_type", val)?;
1184        }
1185        if let Some(val) = &self.folders {
1186            s.serialize_field("folders", val)?;
1187        }
1188        Ok(())
1189    }
1190}
1191
1192impl<'de> ::serde::de::Deserialize<'de> for FoldersContainingPaperDoc {
1193    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1194        // struct deserializer
1195        use serde::de::{MapAccess, Visitor};
1196        struct StructVisitor;
1197        impl<'de> Visitor<'de> for StructVisitor {
1198            type Value = FoldersContainingPaperDoc;
1199            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
1200                f.write_str("a FoldersContainingPaperDoc struct")
1201            }
1202            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
1203                FoldersContainingPaperDoc::internal_deserialize(map)
1204            }
1205        }
1206        deserializer.deserialize_struct("FoldersContainingPaperDoc", FOLDERS_CONTAINING_PAPER_DOC_FIELDS, StructVisitor)
1207    }
1208}
1209
1210impl ::serde::ser::Serialize for FoldersContainingPaperDoc {
1211    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
1212        // struct serializer
1213        use serde::ser::SerializeStruct;
1214        let mut s = serializer.serialize_struct("FoldersContainingPaperDoc", 2)?;
1215        self.internal_serialize::<S>(&mut s)?;
1216        s.end()
1217    }
1218}
1219
1220/// Argument for retrieving Paper doc metadata. Accepts either a legacy Paper doc ID or a Cloud Doc
1221/// file ID.
1222#[derive(Debug, Clone, PartialEq, Eq, Default)]
1223#[non_exhaustive] // structs may have more fields added in the future.
1224pub struct GetDocMetadataArg {
1225    /// Legacy Paper doc identifier.
1226    pub doc_id: Option<PaperDocId>,
1227    /// Dropbox file ID for Cloud Docs (post-PiFS migration).
1228    pub file_id: Option<crate::types::files::FileId>,
1229}
1230
1231impl GetDocMetadataArg {
1232    pub fn with_doc_id(mut self, value: PaperDocId) -> Self {
1233        self.doc_id = Some(value);
1234        self
1235    }
1236
1237    pub fn with_file_id(mut self, value: crate::types::files::FileId) -> Self {
1238        self.file_id = Some(value);
1239        self
1240    }
1241}
1242
1243const GET_DOC_METADATA_ARG_FIELDS: &[&str] = &["doc_id",
1244                                               "file_id"];
1245impl GetDocMetadataArg {
1246    // no _opt deserializer
1247    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
1248        mut map: V,
1249    ) -> Result<GetDocMetadataArg, V::Error> {
1250        let mut field_doc_id = None;
1251        let mut field_file_id = None;
1252        while let Some(key) = map.next_key::<&str>()? {
1253            match key {
1254                "doc_id" => {
1255                    if field_doc_id.is_some() {
1256                        return Err(::serde::de::Error::duplicate_field("doc_id"));
1257                    }
1258                    field_doc_id = Some(map.next_value()?);
1259                }
1260                "file_id" => {
1261                    if field_file_id.is_some() {
1262                        return Err(::serde::de::Error::duplicate_field("file_id"));
1263                    }
1264                    field_file_id = Some(map.next_value()?);
1265                }
1266                _ => {
1267                    // unknown field allowed and ignored
1268                    map.next_value::<::serde_json::Value>()?;
1269                }
1270            }
1271        }
1272        let result = GetDocMetadataArg {
1273            doc_id: field_doc_id.and_then(Option::flatten),
1274            file_id: field_file_id.and_then(Option::flatten),
1275        };
1276        Ok(result)
1277    }
1278
1279    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
1280        &self,
1281        s: &mut S::SerializeStruct,
1282    ) -> Result<(), S::Error> {
1283        use serde::ser::SerializeStruct;
1284        if let Some(val) = &self.doc_id {
1285            s.serialize_field("doc_id", val)?;
1286        }
1287        if let Some(val) = &self.file_id {
1288            s.serialize_field("file_id", val)?;
1289        }
1290        Ok(())
1291    }
1292}
1293
1294impl<'de> ::serde::de::Deserialize<'de> for GetDocMetadataArg {
1295    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1296        // struct deserializer
1297        use serde::de::{MapAccess, Visitor};
1298        struct StructVisitor;
1299        impl<'de> Visitor<'de> for StructVisitor {
1300            type Value = GetDocMetadataArg;
1301            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
1302                f.write_str("a GetDocMetadataArg struct")
1303            }
1304            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
1305                GetDocMetadataArg::internal_deserialize(map)
1306            }
1307        }
1308        deserializer.deserialize_struct("GetDocMetadataArg", GET_DOC_METADATA_ARG_FIELDS, StructVisitor)
1309    }
1310}
1311
1312impl ::serde::ser::Serialize for GetDocMetadataArg {
1313    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
1314        // struct serializer
1315        use serde::ser::SerializeStruct;
1316        let mut s = serializer.serialize_struct("GetDocMetadataArg", 2)?;
1317        self.internal_serialize::<S>(&mut s)?;
1318        s.end()
1319    }
1320}
1321
1322/// The import format of the incoming data.
1323#[derive(Debug, Clone, PartialEq, Eq)]
1324#[non_exhaustive] // variants may be added in the future
1325pub enum ImportFormat {
1326    /// The provided data is interpreted as standard HTML.
1327    Html,
1328    /// The provided data is interpreted as markdown. The first line of the provided document will
1329    /// be used as the doc title.
1330    Markdown,
1331    /// The provided data is interpreted as plain text. The first line of the provided document will
1332    /// be used as the doc title.
1333    PlainText,
1334    /// Catch-all used for unrecognized values returned from the server. Encountering this value
1335    /// typically indicates that this SDK version is out of date.
1336    Other,
1337}
1338
1339impl<'de> ::serde::de::Deserialize<'de> for ImportFormat {
1340    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1341        // union deserializer
1342        use serde::de::{self, MapAccess, Visitor};
1343        struct EnumVisitor;
1344        impl<'de> Visitor<'de> for EnumVisitor {
1345            type Value = ImportFormat;
1346            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
1347                f.write_str("a ImportFormat structure")
1348            }
1349            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
1350                let tag: &str = match map.next_key()? {
1351                    Some(".tag") => map.next_value()?,
1352                    _ => return Err(de::Error::missing_field(".tag"))
1353                };
1354                let value = match tag {
1355                    "html" => ImportFormat::Html,
1356                    "markdown" => ImportFormat::Markdown,
1357                    "plain_text" => ImportFormat::PlainText,
1358                    _ => ImportFormat::Other,
1359                };
1360                crate::eat_json_fields(&mut map)?;
1361                Ok(value)
1362            }
1363        }
1364        const VARIANTS: &[&str] = &["html",
1365                                    "markdown",
1366                                    "plain_text",
1367                                    "other"];
1368        deserializer.deserialize_struct("ImportFormat", VARIANTS, EnumVisitor)
1369    }
1370}
1371
1372impl ::serde::ser::Serialize for ImportFormat {
1373    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
1374        // union serializer
1375        use serde::ser::SerializeStruct;
1376        match self {
1377            ImportFormat::Html => {
1378                // unit
1379                let mut s = serializer.serialize_struct("ImportFormat", 1)?;
1380                s.serialize_field(".tag", "html")?;
1381                s.end()
1382            }
1383            ImportFormat::Markdown => {
1384                // unit
1385                let mut s = serializer.serialize_struct("ImportFormat", 1)?;
1386                s.serialize_field(".tag", "markdown")?;
1387                s.end()
1388            }
1389            ImportFormat::PlainText => {
1390                // unit
1391                let mut s = serializer.serialize_struct("ImportFormat", 1)?;
1392                s.serialize_field(".tag", "plain_text")?;
1393                s.end()
1394            }
1395            ImportFormat::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
1396        }
1397    }
1398}
1399
1400#[derive(Debug, Clone, PartialEq, Eq)]
1401#[non_exhaustive] // structs may have more fields added in the future.
1402pub struct InviteeInfoWithPermissionLevel {
1403    /// Email address invited to the Paper doc.
1404    pub invitee: crate::types::sharing::InviteeInfo,
1405    /// Permission level for the invitee.
1406    pub permission_level: PaperDocPermissionLevel,
1407}
1408
1409impl InviteeInfoWithPermissionLevel {
1410    pub fn new(
1411        invitee: crate::types::sharing::InviteeInfo,
1412        permission_level: PaperDocPermissionLevel,
1413    ) -> Self {
1414        InviteeInfoWithPermissionLevel {
1415            invitee,
1416            permission_level,
1417        }
1418    }
1419}
1420
1421const INVITEE_INFO_WITH_PERMISSION_LEVEL_FIELDS: &[&str] = &["invitee",
1422                                                             "permission_level"];
1423impl InviteeInfoWithPermissionLevel {
1424    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
1425        map: V,
1426    ) -> Result<InviteeInfoWithPermissionLevel, V::Error> {
1427        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
1428    }
1429
1430    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
1431        mut map: V,
1432        optional: bool,
1433    ) -> Result<Option<InviteeInfoWithPermissionLevel>, V::Error> {
1434        let mut field_invitee = None;
1435        let mut field_permission_level = None;
1436        let mut nothing = true;
1437        while let Some(key) = map.next_key::<&str>()? {
1438            nothing = false;
1439            match key {
1440                "invitee" => {
1441                    if field_invitee.is_some() {
1442                        return Err(::serde::de::Error::duplicate_field("invitee"));
1443                    }
1444                    field_invitee = Some(map.next_value()?);
1445                }
1446                "permission_level" => {
1447                    if field_permission_level.is_some() {
1448                        return Err(::serde::de::Error::duplicate_field("permission_level"));
1449                    }
1450                    field_permission_level = Some(map.next_value()?);
1451                }
1452                _ => {
1453                    // unknown field allowed and ignored
1454                    map.next_value::<::serde_json::Value>()?;
1455                }
1456            }
1457        }
1458        if optional && nothing {
1459            return Ok(None);
1460        }
1461        let result = InviteeInfoWithPermissionLevel {
1462            invitee: field_invitee.ok_or_else(|| ::serde::de::Error::missing_field("invitee"))?,
1463            permission_level: field_permission_level.ok_or_else(|| ::serde::de::Error::missing_field("permission_level"))?,
1464        };
1465        Ok(Some(result))
1466    }
1467
1468    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
1469        &self,
1470        s: &mut S::SerializeStruct,
1471    ) -> Result<(), S::Error> {
1472        use serde::ser::SerializeStruct;
1473        s.serialize_field("invitee", &self.invitee)?;
1474        s.serialize_field("permission_level", &self.permission_level)?;
1475        Ok(())
1476    }
1477}
1478
1479impl<'de> ::serde::de::Deserialize<'de> for InviteeInfoWithPermissionLevel {
1480    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1481        // struct deserializer
1482        use serde::de::{MapAccess, Visitor};
1483        struct StructVisitor;
1484        impl<'de> Visitor<'de> for StructVisitor {
1485            type Value = InviteeInfoWithPermissionLevel;
1486            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
1487                f.write_str("a InviteeInfoWithPermissionLevel struct")
1488            }
1489            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
1490                InviteeInfoWithPermissionLevel::internal_deserialize(map)
1491            }
1492        }
1493        deserializer.deserialize_struct("InviteeInfoWithPermissionLevel", INVITEE_INFO_WITH_PERMISSION_LEVEL_FIELDS, StructVisitor)
1494    }
1495}
1496
1497impl ::serde::ser::Serialize for InviteeInfoWithPermissionLevel {
1498    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
1499        // struct serializer
1500        use serde::ser::SerializeStruct;
1501        let mut s = serializer.serialize_struct("InviteeInfoWithPermissionLevel", 2)?;
1502        self.internal_serialize::<S>(&mut s)?;
1503        s.end()
1504    }
1505}
1506
1507#[derive(Debug, Clone, PartialEq, Eq)]
1508#[non_exhaustive] // variants may be added in the future
1509pub enum ListDocsCursorError {
1510    CursorError(PaperApiCursorError),
1511    /// Catch-all used for unrecognized values returned from the server. Encountering this value
1512    /// typically indicates that this SDK version is out of date.
1513    Other,
1514}
1515
1516impl<'de> ::serde::de::Deserialize<'de> for ListDocsCursorError {
1517    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1518        // union deserializer
1519        use serde::de::{self, MapAccess, Visitor};
1520        struct EnumVisitor;
1521        impl<'de> Visitor<'de> for EnumVisitor {
1522            type Value = ListDocsCursorError;
1523            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
1524                f.write_str("a ListDocsCursorError structure")
1525            }
1526            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
1527                let tag: &str = match map.next_key()? {
1528                    Some(".tag") => map.next_value()?,
1529                    _ => return Err(de::Error::missing_field(".tag"))
1530                };
1531                let value = match tag {
1532                    "cursor_error" => {
1533                        match map.next_key()? {
1534                            Some("cursor_error") => ListDocsCursorError::CursorError(map.next_value()?),
1535                            None => return Err(de::Error::missing_field("cursor_error")),
1536                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
1537                        }
1538                    }
1539                    _ => ListDocsCursorError::Other,
1540                };
1541                crate::eat_json_fields(&mut map)?;
1542                Ok(value)
1543            }
1544        }
1545        const VARIANTS: &[&str] = &["cursor_error",
1546                                    "other"];
1547        deserializer.deserialize_struct("ListDocsCursorError", VARIANTS, EnumVisitor)
1548    }
1549}
1550
1551impl ::serde::ser::Serialize for ListDocsCursorError {
1552    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
1553        // union serializer
1554        use serde::ser::SerializeStruct;
1555        match self {
1556            ListDocsCursorError::CursorError(x) => {
1557                // union or polymporphic struct
1558                let mut s = serializer.serialize_struct("ListDocsCursorError", 2)?;
1559                s.serialize_field(".tag", "cursor_error")?;
1560                s.serialize_field("cursor_error", x)?;
1561                s.end()
1562            }
1563            ListDocsCursorError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
1564        }
1565    }
1566}
1567
1568impl ::std::error::Error for ListDocsCursorError {
1569    fn source(&self) -> Option<&(dyn ::std::error::Error + 'static)> {
1570        match self {
1571            ListDocsCursorError::CursorError(inner) => Some(inner),
1572            _ => None,
1573        }
1574    }
1575}
1576
1577impl ::std::fmt::Display for ListDocsCursorError {
1578    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
1579        match self {
1580            ListDocsCursorError::CursorError(inner) => write!(f, "ListDocsCursorError: {}", inner),
1581            _ => write!(f, "{:?}", *self),
1582        }
1583    }
1584}
1585
1586#[derive(Debug, Clone, PartialEq, Eq)]
1587#[non_exhaustive] // structs may have more fields added in the future.
1588pub struct ListPaperDocsArgs {
1589    /// Allows user to specify how the Paper docs should be filtered.
1590    pub filter_by: ListPaperDocsFilterBy,
1591    /// Allows user to specify how the Paper docs should be sorted.
1592    pub sort_by: ListPaperDocsSortBy,
1593    /// Allows user to specify the sort order of the result.
1594    pub sort_order: ListPaperDocsSortOrder,
1595    /// Size limit per batch. The maximum number of docs that can be retrieved per batch is 1000.
1596    /// Higher value results in invalid arguments error.
1597    pub limit: i32,
1598    /// Do not return results beyond this date. Behavior depends on sort order.
1599    pub stop_at_date: Option<crate::types::common::DropboxTimestamp>,
1600}
1601
1602impl Default for ListPaperDocsArgs {
1603    fn default() -> Self {
1604        ListPaperDocsArgs {
1605            filter_by: ListPaperDocsFilterBy::DocsAccessed,
1606            sort_by: ListPaperDocsSortBy::Accessed,
1607            sort_order: ListPaperDocsSortOrder::Ascending,
1608            limit: 1000,
1609            stop_at_date: None,
1610        }
1611    }
1612}
1613
1614impl ListPaperDocsArgs {
1615    pub fn with_filter_by(mut self, value: ListPaperDocsFilterBy) -> Self {
1616        self.filter_by = value;
1617        self
1618    }
1619
1620    pub fn with_sort_by(mut self, value: ListPaperDocsSortBy) -> Self {
1621        self.sort_by = value;
1622        self
1623    }
1624
1625    pub fn with_sort_order(mut self, value: ListPaperDocsSortOrder) -> Self {
1626        self.sort_order = value;
1627        self
1628    }
1629
1630    pub fn with_limit(mut self, value: i32) -> Self {
1631        self.limit = value;
1632        self
1633    }
1634
1635    pub fn with_stop_at_date(mut self, value: crate::types::common::DropboxTimestamp) -> Self {
1636        self.stop_at_date = Some(value);
1637        self
1638    }
1639}
1640
1641const LIST_PAPER_DOCS_ARGS_FIELDS: &[&str] = &["filter_by",
1642                                               "sort_by",
1643                                               "sort_order",
1644                                               "limit",
1645                                               "stop_at_date"];
1646impl ListPaperDocsArgs {
1647    // no _opt deserializer
1648    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
1649        mut map: V,
1650    ) -> Result<ListPaperDocsArgs, V::Error> {
1651        let mut field_filter_by = None;
1652        let mut field_sort_by = None;
1653        let mut field_sort_order = None;
1654        let mut field_limit = None;
1655        let mut field_stop_at_date = None;
1656        while let Some(key) = map.next_key::<&str>()? {
1657            match key {
1658                "filter_by" => {
1659                    if field_filter_by.is_some() {
1660                        return Err(::serde::de::Error::duplicate_field("filter_by"));
1661                    }
1662                    field_filter_by = Some(map.next_value()?);
1663                }
1664                "sort_by" => {
1665                    if field_sort_by.is_some() {
1666                        return Err(::serde::de::Error::duplicate_field("sort_by"));
1667                    }
1668                    field_sort_by = Some(map.next_value()?);
1669                }
1670                "sort_order" => {
1671                    if field_sort_order.is_some() {
1672                        return Err(::serde::de::Error::duplicate_field("sort_order"));
1673                    }
1674                    field_sort_order = Some(map.next_value()?);
1675                }
1676                "limit" => {
1677                    if field_limit.is_some() {
1678                        return Err(::serde::de::Error::duplicate_field("limit"));
1679                    }
1680                    field_limit = Some(map.next_value()?);
1681                }
1682                "stop_at_date" => {
1683                    if field_stop_at_date.is_some() {
1684                        return Err(::serde::de::Error::duplicate_field("stop_at_date"));
1685                    }
1686                    field_stop_at_date = Some(map.next_value()?);
1687                }
1688                _ => {
1689                    // unknown field allowed and ignored
1690                    map.next_value::<::serde_json::Value>()?;
1691                }
1692            }
1693        }
1694        let result = ListPaperDocsArgs {
1695            filter_by: field_filter_by.unwrap_or(ListPaperDocsFilterBy::DocsAccessed),
1696            sort_by: field_sort_by.unwrap_or(ListPaperDocsSortBy::Accessed),
1697            sort_order: field_sort_order.unwrap_or(ListPaperDocsSortOrder::Ascending),
1698            limit: field_limit.unwrap_or(1000),
1699            stop_at_date: field_stop_at_date.and_then(Option::flatten),
1700        };
1701        Ok(result)
1702    }
1703
1704    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
1705        &self,
1706        s: &mut S::SerializeStruct,
1707    ) -> Result<(), S::Error> {
1708        use serde::ser::SerializeStruct;
1709        if self.filter_by != ListPaperDocsFilterBy::DocsAccessed {
1710            s.serialize_field("filter_by", &self.filter_by)?;
1711        }
1712        if self.sort_by != ListPaperDocsSortBy::Accessed {
1713            s.serialize_field("sort_by", &self.sort_by)?;
1714        }
1715        if self.sort_order != ListPaperDocsSortOrder::Ascending {
1716            s.serialize_field("sort_order", &self.sort_order)?;
1717        }
1718        if self.limit != 1000 {
1719            s.serialize_field("limit", &self.limit)?;
1720        }
1721        if let Some(val) = &self.stop_at_date {
1722            s.serialize_field("stop_at_date", val)?;
1723        }
1724        Ok(())
1725    }
1726}
1727
1728impl<'de> ::serde::de::Deserialize<'de> for ListPaperDocsArgs {
1729    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1730        // struct deserializer
1731        use serde::de::{MapAccess, Visitor};
1732        struct StructVisitor;
1733        impl<'de> Visitor<'de> for StructVisitor {
1734            type Value = ListPaperDocsArgs;
1735            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
1736                f.write_str("a ListPaperDocsArgs struct")
1737            }
1738            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
1739                ListPaperDocsArgs::internal_deserialize(map)
1740            }
1741        }
1742        deserializer.deserialize_struct("ListPaperDocsArgs", LIST_PAPER_DOCS_ARGS_FIELDS, StructVisitor)
1743    }
1744}
1745
1746impl ::serde::ser::Serialize for ListPaperDocsArgs {
1747    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
1748        // struct serializer
1749        use serde::ser::SerializeStruct;
1750        let mut s = serializer.serialize_struct("ListPaperDocsArgs", 5)?;
1751        self.internal_serialize::<S>(&mut s)?;
1752        s.end()
1753    }
1754}
1755
1756#[derive(Debug, Clone, PartialEq, Eq)]
1757#[non_exhaustive] // structs may have more fields added in the future.
1758pub struct ListPaperDocsContinueArgs {
1759    /// The cursor obtained from [`docs_list()`](crate::paper::docs_list) or
1760    /// [`docs_list_continue()`](crate::paper::docs_list_continue). Allows for pagination.
1761    pub cursor: String,
1762}
1763
1764impl ListPaperDocsContinueArgs {
1765    pub fn new(cursor: String) -> Self {
1766        ListPaperDocsContinueArgs {
1767            cursor,
1768        }
1769    }
1770}
1771
1772const LIST_PAPER_DOCS_CONTINUE_ARGS_FIELDS: &[&str] = &["cursor"];
1773impl ListPaperDocsContinueArgs {
1774    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
1775        map: V,
1776    ) -> Result<ListPaperDocsContinueArgs, V::Error> {
1777        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
1778    }
1779
1780    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
1781        mut map: V,
1782        optional: bool,
1783    ) -> Result<Option<ListPaperDocsContinueArgs>, V::Error> {
1784        let mut field_cursor = None;
1785        let mut nothing = true;
1786        while let Some(key) = map.next_key::<&str>()? {
1787            nothing = false;
1788            match key {
1789                "cursor" => {
1790                    if field_cursor.is_some() {
1791                        return Err(::serde::de::Error::duplicate_field("cursor"));
1792                    }
1793                    field_cursor = Some(map.next_value()?);
1794                }
1795                _ => {
1796                    // unknown field allowed and ignored
1797                    map.next_value::<::serde_json::Value>()?;
1798                }
1799            }
1800        }
1801        if optional && nothing {
1802            return Ok(None);
1803        }
1804        let result = ListPaperDocsContinueArgs {
1805            cursor: field_cursor.ok_or_else(|| ::serde::de::Error::missing_field("cursor"))?,
1806        };
1807        Ok(Some(result))
1808    }
1809
1810    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
1811        &self,
1812        s: &mut S::SerializeStruct,
1813    ) -> Result<(), S::Error> {
1814        use serde::ser::SerializeStruct;
1815        s.serialize_field("cursor", &self.cursor)?;
1816        Ok(())
1817    }
1818}
1819
1820impl<'de> ::serde::de::Deserialize<'de> for ListPaperDocsContinueArgs {
1821    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1822        // struct deserializer
1823        use serde::de::{MapAccess, Visitor};
1824        struct StructVisitor;
1825        impl<'de> Visitor<'de> for StructVisitor {
1826            type Value = ListPaperDocsContinueArgs;
1827            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
1828                f.write_str("a ListPaperDocsContinueArgs struct")
1829            }
1830            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
1831                ListPaperDocsContinueArgs::internal_deserialize(map)
1832            }
1833        }
1834        deserializer.deserialize_struct("ListPaperDocsContinueArgs", LIST_PAPER_DOCS_CONTINUE_ARGS_FIELDS, StructVisitor)
1835    }
1836}
1837
1838impl ::serde::ser::Serialize for ListPaperDocsContinueArgs {
1839    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
1840        // struct serializer
1841        use serde::ser::SerializeStruct;
1842        let mut s = serializer.serialize_struct("ListPaperDocsContinueArgs", 1)?;
1843        self.internal_serialize::<S>(&mut s)?;
1844        s.end()
1845    }
1846}
1847
1848#[derive(Debug, Clone, PartialEq, Eq)]
1849#[non_exhaustive] // variants may be added in the future
1850pub enum ListPaperDocsFilterBy {
1851    /// Fetches all Paper doc IDs that the user has ever accessed.
1852    DocsAccessed,
1853    /// Fetches only the Paper doc IDs that the user has created.
1854    DocsCreated,
1855    /// Catch-all used for unrecognized values returned from the server. Encountering this value
1856    /// typically indicates that this SDK version is out of date.
1857    Other,
1858}
1859
1860impl<'de> ::serde::de::Deserialize<'de> for ListPaperDocsFilterBy {
1861    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1862        // union deserializer
1863        use serde::de::{self, MapAccess, Visitor};
1864        struct EnumVisitor;
1865        impl<'de> Visitor<'de> for EnumVisitor {
1866            type Value = ListPaperDocsFilterBy;
1867            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
1868                f.write_str("a ListPaperDocsFilterBy structure")
1869            }
1870            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
1871                let tag: &str = match map.next_key()? {
1872                    Some(".tag") => map.next_value()?,
1873                    _ => return Err(de::Error::missing_field(".tag"))
1874                };
1875                let value = match tag {
1876                    "docs_accessed" => ListPaperDocsFilterBy::DocsAccessed,
1877                    "docs_created" => ListPaperDocsFilterBy::DocsCreated,
1878                    _ => ListPaperDocsFilterBy::Other,
1879                };
1880                crate::eat_json_fields(&mut map)?;
1881                Ok(value)
1882            }
1883        }
1884        const VARIANTS: &[&str] = &["docs_accessed",
1885                                    "docs_created",
1886                                    "other"];
1887        deserializer.deserialize_struct("ListPaperDocsFilterBy", VARIANTS, EnumVisitor)
1888    }
1889}
1890
1891impl ::serde::ser::Serialize for ListPaperDocsFilterBy {
1892    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
1893        // union serializer
1894        use serde::ser::SerializeStruct;
1895        match self {
1896            ListPaperDocsFilterBy::DocsAccessed => {
1897                // unit
1898                let mut s = serializer.serialize_struct("ListPaperDocsFilterBy", 1)?;
1899                s.serialize_field(".tag", "docs_accessed")?;
1900                s.end()
1901            }
1902            ListPaperDocsFilterBy::DocsCreated => {
1903                // unit
1904                let mut s = serializer.serialize_struct("ListPaperDocsFilterBy", 1)?;
1905                s.serialize_field(".tag", "docs_created")?;
1906                s.end()
1907            }
1908            ListPaperDocsFilterBy::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
1909        }
1910    }
1911}
1912
1913#[derive(Debug, Clone, PartialEq, Eq)]
1914#[non_exhaustive] // structs may have more fields added in the future.
1915pub struct ListPaperDocsResponse {
1916    /// The list of Paper doc IDs that can be used to access the given Paper docs or supplied to
1917    /// other API methods. The list is sorted in the order specified by the initial call to
1918    /// [`docs_list()`](crate::paper::docs_list).
1919    pub doc_ids: Vec<PaperDocId>,
1920    /// Pass the cursor into [`docs_list_continue()`](crate::paper::docs_list_continue) to paginate
1921    /// through all files. The cursor preserves all properties as specified in the original call to
1922    /// [`docs_list()`](crate::paper::docs_list).
1923    pub cursor: Cursor,
1924    /// Will be set to True if a subsequent call with the provided cursor to
1925    /// [`docs_list_continue()`](crate::paper::docs_list_continue) returns immediately with some
1926    /// results. If set to False please allow some delay before making another call to
1927    /// [`docs_list_continue()`](crate::paper::docs_list_continue).
1928    pub has_more: bool,
1929}
1930
1931impl ListPaperDocsResponse {
1932    pub fn new(doc_ids: Vec<PaperDocId>, cursor: Cursor, has_more: bool) -> Self {
1933        ListPaperDocsResponse {
1934            doc_ids,
1935            cursor,
1936            has_more,
1937        }
1938    }
1939}
1940
1941const LIST_PAPER_DOCS_RESPONSE_FIELDS: &[&str] = &["doc_ids",
1942                                                   "cursor",
1943                                                   "has_more"];
1944impl ListPaperDocsResponse {
1945    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
1946        map: V,
1947    ) -> Result<ListPaperDocsResponse, V::Error> {
1948        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
1949    }
1950
1951    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
1952        mut map: V,
1953        optional: bool,
1954    ) -> Result<Option<ListPaperDocsResponse>, V::Error> {
1955        let mut field_doc_ids = None;
1956        let mut field_cursor = None;
1957        let mut field_has_more = None;
1958        let mut nothing = true;
1959        while let Some(key) = map.next_key::<&str>()? {
1960            nothing = false;
1961            match key {
1962                "doc_ids" => {
1963                    if field_doc_ids.is_some() {
1964                        return Err(::serde::de::Error::duplicate_field("doc_ids"));
1965                    }
1966                    field_doc_ids = Some(map.next_value()?);
1967                }
1968                "cursor" => {
1969                    if field_cursor.is_some() {
1970                        return Err(::serde::de::Error::duplicate_field("cursor"));
1971                    }
1972                    field_cursor = Some(map.next_value()?);
1973                }
1974                "has_more" => {
1975                    if field_has_more.is_some() {
1976                        return Err(::serde::de::Error::duplicate_field("has_more"));
1977                    }
1978                    field_has_more = Some(map.next_value()?);
1979                }
1980                _ => {
1981                    // unknown field allowed and ignored
1982                    map.next_value::<::serde_json::Value>()?;
1983                }
1984            }
1985        }
1986        if optional && nothing {
1987            return Ok(None);
1988        }
1989        let result = ListPaperDocsResponse {
1990            doc_ids: field_doc_ids.ok_or_else(|| ::serde::de::Error::missing_field("doc_ids"))?,
1991            cursor: field_cursor.ok_or_else(|| ::serde::de::Error::missing_field("cursor"))?,
1992            has_more: field_has_more.ok_or_else(|| ::serde::de::Error::missing_field("has_more"))?,
1993        };
1994        Ok(Some(result))
1995    }
1996
1997    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
1998        &self,
1999        s: &mut S::SerializeStruct,
2000    ) -> Result<(), S::Error> {
2001        use serde::ser::SerializeStruct;
2002        s.serialize_field("doc_ids", &self.doc_ids)?;
2003        s.serialize_field("cursor", &self.cursor)?;
2004        s.serialize_field("has_more", &self.has_more)?;
2005        Ok(())
2006    }
2007}
2008
2009impl<'de> ::serde::de::Deserialize<'de> for ListPaperDocsResponse {
2010    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2011        // struct deserializer
2012        use serde::de::{MapAccess, Visitor};
2013        struct StructVisitor;
2014        impl<'de> Visitor<'de> for StructVisitor {
2015            type Value = ListPaperDocsResponse;
2016            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
2017                f.write_str("a ListPaperDocsResponse struct")
2018            }
2019            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
2020                ListPaperDocsResponse::internal_deserialize(map)
2021            }
2022        }
2023        deserializer.deserialize_struct("ListPaperDocsResponse", LIST_PAPER_DOCS_RESPONSE_FIELDS, StructVisitor)
2024    }
2025}
2026
2027impl ::serde::ser::Serialize for ListPaperDocsResponse {
2028    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
2029        // struct serializer
2030        use serde::ser::SerializeStruct;
2031        let mut s = serializer.serialize_struct("ListPaperDocsResponse", 3)?;
2032        self.internal_serialize::<S>(&mut s)?;
2033        s.end()
2034    }
2035}
2036
2037#[derive(Debug, Clone, PartialEq, Eq)]
2038#[non_exhaustive] // variants may be added in the future
2039pub enum ListPaperDocsSortBy {
2040    /// Sorts the Paper docs by the time they were last accessed.
2041    Accessed,
2042    /// Sorts the Paper docs by the time they were last modified.
2043    Modified,
2044    /// Sorts the Paper docs by the creation time.
2045    Created,
2046    /// Catch-all used for unrecognized values returned from the server. Encountering this value
2047    /// typically indicates that this SDK version is out of date.
2048    Other,
2049}
2050
2051impl<'de> ::serde::de::Deserialize<'de> for ListPaperDocsSortBy {
2052    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2053        // union deserializer
2054        use serde::de::{self, MapAccess, Visitor};
2055        struct EnumVisitor;
2056        impl<'de> Visitor<'de> for EnumVisitor {
2057            type Value = ListPaperDocsSortBy;
2058            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
2059                f.write_str("a ListPaperDocsSortBy structure")
2060            }
2061            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
2062                let tag: &str = match map.next_key()? {
2063                    Some(".tag") => map.next_value()?,
2064                    _ => return Err(de::Error::missing_field(".tag"))
2065                };
2066                let value = match tag {
2067                    "accessed" => ListPaperDocsSortBy::Accessed,
2068                    "modified" => ListPaperDocsSortBy::Modified,
2069                    "created" => ListPaperDocsSortBy::Created,
2070                    _ => ListPaperDocsSortBy::Other,
2071                };
2072                crate::eat_json_fields(&mut map)?;
2073                Ok(value)
2074            }
2075        }
2076        const VARIANTS: &[&str] = &["accessed",
2077                                    "modified",
2078                                    "created",
2079                                    "other"];
2080        deserializer.deserialize_struct("ListPaperDocsSortBy", VARIANTS, EnumVisitor)
2081    }
2082}
2083
2084impl ::serde::ser::Serialize for ListPaperDocsSortBy {
2085    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
2086        // union serializer
2087        use serde::ser::SerializeStruct;
2088        match self {
2089            ListPaperDocsSortBy::Accessed => {
2090                // unit
2091                let mut s = serializer.serialize_struct("ListPaperDocsSortBy", 1)?;
2092                s.serialize_field(".tag", "accessed")?;
2093                s.end()
2094            }
2095            ListPaperDocsSortBy::Modified => {
2096                // unit
2097                let mut s = serializer.serialize_struct("ListPaperDocsSortBy", 1)?;
2098                s.serialize_field(".tag", "modified")?;
2099                s.end()
2100            }
2101            ListPaperDocsSortBy::Created => {
2102                // unit
2103                let mut s = serializer.serialize_struct("ListPaperDocsSortBy", 1)?;
2104                s.serialize_field(".tag", "created")?;
2105                s.end()
2106            }
2107            ListPaperDocsSortBy::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
2108        }
2109    }
2110}
2111
2112#[derive(Debug, Clone, PartialEq, Eq)]
2113#[non_exhaustive] // variants may be added in the future
2114pub enum ListPaperDocsSortOrder {
2115    /// Sorts the search result in ascending order.
2116    Ascending,
2117    /// Sorts the search result in descending order.
2118    Descending,
2119    /// Catch-all used for unrecognized values returned from the server. Encountering this value
2120    /// typically indicates that this SDK version is out of date.
2121    Other,
2122}
2123
2124impl<'de> ::serde::de::Deserialize<'de> for ListPaperDocsSortOrder {
2125    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2126        // union deserializer
2127        use serde::de::{self, MapAccess, Visitor};
2128        struct EnumVisitor;
2129        impl<'de> Visitor<'de> for EnumVisitor {
2130            type Value = ListPaperDocsSortOrder;
2131            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
2132                f.write_str("a ListPaperDocsSortOrder structure")
2133            }
2134            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
2135                let tag: &str = match map.next_key()? {
2136                    Some(".tag") => map.next_value()?,
2137                    _ => return Err(de::Error::missing_field(".tag"))
2138                };
2139                let value = match tag {
2140                    "ascending" => ListPaperDocsSortOrder::Ascending,
2141                    "descending" => ListPaperDocsSortOrder::Descending,
2142                    _ => ListPaperDocsSortOrder::Other,
2143                };
2144                crate::eat_json_fields(&mut map)?;
2145                Ok(value)
2146            }
2147        }
2148        const VARIANTS: &[&str] = &["ascending",
2149                                    "descending",
2150                                    "other"];
2151        deserializer.deserialize_struct("ListPaperDocsSortOrder", VARIANTS, EnumVisitor)
2152    }
2153}
2154
2155impl ::serde::ser::Serialize for ListPaperDocsSortOrder {
2156    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
2157        // union serializer
2158        use serde::ser::SerializeStruct;
2159        match self {
2160            ListPaperDocsSortOrder::Ascending => {
2161                // unit
2162                let mut s = serializer.serialize_struct("ListPaperDocsSortOrder", 1)?;
2163                s.serialize_field(".tag", "ascending")?;
2164                s.end()
2165            }
2166            ListPaperDocsSortOrder::Descending => {
2167                // unit
2168                let mut s = serializer.serialize_struct("ListPaperDocsSortOrder", 1)?;
2169                s.serialize_field(".tag", "descending")?;
2170                s.end()
2171            }
2172            ListPaperDocsSortOrder::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
2173        }
2174    }
2175}
2176
2177#[derive(Debug, Clone, PartialEq, Eq)]
2178#[non_exhaustive] // variants may be added in the future
2179pub enum ListUsersCursorError {
2180    /// Your account does not have permissions to perform this action. This may be due to it only
2181    /// having access to Paper as files in the Dropbox filesystem. For more information, refer to
2182    /// the [Paper Migration
2183    /// Guide](https://www.dropbox.com/lp/developers/reference/paper-migration-guide).
2184    InsufficientPermissions,
2185    /// The required doc was not found.
2186    DocNotFound,
2187    CursorError(PaperApiCursorError),
2188    /// Catch-all used for unrecognized values returned from the server. Encountering this value
2189    /// typically indicates that this SDK version is out of date.
2190    Other,
2191}
2192
2193impl<'de> ::serde::de::Deserialize<'de> for ListUsersCursorError {
2194    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2195        // union deserializer
2196        use serde::de::{self, MapAccess, Visitor};
2197        struct EnumVisitor;
2198        impl<'de> Visitor<'de> for EnumVisitor {
2199            type Value = ListUsersCursorError;
2200            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
2201                f.write_str("a ListUsersCursorError structure")
2202            }
2203            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
2204                let tag: &str = match map.next_key()? {
2205                    Some(".tag") => map.next_value()?,
2206                    _ => return Err(de::Error::missing_field(".tag"))
2207                };
2208                let value = match tag {
2209                    "insufficient_permissions" => ListUsersCursorError::InsufficientPermissions,
2210                    "doc_not_found" => ListUsersCursorError::DocNotFound,
2211                    "cursor_error" => {
2212                        match map.next_key()? {
2213                            Some("cursor_error") => ListUsersCursorError::CursorError(map.next_value()?),
2214                            None => return Err(de::Error::missing_field("cursor_error")),
2215                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
2216                        }
2217                    }
2218                    _ => ListUsersCursorError::Other,
2219                };
2220                crate::eat_json_fields(&mut map)?;
2221                Ok(value)
2222            }
2223        }
2224        const VARIANTS: &[&str] = &["insufficient_permissions",
2225                                    "other",
2226                                    "doc_not_found",
2227                                    "cursor_error"];
2228        deserializer.deserialize_struct("ListUsersCursorError", VARIANTS, EnumVisitor)
2229    }
2230}
2231
2232impl ::serde::ser::Serialize for ListUsersCursorError {
2233    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
2234        // union serializer
2235        use serde::ser::SerializeStruct;
2236        match self {
2237            ListUsersCursorError::InsufficientPermissions => {
2238                // unit
2239                let mut s = serializer.serialize_struct("ListUsersCursorError", 1)?;
2240                s.serialize_field(".tag", "insufficient_permissions")?;
2241                s.end()
2242            }
2243            ListUsersCursorError::DocNotFound => {
2244                // unit
2245                let mut s = serializer.serialize_struct("ListUsersCursorError", 1)?;
2246                s.serialize_field(".tag", "doc_not_found")?;
2247                s.end()
2248            }
2249            ListUsersCursorError::CursorError(x) => {
2250                // union or polymporphic struct
2251                let mut s = serializer.serialize_struct("ListUsersCursorError", 2)?;
2252                s.serialize_field(".tag", "cursor_error")?;
2253                s.serialize_field("cursor_error", x)?;
2254                s.end()
2255            }
2256            ListUsersCursorError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
2257        }
2258    }
2259}
2260
2261impl ::std::error::Error for ListUsersCursorError {
2262    fn source(&self) -> Option<&(dyn ::std::error::Error + 'static)> {
2263        match self {
2264            ListUsersCursorError::CursorError(inner) => Some(inner),
2265            _ => None,
2266        }
2267    }
2268}
2269
2270impl ::std::fmt::Display for ListUsersCursorError {
2271    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
2272        match self {
2273            ListUsersCursorError::DocNotFound => f.write_str("The required doc was not found."),
2274            ListUsersCursorError::CursorError(inner) => write!(f, "ListUsersCursorError: {}", inner),
2275            _ => write!(f, "{:?}", *self),
2276        }
2277    }
2278}
2279
2280// union extends PaperApiBaseError
2281impl From<PaperApiBaseError> for ListUsersCursorError {
2282    fn from(parent: PaperApiBaseError) -> Self {
2283        match parent {
2284            PaperApiBaseError::InsufficientPermissions => ListUsersCursorError::InsufficientPermissions,
2285            PaperApiBaseError::Other => ListUsersCursorError::Other,
2286        }
2287    }
2288}
2289#[derive(Debug, Clone, PartialEq, Eq)]
2290#[non_exhaustive] // structs may have more fields added in the future.
2291pub struct ListUsersOnFolderArgs {
2292    /// The Paper doc ID.
2293    pub doc_id: PaperDocId,
2294    /// Size limit per batch. The maximum number of users that can be retrieved per batch is 1000.
2295    /// Higher value results in invalid arguments error.
2296    pub limit: i32,
2297}
2298
2299impl ListUsersOnFolderArgs {
2300    pub fn new(doc_id: PaperDocId) -> Self {
2301        ListUsersOnFolderArgs {
2302            doc_id,
2303            limit: 1000,
2304        }
2305    }
2306
2307    pub fn with_limit(mut self, value: i32) -> Self {
2308        self.limit = value;
2309        self
2310    }
2311}
2312
2313const LIST_USERS_ON_FOLDER_ARGS_FIELDS: &[&str] = &["doc_id",
2314                                                    "limit"];
2315impl ListUsersOnFolderArgs {
2316    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
2317        map: V,
2318    ) -> Result<ListUsersOnFolderArgs, V::Error> {
2319        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
2320    }
2321
2322    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
2323        mut map: V,
2324        optional: bool,
2325    ) -> Result<Option<ListUsersOnFolderArgs>, V::Error> {
2326        let mut field_doc_id = None;
2327        let mut field_limit = None;
2328        let mut nothing = true;
2329        while let Some(key) = map.next_key::<&str>()? {
2330            nothing = false;
2331            match key {
2332                "doc_id" => {
2333                    if field_doc_id.is_some() {
2334                        return Err(::serde::de::Error::duplicate_field("doc_id"));
2335                    }
2336                    field_doc_id = Some(map.next_value()?);
2337                }
2338                "limit" => {
2339                    if field_limit.is_some() {
2340                        return Err(::serde::de::Error::duplicate_field("limit"));
2341                    }
2342                    field_limit = Some(map.next_value()?);
2343                }
2344                _ => {
2345                    // unknown field allowed and ignored
2346                    map.next_value::<::serde_json::Value>()?;
2347                }
2348            }
2349        }
2350        if optional && nothing {
2351            return Ok(None);
2352        }
2353        let result = ListUsersOnFolderArgs {
2354            doc_id: field_doc_id.ok_or_else(|| ::serde::de::Error::missing_field("doc_id"))?,
2355            limit: field_limit.unwrap_or(1000),
2356        };
2357        Ok(Some(result))
2358    }
2359
2360    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
2361        &self,
2362        s: &mut S::SerializeStruct,
2363    ) -> Result<(), S::Error> {
2364        use serde::ser::SerializeStruct;
2365        s.serialize_field("doc_id", &self.doc_id)?;
2366        if self.limit != 1000 {
2367            s.serialize_field("limit", &self.limit)?;
2368        }
2369        Ok(())
2370    }
2371}
2372
2373impl<'de> ::serde::de::Deserialize<'de> for ListUsersOnFolderArgs {
2374    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2375        // struct deserializer
2376        use serde::de::{MapAccess, Visitor};
2377        struct StructVisitor;
2378        impl<'de> Visitor<'de> for StructVisitor {
2379            type Value = ListUsersOnFolderArgs;
2380            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
2381                f.write_str("a ListUsersOnFolderArgs struct")
2382            }
2383            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
2384                ListUsersOnFolderArgs::internal_deserialize(map)
2385            }
2386        }
2387        deserializer.deserialize_struct("ListUsersOnFolderArgs", LIST_USERS_ON_FOLDER_ARGS_FIELDS, StructVisitor)
2388    }
2389}
2390
2391impl ::serde::ser::Serialize for ListUsersOnFolderArgs {
2392    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
2393        // struct serializer
2394        use serde::ser::SerializeStruct;
2395        let mut s = serializer.serialize_struct("ListUsersOnFolderArgs", 2)?;
2396        self.internal_serialize::<S>(&mut s)?;
2397        s.end()
2398    }
2399}
2400
2401// struct extends RefPaperDoc
2402impl From<ListUsersOnFolderArgs> for RefPaperDoc {
2403    fn from(subtype: ListUsersOnFolderArgs) -> Self {
2404        Self {
2405            doc_id: subtype.doc_id,
2406        }
2407    }
2408}
2409#[derive(Debug, Clone, PartialEq, Eq)]
2410#[non_exhaustive] // structs may have more fields added in the future.
2411pub struct ListUsersOnFolderContinueArgs {
2412    /// The Paper doc ID.
2413    pub doc_id: PaperDocId,
2414    /// The cursor obtained from [`docs_folder_users_list()`](crate::paper::docs_folder_users_list)
2415    /// or [`docs_folder_users_list_continue()`](crate::paper::docs_folder_users_list_continue).
2416    /// Allows for pagination.
2417    pub cursor: String,
2418}
2419
2420impl ListUsersOnFolderContinueArgs {
2421    pub fn new(doc_id: PaperDocId, cursor: String) -> Self {
2422        ListUsersOnFolderContinueArgs {
2423            doc_id,
2424            cursor,
2425        }
2426    }
2427}
2428
2429const LIST_USERS_ON_FOLDER_CONTINUE_ARGS_FIELDS: &[&str] = &["doc_id",
2430                                                             "cursor"];
2431impl ListUsersOnFolderContinueArgs {
2432    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
2433        map: V,
2434    ) -> Result<ListUsersOnFolderContinueArgs, V::Error> {
2435        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
2436    }
2437
2438    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
2439        mut map: V,
2440        optional: bool,
2441    ) -> Result<Option<ListUsersOnFolderContinueArgs>, V::Error> {
2442        let mut field_doc_id = None;
2443        let mut field_cursor = None;
2444        let mut nothing = true;
2445        while let Some(key) = map.next_key::<&str>()? {
2446            nothing = false;
2447            match key {
2448                "doc_id" => {
2449                    if field_doc_id.is_some() {
2450                        return Err(::serde::de::Error::duplicate_field("doc_id"));
2451                    }
2452                    field_doc_id = Some(map.next_value()?);
2453                }
2454                "cursor" => {
2455                    if field_cursor.is_some() {
2456                        return Err(::serde::de::Error::duplicate_field("cursor"));
2457                    }
2458                    field_cursor = Some(map.next_value()?);
2459                }
2460                _ => {
2461                    // unknown field allowed and ignored
2462                    map.next_value::<::serde_json::Value>()?;
2463                }
2464            }
2465        }
2466        if optional && nothing {
2467            return Ok(None);
2468        }
2469        let result = ListUsersOnFolderContinueArgs {
2470            doc_id: field_doc_id.ok_or_else(|| ::serde::de::Error::missing_field("doc_id"))?,
2471            cursor: field_cursor.ok_or_else(|| ::serde::de::Error::missing_field("cursor"))?,
2472        };
2473        Ok(Some(result))
2474    }
2475
2476    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
2477        &self,
2478        s: &mut S::SerializeStruct,
2479    ) -> Result<(), S::Error> {
2480        use serde::ser::SerializeStruct;
2481        s.serialize_field("doc_id", &self.doc_id)?;
2482        s.serialize_field("cursor", &self.cursor)?;
2483        Ok(())
2484    }
2485}
2486
2487impl<'de> ::serde::de::Deserialize<'de> for ListUsersOnFolderContinueArgs {
2488    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2489        // struct deserializer
2490        use serde::de::{MapAccess, Visitor};
2491        struct StructVisitor;
2492        impl<'de> Visitor<'de> for StructVisitor {
2493            type Value = ListUsersOnFolderContinueArgs;
2494            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
2495                f.write_str("a ListUsersOnFolderContinueArgs struct")
2496            }
2497            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
2498                ListUsersOnFolderContinueArgs::internal_deserialize(map)
2499            }
2500        }
2501        deserializer.deserialize_struct("ListUsersOnFolderContinueArgs", LIST_USERS_ON_FOLDER_CONTINUE_ARGS_FIELDS, StructVisitor)
2502    }
2503}
2504
2505impl ::serde::ser::Serialize for ListUsersOnFolderContinueArgs {
2506    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
2507        // struct serializer
2508        use serde::ser::SerializeStruct;
2509        let mut s = serializer.serialize_struct("ListUsersOnFolderContinueArgs", 2)?;
2510        self.internal_serialize::<S>(&mut s)?;
2511        s.end()
2512    }
2513}
2514
2515// struct extends RefPaperDoc
2516impl From<ListUsersOnFolderContinueArgs> for RefPaperDoc {
2517    fn from(subtype: ListUsersOnFolderContinueArgs) -> Self {
2518        Self {
2519            doc_id: subtype.doc_id,
2520        }
2521    }
2522}
2523#[derive(Debug, Clone, PartialEq, Eq)]
2524#[non_exhaustive] // structs may have more fields added in the future.
2525pub struct ListUsersOnFolderResponse {
2526    /// List of email addresses that are invited on the Paper folder.
2527    pub invitees: Vec<crate::types::sharing::InviteeInfo>,
2528    /// List of users that are invited on the Paper folder.
2529    pub users: Vec<crate::types::sharing::UserInfo>,
2530    /// Pass the cursor into
2531    /// [`docs_folder_users_list_continue()`](crate::paper::docs_folder_users_list_continue) to
2532    /// paginate through all users. The cursor preserves all properties as specified in the original
2533    /// call to [`docs_folder_users_list()`](crate::paper::docs_folder_users_list).
2534    pub cursor: Cursor,
2535    /// Will be set to True if a subsequent call with the provided cursor to
2536    /// [`docs_folder_users_list_continue()`](crate::paper::docs_folder_users_list_continue) returns
2537    /// immediately with some results. If set to False please allow some delay before making another
2538    /// call to
2539    /// [`docs_folder_users_list_continue()`](crate::paper::docs_folder_users_list_continue).
2540    pub has_more: bool,
2541}
2542
2543impl ListUsersOnFolderResponse {
2544    pub fn new(
2545        invitees: Vec<crate::types::sharing::InviteeInfo>,
2546        users: Vec<crate::types::sharing::UserInfo>,
2547        cursor: Cursor,
2548        has_more: bool,
2549    ) -> Self {
2550        ListUsersOnFolderResponse {
2551            invitees,
2552            users,
2553            cursor,
2554            has_more,
2555        }
2556    }
2557}
2558
2559const LIST_USERS_ON_FOLDER_RESPONSE_FIELDS: &[&str] = &["invitees",
2560                                                        "users",
2561                                                        "cursor",
2562                                                        "has_more"];
2563impl ListUsersOnFolderResponse {
2564    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
2565        map: V,
2566    ) -> Result<ListUsersOnFolderResponse, V::Error> {
2567        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
2568    }
2569
2570    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
2571        mut map: V,
2572        optional: bool,
2573    ) -> Result<Option<ListUsersOnFolderResponse>, V::Error> {
2574        let mut field_invitees = None;
2575        let mut field_users = None;
2576        let mut field_cursor = None;
2577        let mut field_has_more = None;
2578        let mut nothing = true;
2579        while let Some(key) = map.next_key::<&str>()? {
2580            nothing = false;
2581            match key {
2582                "invitees" => {
2583                    if field_invitees.is_some() {
2584                        return Err(::serde::de::Error::duplicate_field("invitees"));
2585                    }
2586                    field_invitees = Some(map.next_value()?);
2587                }
2588                "users" => {
2589                    if field_users.is_some() {
2590                        return Err(::serde::de::Error::duplicate_field("users"));
2591                    }
2592                    field_users = Some(map.next_value()?);
2593                }
2594                "cursor" => {
2595                    if field_cursor.is_some() {
2596                        return Err(::serde::de::Error::duplicate_field("cursor"));
2597                    }
2598                    field_cursor = Some(map.next_value()?);
2599                }
2600                "has_more" => {
2601                    if field_has_more.is_some() {
2602                        return Err(::serde::de::Error::duplicate_field("has_more"));
2603                    }
2604                    field_has_more = Some(map.next_value()?);
2605                }
2606                _ => {
2607                    // unknown field allowed and ignored
2608                    map.next_value::<::serde_json::Value>()?;
2609                }
2610            }
2611        }
2612        if optional && nothing {
2613            return Ok(None);
2614        }
2615        let result = ListUsersOnFolderResponse {
2616            invitees: field_invitees.ok_or_else(|| ::serde::de::Error::missing_field("invitees"))?,
2617            users: field_users.ok_or_else(|| ::serde::de::Error::missing_field("users"))?,
2618            cursor: field_cursor.ok_or_else(|| ::serde::de::Error::missing_field("cursor"))?,
2619            has_more: field_has_more.ok_or_else(|| ::serde::de::Error::missing_field("has_more"))?,
2620        };
2621        Ok(Some(result))
2622    }
2623
2624    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
2625        &self,
2626        s: &mut S::SerializeStruct,
2627    ) -> Result<(), S::Error> {
2628        use serde::ser::SerializeStruct;
2629        s.serialize_field("invitees", &self.invitees)?;
2630        s.serialize_field("users", &self.users)?;
2631        s.serialize_field("cursor", &self.cursor)?;
2632        s.serialize_field("has_more", &self.has_more)?;
2633        Ok(())
2634    }
2635}
2636
2637impl<'de> ::serde::de::Deserialize<'de> for ListUsersOnFolderResponse {
2638    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2639        // struct deserializer
2640        use serde::de::{MapAccess, Visitor};
2641        struct StructVisitor;
2642        impl<'de> Visitor<'de> for StructVisitor {
2643            type Value = ListUsersOnFolderResponse;
2644            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
2645                f.write_str("a ListUsersOnFolderResponse struct")
2646            }
2647            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
2648                ListUsersOnFolderResponse::internal_deserialize(map)
2649            }
2650        }
2651        deserializer.deserialize_struct("ListUsersOnFolderResponse", LIST_USERS_ON_FOLDER_RESPONSE_FIELDS, StructVisitor)
2652    }
2653}
2654
2655impl ::serde::ser::Serialize for ListUsersOnFolderResponse {
2656    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
2657        // struct serializer
2658        use serde::ser::SerializeStruct;
2659        let mut s = serializer.serialize_struct("ListUsersOnFolderResponse", 4)?;
2660        self.internal_serialize::<S>(&mut s)?;
2661        s.end()
2662    }
2663}
2664
2665#[derive(Debug, Clone, PartialEq, Eq)]
2666#[non_exhaustive] // structs may have more fields added in the future.
2667pub struct ListUsersOnPaperDocArgs {
2668    /// The Paper doc ID.
2669    pub doc_id: PaperDocId,
2670    /// Size limit per batch. The maximum number of users that can be retrieved per batch is 1000.
2671    /// Higher value results in invalid arguments error.
2672    pub limit: i32,
2673    /// Specify this attribute if you want to obtain users that have already accessed the Paper doc.
2674    pub filter_by: UserOnPaperDocFilter,
2675}
2676
2677impl ListUsersOnPaperDocArgs {
2678    pub fn new(doc_id: PaperDocId) -> Self {
2679        ListUsersOnPaperDocArgs {
2680            doc_id,
2681            limit: 1000,
2682            filter_by: UserOnPaperDocFilter::Shared,
2683        }
2684    }
2685
2686    pub fn with_limit(mut self, value: i32) -> Self {
2687        self.limit = value;
2688        self
2689    }
2690
2691    pub fn with_filter_by(mut self, value: UserOnPaperDocFilter) -> Self {
2692        self.filter_by = value;
2693        self
2694    }
2695}
2696
2697const LIST_USERS_ON_PAPER_DOC_ARGS_FIELDS: &[&str] = &["doc_id",
2698                                                       "limit",
2699                                                       "filter_by"];
2700impl ListUsersOnPaperDocArgs {
2701    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
2702        map: V,
2703    ) -> Result<ListUsersOnPaperDocArgs, V::Error> {
2704        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
2705    }
2706
2707    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
2708        mut map: V,
2709        optional: bool,
2710    ) -> Result<Option<ListUsersOnPaperDocArgs>, V::Error> {
2711        let mut field_doc_id = None;
2712        let mut field_limit = None;
2713        let mut field_filter_by = None;
2714        let mut nothing = true;
2715        while let Some(key) = map.next_key::<&str>()? {
2716            nothing = false;
2717            match key {
2718                "doc_id" => {
2719                    if field_doc_id.is_some() {
2720                        return Err(::serde::de::Error::duplicate_field("doc_id"));
2721                    }
2722                    field_doc_id = Some(map.next_value()?);
2723                }
2724                "limit" => {
2725                    if field_limit.is_some() {
2726                        return Err(::serde::de::Error::duplicate_field("limit"));
2727                    }
2728                    field_limit = Some(map.next_value()?);
2729                }
2730                "filter_by" => {
2731                    if field_filter_by.is_some() {
2732                        return Err(::serde::de::Error::duplicate_field("filter_by"));
2733                    }
2734                    field_filter_by = Some(map.next_value()?);
2735                }
2736                _ => {
2737                    // unknown field allowed and ignored
2738                    map.next_value::<::serde_json::Value>()?;
2739                }
2740            }
2741        }
2742        if optional && nothing {
2743            return Ok(None);
2744        }
2745        let result = ListUsersOnPaperDocArgs {
2746            doc_id: field_doc_id.ok_or_else(|| ::serde::de::Error::missing_field("doc_id"))?,
2747            limit: field_limit.unwrap_or(1000),
2748            filter_by: field_filter_by.unwrap_or(UserOnPaperDocFilter::Shared),
2749        };
2750        Ok(Some(result))
2751    }
2752
2753    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
2754        &self,
2755        s: &mut S::SerializeStruct,
2756    ) -> Result<(), S::Error> {
2757        use serde::ser::SerializeStruct;
2758        s.serialize_field("doc_id", &self.doc_id)?;
2759        if self.limit != 1000 {
2760            s.serialize_field("limit", &self.limit)?;
2761        }
2762        if self.filter_by != UserOnPaperDocFilter::Shared {
2763            s.serialize_field("filter_by", &self.filter_by)?;
2764        }
2765        Ok(())
2766    }
2767}
2768
2769impl<'de> ::serde::de::Deserialize<'de> for ListUsersOnPaperDocArgs {
2770    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2771        // struct deserializer
2772        use serde::de::{MapAccess, Visitor};
2773        struct StructVisitor;
2774        impl<'de> Visitor<'de> for StructVisitor {
2775            type Value = ListUsersOnPaperDocArgs;
2776            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
2777                f.write_str("a ListUsersOnPaperDocArgs struct")
2778            }
2779            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
2780                ListUsersOnPaperDocArgs::internal_deserialize(map)
2781            }
2782        }
2783        deserializer.deserialize_struct("ListUsersOnPaperDocArgs", LIST_USERS_ON_PAPER_DOC_ARGS_FIELDS, StructVisitor)
2784    }
2785}
2786
2787impl ::serde::ser::Serialize for ListUsersOnPaperDocArgs {
2788    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
2789        // struct serializer
2790        use serde::ser::SerializeStruct;
2791        let mut s = serializer.serialize_struct("ListUsersOnPaperDocArgs", 3)?;
2792        self.internal_serialize::<S>(&mut s)?;
2793        s.end()
2794    }
2795}
2796
2797// struct extends RefPaperDoc
2798impl From<ListUsersOnPaperDocArgs> for RefPaperDoc {
2799    fn from(subtype: ListUsersOnPaperDocArgs) -> Self {
2800        Self {
2801            doc_id: subtype.doc_id,
2802        }
2803    }
2804}
2805#[derive(Debug, Clone, PartialEq, Eq)]
2806#[non_exhaustive] // structs may have more fields added in the future.
2807pub struct ListUsersOnPaperDocContinueArgs {
2808    /// The Paper doc ID.
2809    pub doc_id: PaperDocId,
2810    /// The cursor obtained from [`docs_users_list()`](crate::paper::docs_users_list) or
2811    /// [`docs_users_list_continue()`](crate::paper::docs_users_list_continue). Allows for
2812    /// pagination.
2813    pub cursor: String,
2814}
2815
2816impl ListUsersOnPaperDocContinueArgs {
2817    pub fn new(doc_id: PaperDocId, cursor: String) -> Self {
2818        ListUsersOnPaperDocContinueArgs {
2819            doc_id,
2820            cursor,
2821        }
2822    }
2823}
2824
2825const LIST_USERS_ON_PAPER_DOC_CONTINUE_ARGS_FIELDS: &[&str] = &["doc_id",
2826                                                                "cursor"];
2827impl ListUsersOnPaperDocContinueArgs {
2828    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
2829        map: V,
2830    ) -> Result<ListUsersOnPaperDocContinueArgs, V::Error> {
2831        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
2832    }
2833
2834    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
2835        mut map: V,
2836        optional: bool,
2837    ) -> Result<Option<ListUsersOnPaperDocContinueArgs>, V::Error> {
2838        let mut field_doc_id = None;
2839        let mut field_cursor = None;
2840        let mut nothing = true;
2841        while let Some(key) = map.next_key::<&str>()? {
2842            nothing = false;
2843            match key {
2844                "doc_id" => {
2845                    if field_doc_id.is_some() {
2846                        return Err(::serde::de::Error::duplicate_field("doc_id"));
2847                    }
2848                    field_doc_id = Some(map.next_value()?);
2849                }
2850                "cursor" => {
2851                    if field_cursor.is_some() {
2852                        return Err(::serde::de::Error::duplicate_field("cursor"));
2853                    }
2854                    field_cursor = Some(map.next_value()?);
2855                }
2856                _ => {
2857                    // unknown field allowed and ignored
2858                    map.next_value::<::serde_json::Value>()?;
2859                }
2860            }
2861        }
2862        if optional && nothing {
2863            return Ok(None);
2864        }
2865        let result = ListUsersOnPaperDocContinueArgs {
2866            doc_id: field_doc_id.ok_or_else(|| ::serde::de::Error::missing_field("doc_id"))?,
2867            cursor: field_cursor.ok_or_else(|| ::serde::de::Error::missing_field("cursor"))?,
2868        };
2869        Ok(Some(result))
2870    }
2871
2872    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
2873        &self,
2874        s: &mut S::SerializeStruct,
2875    ) -> Result<(), S::Error> {
2876        use serde::ser::SerializeStruct;
2877        s.serialize_field("doc_id", &self.doc_id)?;
2878        s.serialize_field("cursor", &self.cursor)?;
2879        Ok(())
2880    }
2881}
2882
2883impl<'de> ::serde::de::Deserialize<'de> for ListUsersOnPaperDocContinueArgs {
2884    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2885        // struct deserializer
2886        use serde::de::{MapAccess, Visitor};
2887        struct StructVisitor;
2888        impl<'de> Visitor<'de> for StructVisitor {
2889            type Value = ListUsersOnPaperDocContinueArgs;
2890            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
2891                f.write_str("a ListUsersOnPaperDocContinueArgs struct")
2892            }
2893            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
2894                ListUsersOnPaperDocContinueArgs::internal_deserialize(map)
2895            }
2896        }
2897        deserializer.deserialize_struct("ListUsersOnPaperDocContinueArgs", LIST_USERS_ON_PAPER_DOC_CONTINUE_ARGS_FIELDS, StructVisitor)
2898    }
2899}
2900
2901impl ::serde::ser::Serialize for ListUsersOnPaperDocContinueArgs {
2902    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
2903        // struct serializer
2904        use serde::ser::SerializeStruct;
2905        let mut s = serializer.serialize_struct("ListUsersOnPaperDocContinueArgs", 2)?;
2906        self.internal_serialize::<S>(&mut s)?;
2907        s.end()
2908    }
2909}
2910
2911// struct extends RefPaperDoc
2912impl From<ListUsersOnPaperDocContinueArgs> for RefPaperDoc {
2913    fn from(subtype: ListUsersOnPaperDocContinueArgs) -> Self {
2914        Self {
2915            doc_id: subtype.doc_id,
2916        }
2917    }
2918}
2919#[derive(Debug, Clone, PartialEq, Eq)]
2920#[non_exhaustive] // structs may have more fields added in the future.
2921pub struct ListUsersOnPaperDocResponse {
2922    /// List of email addresses with their respective permission levels that are invited on the
2923    /// Paper doc.
2924    pub invitees: Vec<InviteeInfoWithPermissionLevel>,
2925    /// List of users with their respective permission levels that are invited on the Paper folder.
2926    pub users: Vec<UserInfoWithPermissionLevel>,
2927    /// The Paper doc owner. This field is populated on every single response.
2928    pub doc_owner: crate::types::sharing::UserInfo,
2929    /// Pass the cursor into [`docs_users_list_continue()`](crate::paper::docs_users_list_continue)
2930    /// to paginate through all users. The cursor preserves all properties as specified in the
2931    /// original call to [`docs_users_list()`](crate::paper::docs_users_list).
2932    pub cursor: Cursor,
2933    /// Will be set to True if a subsequent call with the provided cursor to
2934    /// [`docs_users_list_continue()`](crate::paper::docs_users_list_continue) returns immediately
2935    /// with some results. If set to False please allow some delay before making another call to
2936    /// [`docs_users_list_continue()`](crate::paper::docs_users_list_continue).
2937    pub has_more: bool,
2938}
2939
2940impl ListUsersOnPaperDocResponse {
2941    pub fn new(
2942        invitees: Vec<InviteeInfoWithPermissionLevel>,
2943        users: Vec<UserInfoWithPermissionLevel>,
2944        doc_owner: crate::types::sharing::UserInfo,
2945        cursor: Cursor,
2946        has_more: bool,
2947    ) -> Self {
2948        ListUsersOnPaperDocResponse {
2949            invitees,
2950            users,
2951            doc_owner,
2952            cursor,
2953            has_more,
2954        }
2955    }
2956}
2957
2958const LIST_USERS_ON_PAPER_DOC_RESPONSE_FIELDS: &[&str] = &["invitees",
2959                                                           "users",
2960                                                           "doc_owner",
2961                                                           "cursor",
2962                                                           "has_more"];
2963impl ListUsersOnPaperDocResponse {
2964    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
2965        map: V,
2966    ) -> Result<ListUsersOnPaperDocResponse, V::Error> {
2967        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
2968    }
2969
2970    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
2971        mut map: V,
2972        optional: bool,
2973    ) -> Result<Option<ListUsersOnPaperDocResponse>, V::Error> {
2974        let mut field_invitees = None;
2975        let mut field_users = None;
2976        let mut field_doc_owner = None;
2977        let mut field_cursor = None;
2978        let mut field_has_more = None;
2979        let mut nothing = true;
2980        while let Some(key) = map.next_key::<&str>()? {
2981            nothing = false;
2982            match key {
2983                "invitees" => {
2984                    if field_invitees.is_some() {
2985                        return Err(::serde::de::Error::duplicate_field("invitees"));
2986                    }
2987                    field_invitees = Some(map.next_value()?);
2988                }
2989                "users" => {
2990                    if field_users.is_some() {
2991                        return Err(::serde::de::Error::duplicate_field("users"));
2992                    }
2993                    field_users = Some(map.next_value()?);
2994                }
2995                "doc_owner" => {
2996                    if field_doc_owner.is_some() {
2997                        return Err(::serde::de::Error::duplicate_field("doc_owner"));
2998                    }
2999                    field_doc_owner = Some(map.next_value()?);
3000                }
3001                "cursor" => {
3002                    if field_cursor.is_some() {
3003                        return Err(::serde::de::Error::duplicate_field("cursor"));
3004                    }
3005                    field_cursor = Some(map.next_value()?);
3006                }
3007                "has_more" => {
3008                    if field_has_more.is_some() {
3009                        return Err(::serde::de::Error::duplicate_field("has_more"));
3010                    }
3011                    field_has_more = Some(map.next_value()?);
3012                }
3013                _ => {
3014                    // unknown field allowed and ignored
3015                    map.next_value::<::serde_json::Value>()?;
3016                }
3017            }
3018        }
3019        if optional && nothing {
3020            return Ok(None);
3021        }
3022        let result = ListUsersOnPaperDocResponse {
3023            invitees: field_invitees.ok_or_else(|| ::serde::de::Error::missing_field("invitees"))?,
3024            users: field_users.ok_or_else(|| ::serde::de::Error::missing_field("users"))?,
3025            doc_owner: field_doc_owner.ok_or_else(|| ::serde::de::Error::missing_field("doc_owner"))?,
3026            cursor: field_cursor.ok_or_else(|| ::serde::de::Error::missing_field("cursor"))?,
3027            has_more: field_has_more.ok_or_else(|| ::serde::de::Error::missing_field("has_more"))?,
3028        };
3029        Ok(Some(result))
3030    }
3031
3032    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
3033        &self,
3034        s: &mut S::SerializeStruct,
3035    ) -> Result<(), S::Error> {
3036        use serde::ser::SerializeStruct;
3037        s.serialize_field("invitees", &self.invitees)?;
3038        s.serialize_field("users", &self.users)?;
3039        s.serialize_field("doc_owner", &self.doc_owner)?;
3040        s.serialize_field("cursor", &self.cursor)?;
3041        s.serialize_field("has_more", &self.has_more)?;
3042        Ok(())
3043    }
3044}
3045
3046impl<'de> ::serde::de::Deserialize<'de> for ListUsersOnPaperDocResponse {
3047    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3048        // struct deserializer
3049        use serde::de::{MapAccess, Visitor};
3050        struct StructVisitor;
3051        impl<'de> Visitor<'de> for StructVisitor {
3052            type Value = ListUsersOnPaperDocResponse;
3053            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
3054                f.write_str("a ListUsersOnPaperDocResponse struct")
3055            }
3056            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
3057                ListUsersOnPaperDocResponse::internal_deserialize(map)
3058            }
3059        }
3060        deserializer.deserialize_struct("ListUsersOnPaperDocResponse", LIST_USERS_ON_PAPER_DOC_RESPONSE_FIELDS, StructVisitor)
3061    }
3062}
3063
3064impl ::serde::ser::Serialize for ListUsersOnPaperDocResponse {
3065    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
3066        // struct serializer
3067        use serde::ser::SerializeStruct;
3068        let mut s = serializer.serialize_struct("ListUsersOnPaperDocResponse", 5)?;
3069        self.internal_serialize::<S>(&mut s)?;
3070        s.end()
3071    }
3072}
3073
3074#[derive(Debug, Clone, PartialEq, Eq)]
3075#[non_exhaustive] // variants may be added in the future
3076pub enum PaperApiBaseError {
3077    /// Your account does not have permissions to perform this action. This may be due to it only
3078    /// having access to Paper as files in the Dropbox filesystem. For more information, refer to
3079    /// the [Paper Migration
3080    /// Guide](https://www.dropbox.com/lp/developers/reference/paper-migration-guide).
3081    InsufficientPermissions,
3082    /// Catch-all used for unrecognized values returned from the server. Encountering this value
3083    /// typically indicates that this SDK version is out of date.
3084    Other,
3085}
3086
3087impl<'de> ::serde::de::Deserialize<'de> for PaperApiBaseError {
3088    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3089        // union deserializer
3090        use serde::de::{self, MapAccess, Visitor};
3091        struct EnumVisitor;
3092        impl<'de> Visitor<'de> for EnumVisitor {
3093            type Value = PaperApiBaseError;
3094            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
3095                f.write_str("a PaperApiBaseError structure")
3096            }
3097            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
3098                let tag: &str = match map.next_key()? {
3099                    Some(".tag") => map.next_value()?,
3100                    _ => return Err(de::Error::missing_field(".tag"))
3101                };
3102                let value = match tag {
3103                    "insufficient_permissions" => PaperApiBaseError::InsufficientPermissions,
3104                    _ => PaperApiBaseError::Other,
3105                };
3106                crate::eat_json_fields(&mut map)?;
3107                Ok(value)
3108            }
3109        }
3110        const VARIANTS: &[&str] = &["insufficient_permissions",
3111                                    "other"];
3112        deserializer.deserialize_struct("PaperApiBaseError", VARIANTS, EnumVisitor)
3113    }
3114}
3115
3116impl ::serde::ser::Serialize for PaperApiBaseError {
3117    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
3118        // union serializer
3119        use serde::ser::SerializeStruct;
3120        match self {
3121            PaperApiBaseError::InsufficientPermissions => {
3122                // unit
3123                let mut s = serializer.serialize_struct("PaperApiBaseError", 1)?;
3124                s.serialize_field(".tag", "insufficient_permissions")?;
3125                s.end()
3126            }
3127            PaperApiBaseError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
3128        }
3129    }
3130}
3131
3132impl ::std::error::Error for PaperApiBaseError {
3133}
3134
3135impl ::std::fmt::Display for PaperApiBaseError {
3136    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
3137        write!(f, "{:?}", *self)
3138    }
3139}
3140
3141#[derive(Debug, Clone, PartialEq, Eq)]
3142#[non_exhaustive] // variants may be added in the future
3143pub enum PaperApiCursorError {
3144    /// The provided cursor is expired.
3145    ExpiredCursor,
3146    /// The provided cursor is invalid.
3147    InvalidCursor,
3148    /// The provided cursor contains invalid user.
3149    WrongUserInCursor,
3150    /// Indicates that the cursor has been invalidated. Call the corresponding non-continue endpoint
3151    /// to obtain a new cursor.
3152    Reset,
3153    /// Catch-all used for unrecognized values returned from the server. Encountering this value
3154    /// typically indicates that this SDK version is out of date.
3155    Other,
3156}
3157
3158impl<'de> ::serde::de::Deserialize<'de> for PaperApiCursorError {
3159    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3160        // union deserializer
3161        use serde::de::{self, MapAccess, Visitor};
3162        struct EnumVisitor;
3163        impl<'de> Visitor<'de> for EnumVisitor {
3164            type Value = PaperApiCursorError;
3165            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
3166                f.write_str("a PaperApiCursorError structure")
3167            }
3168            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
3169                let tag: &str = match map.next_key()? {
3170                    Some(".tag") => map.next_value()?,
3171                    _ => return Err(de::Error::missing_field(".tag"))
3172                };
3173                let value = match tag {
3174                    "expired_cursor" => PaperApiCursorError::ExpiredCursor,
3175                    "invalid_cursor" => PaperApiCursorError::InvalidCursor,
3176                    "wrong_user_in_cursor" => PaperApiCursorError::WrongUserInCursor,
3177                    "reset" => PaperApiCursorError::Reset,
3178                    _ => PaperApiCursorError::Other,
3179                };
3180                crate::eat_json_fields(&mut map)?;
3181                Ok(value)
3182            }
3183        }
3184        const VARIANTS: &[&str] = &["expired_cursor",
3185                                    "invalid_cursor",
3186                                    "wrong_user_in_cursor",
3187                                    "reset",
3188                                    "other"];
3189        deserializer.deserialize_struct("PaperApiCursorError", VARIANTS, EnumVisitor)
3190    }
3191}
3192
3193impl ::serde::ser::Serialize for PaperApiCursorError {
3194    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
3195        // union serializer
3196        use serde::ser::SerializeStruct;
3197        match self {
3198            PaperApiCursorError::ExpiredCursor => {
3199                // unit
3200                let mut s = serializer.serialize_struct("PaperApiCursorError", 1)?;
3201                s.serialize_field(".tag", "expired_cursor")?;
3202                s.end()
3203            }
3204            PaperApiCursorError::InvalidCursor => {
3205                // unit
3206                let mut s = serializer.serialize_struct("PaperApiCursorError", 1)?;
3207                s.serialize_field(".tag", "invalid_cursor")?;
3208                s.end()
3209            }
3210            PaperApiCursorError::WrongUserInCursor => {
3211                // unit
3212                let mut s = serializer.serialize_struct("PaperApiCursorError", 1)?;
3213                s.serialize_field(".tag", "wrong_user_in_cursor")?;
3214                s.end()
3215            }
3216            PaperApiCursorError::Reset => {
3217                // unit
3218                let mut s = serializer.serialize_struct("PaperApiCursorError", 1)?;
3219                s.serialize_field(".tag", "reset")?;
3220                s.end()
3221            }
3222            PaperApiCursorError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
3223        }
3224    }
3225}
3226
3227impl ::std::error::Error for PaperApiCursorError {
3228}
3229
3230impl ::std::fmt::Display for PaperApiCursorError {
3231    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
3232        match self {
3233            PaperApiCursorError::ExpiredCursor => f.write_str("The provided cursor is expired."),
3234            PaperApiCursorError::InvalidCursor => f.write_str("The provided cursor is invalid."),
3235            PaperApiCursorError::WrongUserInCursor => f.write_str("The provided cursor contains invalid user."),
3236            PaperApiCursorError::Reset => f.write_str("Indicates that the cursor has been invalidated. Call the corresponding non-continue endpoint to obtain a new cursor."),
3237            _ => write!(f, "{:?}", *self),
3238        }
3239    }
3240}
3241
3242#[derive(Debug, Clone, PartialEq, Eq)]
3243#[non_exhaustive] // structs may have more fields added in the future.
3244pub struct PaperDocCreateArgs {
3245    /// The format of provided data.
3246    pub import_format: ImportFormat,
3247    /// The Paper folder ID where the Paper document should be created. The API user has to have
3248    /// write access to this folder or error is thrown.
3249    pub parent_folder_id: Option<String>,
3250}
3251
3252impl PaperDocCreateArgs {
3253    pub fn new(import_format: ImportFormat) -> Self {
3254        PaperDocCreateArgs {
3255            import_format,
3256            parent_folder_id: None,
3257        }
3258    }
3259
3260    pub fn with_parent_folder_id(mut self, value: String) -> Self {
3261        self.parent_folder_id = Some(value);
3262        self
3263    }
3264}
3265
3266const PAPER_DOC_CREATE_ARGS_FIELDS: &[&str] = &["import_format",
3267                                                "parent_folder_id"];
3268impl PaperDocCreateArgs {
3269    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
3270        map: V,
3271    ) -> Result<PaperDocCreateArgs, V::Error> {
3272        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
3273    }
3274
3275    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
3276        mut map: V,
3277        optional: bool,
3278    ) -> Result<Option<PaperDocCreateArgs>, V::Error> {
3279        let mut field_import_format = None;
3280        let mut field_parent_folder_id = None;
3281        let mut nothing = true;
3282        while let Some(key) = map.next_key::<&str>()? {
3283            nothing = false;
3284            match key {
3285                "import_format" => {
3286                    if field_import_format.is_some() {
3287                        return Err(::serde::de::Error::duplicate_field("import_format"));
3288                    }
3289                    field_import_format = Some(map.next_value()?);
3290                }
3291                "parent_folder_id" => {
3292                    if field_parent_folder_id.is_some() {
3293                        return Err(::serde::de::Error::duplicate_field("parent_folder_id"));
3294                    }
3295                    field_parent_folder_id = Some(map.next_value()?);
3296                }
3297                _ => {
3298                    // unknown field allowed and ignored
3299                    map.next_value::<::serde_json::Value>()?;
3300                }
3301            }
3302        }
3303        if optional && nothing {
3304            return Ok(None);
3305        }
3306        let result = PaperDocCreateArgs {
3307            import_format: field_import_format.ok_or_else(|| ::serde::de::Error::missing_field("import_format"))?,
3308            parent_folder_id: field_parent_folder_id.and_then(Option::flatten),
3309        };
3310        Ok(Some(result))
3311    }
3312
3313    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
3314        &self,
3315        s: &mut S::SerializeStruct,
3316    ) -> Result<(), S::Error> {
3317        use serde::ser::SerializeStruct;
3318        s.serialize_field("import_format", &self.import_format)?;
3319        if let Some(val) = &self.parent_folder_id {
3320            s.serialize_field("parent_folder_id", val)?;
3321        }
3322        Ok(())
3323    }
3324}
3325
3326impl<'de> ::serde::de::Deserialize<'de> for PaperDocCreateArgs {
3327    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3328        // struct deserializer
3329        use serde::de::{MapAccess, Visitor};
3330        struct StructVisitor;
3331        impl<'de> Visitor<'de> for StructVisitor {
3332            type Value = PaperDocCreateArgs;
3333            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
3334                f.write_str("a PaperDocCreateArgs struct")
3335            }
3336            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
3337                PaperDocCreateArgs::internal_deserialize(map)
3338            }
3339        }
3340        deserializer.deserialize_struct("PaperDocCreateArgs", PAPER_DOC_CREATE_ARGS_FIELDS, StructVisitor)
3341    }
3342}
3343
3344impl ::serde::ser::Serialize for PaperDocCreateArgs {
3345    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
3346        // struct serializer
3347        use serde::ser::SerializeStruct;
3348        let mut s = serializer.serialize_struct("PaperDocCreateArgs", 2)?;
3349        self.internal_serialize::<S>(&mut s)?;
3350        s.end()
3351    }
3352}
3353
3354#[derive(Debug, Clone, PartialEq, Eq)]
3355#[non_exhaustive] // variants may be added in the future
3356pub enum PaperDocCreateError {
3357    /// Your account does not have permissions to perform this action. This may be due to it only
3358    /// having access to Paper as files in the Dropbox filesystem. For more information, refer to
3359    /// the [Paper Migration
3360    /// Guide](https://www.dropbox.com/lp/developers/reference/paper-migration-guide).
3361    InsufficientPermissions,
3362    /// The provided content was malformed and cannot be imported to Paper.
3363    ContentMalformed,
3364    /// The specified Paper folder is cannot be found.
3365    FolderNotFound,
3366    /// The newly created Paper doc would be too large. Please split the content into multiple docs.
3367    DocLengthExceeded,
3368    /// The imported document contains an image that is too large. The current limit is 1MB. This
3369    /// only applies to HTML with data URI.
3370    ImageSizeExceeded,
3371    /// Catch-all used for unrecognized values returned from the server. Encountering this value
3372    /// typically indicates that this SDK version is out of date.
3373    Other,
3374}
3375
3376impl<'de> ::serde::de::Deserialize<'de> for PaperDocCreateError {
3377    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3378        // union deserializer
3379        use serde::de::{self, MapAccess, Visitor};
3380        struct EnumVisitor;
3381        impl<'de> Visitor<'de> for EnumVisitor {
3382            type Value = PaperDocCreateError;
3383            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
3384                f.write_str("a PaperDocCreateError structure")
3385            }
3386            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
3387                let tag: &str = match map.next_key()? {
3388                    Some(".tag") => map.next_value()?,
3389                    _ => return Err(de::Error::missing_field(".tag"))
3390                };
3391                let value = match tag {
3392                    "insufficient_permissions" => PaperDocCreateError::InsufficientPermissions,
3393                    "content_malformed" => PaperDocCreateError::ContentMalformed,
3394                    "folder_not_found" => PaperDocCreateError::FolderNotFound,
3395                    "doc_length_exceeded" => PaperDocCreateError::DocLengthExceeded,
3396                    "image_size_exceeded" => PaperDocCreateError::ImageSizeExceeded,
3397                    _ => PaperDocCreateError::Other,
3398                };
3399                crate::eat_json_fields(&mut map)?;
3400                Ok(value)
3401            }
3402        }
3403        const VARIANTS: &[&str] = &["insufficient_permissions",
3404                                    "other",
3405                                    "content_malformed",
3406                                    "folder_not_found",
3407                                    "doc_length_exceeded",
3408                                    "image_size_exceeded"];
3409        deserializer.deserialize_struct("PaperDocCreateError", VARIANTS, EnumVisitor)
3410    }
3411}
3412
3413impl ::serde::ser::Serialize for PaperDocCreateError {
3414    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
3415        // union serializer
3416        use serde::ser::SerializeStruct;
3417        match self {
3418            PaperDocCreateError::InsufficientPermissions => {
3419                // unit
3420                let mut s = serializer.serialize_struct("PaperDocCreateError", 1)?;
3421                s.serialize_field(".tag", "insufficient_permissions")?;
3422                s.end()
3423            }
3424            PaperDocCreateError::ContentMalformed => {
3425                // unit
3426                let mut s = serializer.serialize_struct("PaperDocCreateError", 1)?;
3427                s.serialize_field(".tag", "content_malformed")?;
3428                s.end()
3429            }
3430            PaperDocCreateError::FolderNotFound => {
3431                // unit
3432                let mut s = serializer.serialize_struct("PaperDocCreateError", 1)?;
3433                s.serialize_field(".tag", "folder_not_found")?;
3434                s.end()
3435            }
3436            PaperDocCreateError::DocLengthExceeded => {
3437                // unit
3438                let mut s = serializer.serialize_struct("PaperDocCreateError", 1)?;
3439                s.serialize_field(".tag", "doc_length_exceeded")?;
3440                s.end()
3441            }
3442            PaperDocCreateError::ImageSizeExceeded => {
3443                // unit
3444                let mut s = serializer.serialize_struct("PaperDocCreateError", 1)?;
3445                s.serialize_field(".tag", "image_size_exceeded")?;
3446                s.end()
3447            }
3448            PaperDocCreateError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
3449        }
3450    }
3451}
3452
3453impl ::std::error::Error for PaperDocCreateError {
3454}
3455
3456impl ::std::fmt::Display for PaperDocCreateError {
3457    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
3458        match self {
3459            PaperDocCreateError::ContentMalformed => f.write_str("The provided content was malformed and cannot be imported to Paper."),
3460            PaperDocCreateError::FolderNotFound => f.write_str("The specified Paper folder is cannot be found."),
3461            PaperDocCreateError::DocLengthExceeded => f.write_str("The newly created Paper doc would be too large. Please split the content into multiple docs."),
3462            PaperDocCreateError::ImageSizeExceeded => f.write_str("The imported document contains an image that is too large. The current limit is 1MB. This only applies to HTML with data URI."),
3463            _ => write!(f, "{:?}", *self),
3464        }
3465    }
3466}
3467
3468// union extends PaperApiBaseError
3469impl From<PaperApiBaseError> for PaperDocCreateError {
3470    fn from(parent: PaperApiBaseError) -> Self {
3471        match parent {
3472            PaperApiBaseError::InsufficientPermissions => PaperDocCreateError::InsufficientPermissions,
3473            PaperApiBaseError::Other => PaperDocCreateError::Other,
3474        }
3475    }
3476}
3477#[derive(Debug, Clone, PartialEq, Eq)]
3478#[non_exhaustive] // structs may have more fields added in the future.
3479pub struct PaperDocCreateUpdateResult {
3480    /// Doc ID of the newly created doc.
3481    pub doc_id: String,
3482    /// The Paper doc revision. Simply an ever increasing number.
3483    pub revision: i64,
3484    /// The Paper doc title.
3485    pub title: String,
3486}
3487
3488impl PaperDocCreateUpdateResult {
3489    pub fn new(doc_id: String, revision: i64, title: String) -> Self {
3490        PaperDocCreateUpdateResult {
3491            doc_id,
3492            revision,
3493            title,
3494        }
3495    }
3496}
3497
3498const PAPER_DOC_CREATE_UPDATE_RESULT_FIELDS: &[&str] = &["doc_id",
3499                                                         "revision",
3500                                                         "title"];
3501impl PaperDocCreateUpdateResult {
3502    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
3503        map: V,
3504    ) -> Result<PaperDocCreateUpdateResult, V::Error> {
3505        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
3506    }
3507
3508    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
3509        mut map: V,
3510        optional: bool,
3511    ) -> Result<Option<PaperDocCreateUpdateResult>, V::Error> {
3512        let mut field_doc_id = None;
3513        let mut field_revision = None;
3514        let mut field_title = None;
3515        let mut nothing = true;
3516        while let Some(key) = map.next_key::<&str>()? {
3517            nothing = false;
3518            match key {
3519                "doc_id" => {
3520                    if field_doc_id.is_some() {
3521                        return Err(::serde::de::Error::duplicate_field("doc_id"));
3522                    }
3523                    field_doc_id = Some(map.next_value()?);
3524                }
3525                "revision" => {
3526                    if field_revision.is_some() {
3527                        return Err(::serde::de::Error::duplicate_field("revision"));
3528                    }
3529                    field_revision = Some(map.next_value()?);
3530                }
3531                "title" => {
3532                    if field_title.is_some() {
3533                        return Err(::serde::de::Error::duplicate_field("title"));
3534                    }
3535                    field_title = Some(map.next_value()?);
3536                }
3537                _ => {
3538                    // unknown field allowed and ignored
3539                    map.next_value::<::serde_json::Value>()?;
3540                }
3541            }
3542        }
3543        if optional && nothing {
3544            return Ok(None);
3545        }
3546        let result = PaperDocCreateUpdateResult {
3547            doc_id: field_doc_id.ok_or_else(|| ::serde::de::Error::missing_field("doc_id"))?,
3548            revision: field_revision.ok_or_else(|| ::serde::de::Error::missing_field("revision"))?,
3549            title: field_title.ok_or_else(|| ::serde::de::Error::missing_field("title"))?,
3550        };
3551        Ok(Some(result))
3552    }
3553
3554    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
3555        &self,
3556        s: &mut S::SerializeStruct,
3557    ) -> Result<(), S::Error> {
3558        use serde::ser::SerializeStruct;
3559        s.serialize_field("doc_id", &self.doc_id)?;
3560        s.serialize_field("revision", &self.revision)?;
3561        s.serialize_field("title", &self.title)?;
3562        Ok(())
3563    }
3564}
3565
3566impl<'de> ::serde::de::Deserialize<'de> for PaperDocCreateUpdateResult {
3567    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3568        // struct deserializer
3569        use serde::de::{MapAccess, Visitor};
3570        struct StructVisitor;
3571        impl<'de> Visitor<'de> for StructVisitor {
3572            type Value = PaperDocCreateUpdateResult;
3573            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
3574                f.write_str("a PaperDocCreateUpdateResult struct")
3575            }
3576            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
3577                PaperDocCreateUpdateResult::internal_deserialize(map)
3578            }
3579        }
3580        deserializer.deserialize_struct("PaperDocCreateUpdateResult", PAPER_DOC_CREATE_UPDATE_RESULT_FIELDS, StructVisitor)
3581    }
3582}
3583
3584impl ::serde::ser::Serialize for PaperDocCreateUpdateResult {
3585    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
3586        // struct serializer
3587        use serde::ser::SerializeStruct;
3588        let mut s = serializer.serialize_struct("PaperDocCreateUpdateResult", 3)?;
3589        self.internal_serialize::<S>(&mut s)?;
3590        s.end()
3591    }
3592}
3593
3594#[derive(Debug, Clone, PartialEq, Eq)]
3595#[non_exhaustive] // structs may have more fields added in the future.
3596pub struct PaperDocExport {
3597    /// The Paper doc ID.
3598    pub doc_id: PaperDocId,
3599    pub export_format: ExportFormat,
3600    /// When true, export includes comment threads (e.g. markdown footnotes). When false or omitted,
3601    /// body only. Other formats may adopt this later; currently only markdown uses it. Plain bool
3602    /// (not optional): protoc-gen-godbx does not support proto3 optional yet.
3603    pub include_comments: bool,
3604}
3605
3606impl PaperDocExport {
3607    pub fn new(doc_id: PaperDocId, export_format: ExportFormat) -> Self {
3608        PaperDocExport {
3609            doc_id,
3610            export_format,
3611            include_comments: false,
3612        }
3613    }
3614
3615    pub fn with_include_comments(mut self, value: bool) -> Self {
3616        self.include_comments = value;
3617        self
3618    }
3619}
3620
3621const PAPER_DOC_EXPORT_FIELDS: &[&str] = &["doc_id",
3622                                           "export_format",
3623                                           "include_comments"];
3624impl PaperDocExport {
3625    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
3626        map: V,
3627    ) -> Result<PaperDocExport, V::Error> {
3628        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
3629    }
3630
3631    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
3632        mut map: V,
3633        optional: bool,
3634    ) -> Result<Option<PaperDocExport>, V::Error> {
3635        let mut field_doc_id = None;
3636        let mut field_export_format = None;
3637        let mut field_include_comments = None;
3638        let mut nothing = true;
3639        while let Some(key) = map.next_key::<&str>()? {
3640            nothing = false;
3641            match key {
3642                "doc_id" => {
3643                    if field_doc_id.is_some() {
3644                        return Err(::serde::de::Error::duplicate_field("doc_id"));
3645                    }
3646                    field_doc_id = Some(map.next_value()?);
3647                }
3648                "export_format" => {
3649                    if field_export_format.is_some() {
3650                        return Err(::serde::de::Error::duplicate_field("export_format"));
3651                    }
3652                    field_export_format = Some(map.next_value()?);
3653                }
3654                "include_comments" => {
3655                    if field_include_comments.is_some() {
3656                        return Err(::serde::de::Error::duplicate_field("include_comments"));
3657                    }
3658                    field_include_comments = Some(map.next_value()?);
3659                }
3660                _ => {
3661                    // unknown field allowed and ignored
3662                    map.next_value::<::serde_json::Value>()?;
3663                }
3664            }
3665        }
3666        if optional && nothing {
3667            return Ok(None);
3668        }
3669        let result = PaperDocExport {
3670            doc_id: field_doc_id.ok_or_else(|| ::serde::de::Error::missing_field("doc_id"))?,
3671            export_format: field_export_format.ok_or_else(|| ::serde::de::Error::missing_field("export_format"))?,
3672            include_comments: field_include_comments.unwrap_or(false),
3673        };
3674        Ok(Some(result))
3675    }
3676
3677    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
3678        &self,
3679        s: &mut S::SerializeStruct,
3680    ) -> Result<(), S::Error> {
3681        use serde::ser::SerializeStruct;
3682        s.serialize_field("doc_id", &self.doc_id)?;
3683        s.serialize_field("export_format", &self.export_format)?;
3684        if self.include_comments {
3685            s.serialize_field("include_comments", &self.include_comments)?;
3686        }
3687        Ok(())
3688    }
3689}
3690
3691impl<'de> ::serde::de::Deserialize<'de> for PaperDocExport {
3692    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3693        // struct deserializer
3694        use serde::de::{MapAccess, Visitor};
3695        struct StructVisitor;
3696        impl<'de> Visitor<'de> for StructVisitor {
3697            type Value = PaperDocExport;
3698            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
3699                f.write_str("a PaperDocExport struct")
3700            }
3701            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
3702                PaperDocExport::internal_deserialize(map)
3703            }
3704        }
3705        deserializer.deserialize_struct("PaperDocExport", PAPER_DOC_EXPORT_FIELDS, StructVisitor)
3706    }
3707}
3708
3709impl ::serde::ser::Serialize for PaperDocExport {
3710    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
3711        // struct serializer
3712        use serde::ser::SerializeStruct;
3713        let mut s = serializer.serialize_struct("PaperDocExport", 3)?;
3714        self.internal_serialize::<S>(&mut s)?;
3715        s.end()
3716    }
3717}
3718
3719// struct extends RefPaperDoc
3720impl From<PaperDocExport> for RefPaperDoc {
3721    fn from(subtype: PaperDocExport) -> Self {
3722        Self {
3723            doc_id: subtype.doc_id,
3724        }
3725    }
3726}
3727#[derive(Debug, Clone, PartialEq, Eq)]
3728#[non_exhaustive] // structs may have more fields added in the future.
3729pub struct PaperDocExportResult {
3730    /// The Paper doc owner's email address.
3731    pub owner: String,
3732    /// The Paper doc title.
3733    pub title: String,
3734    /// The Paper doc revision. Simply an ever increasing number.
3735    pub revision: i64,
3736    /// MIME type of the export. This corresponds to [`ExportFormat`] specified in the request.
3737    pub mime_type: String,
3738}
3739
3740impl PaperDocExportResult {
3741    pub fn new(owner: String, title: String, revision: i64, mime_type: String) -> Self {
3742        PaperDocExportResult {
3743            owner,
3744            title,
3745            revision,
3746            mime_type,
3747        }
3748    }
3749}
3750
3751const PAPER_DOC_EXPORT_RESULT_FIELDS: &[&str] = &["owner",
3752                                                  "title",
3753                                                  "revision",
3754                                                  "mime_type"];
3755impl PaperDocExportResult {
3756    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
3757        map: V,
3758    ) -> Result<PaperDocExportResult, V::Error> {
3759        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
3760    }
3761
3762    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
3763        mut map: V,
3764        optional: bool,
3765    ) -> Result<Option<PaperDocExportResult>, V::Error> {
3766        let mut field_owner = None;
3767        let mut field_title = None;
3768        let mut field_revision = None;
3769        let mut field_mime_type = None;
3770        let mut nothing = true;
3771        while let Some(key) = map.next_key::<&str>()? {
3772            nothing = false;
3773            match key {
3774                "owner" => {
3775                    if field_owner.is_some() {
3776                        return Err(::serde::de::Error::duplicate_field("owner"));
3777                    }
3778                    field_owner = Some(map.next_value()?);
3779                }
3780                "title" => {
3781                    if field_title.is_some() {
3782                        return Err(::serde::de::Error::duplicate_field("title"));
3783                    }
3784                    field_title = Some(map.next_value()?);
3785                }
3786                "revision" => {
3787                    if field_revision.is_some() {
3788                        return Err(::serde::de::Error::duplicate_field("revision"));
3789                    }
3790                    field_revision = Some(map.next_value()?);
3791                }
3792                "mime_type" => {
3793                    if field_mime_type.is_some() {
3794                        return Err(::serde::de::Error::duplicate_field("mime_type"));
3795                    }
3796                    field_mime_type = Some(map.next_value()?);
3797                }
3798                _ => {
3799                    // unknown field allowed and ignored
3800                    map.next_value::<::serde_json::Value>()?;
3801                }
3802            }
3803        }
3804        if optional && nothing {
3805            return Ok(None);
3806        }
3807        let result = PaperDocExportResult {
3808            owner: field_owner.ok_or_else(|| ::serde::de::Error::missing_field("owner"))?,
3809            title: field_title.ok_or_else(|| ::serde::de::Error::missing_field("title"))?,
3810            revision: field_revision.ok_or_else(|| ::serde::de::Error::missing_field("revision"))?,
3811            mime_type: field_mime_type.ok_or_else(|| ::serde::de::Error::missing_field("mime_type"))?,
3812        };
3813        Ok(Some(result))
3814    }
3815
3816    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
3817        &self,
3818        s: &mut S::SerializeStruct,
3819    ) -> Result<(), S::Error> {
3820        use serde::ser::SerializeStruct;
3821        s.serialize_field("owner", &self.owner)?;
3822        s.serialize_field("title", &self.title)?;
3823        s.serialize_field("revision", &self.revision)?;
3824        s.serialize_field("mime_type", &self.mime_type)?;
3825        Ok(())
3826    }
3827}
3828
3829impl<'de> ::serde::de::Deserialize<'de> for PaperDocExportResult {
3830    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3831        // struct deserializer
3832        use serde::de::{MapAccess, Visitor};
3833        struct StructVisitor;
3834        impl<'de> Visitor<'de> for StructVisitor {
3835            type Value = PaperDocExportResult;
3836            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
3837                f.write_str("a PaperDocExportResult struct")
3838            }
3839            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
3840                PaperDocExportResult::internal_deserialize(map)
3841            }
3842        }
3843        deserializer.deserialize_struct("PaperDocExportResult", PAPER_DOC_EXPORT_RESULT_FIELDS, StructVisitor)
3844    }
3845}
3846
3847impl ::serde::ser::Serialize for PaperDocExportResult {
3848    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
3849        // struct serializer
3850        use serde::ser::SerializeStruct;
3851        let mut s = serializer.serialize_struct("PaperDocExportResult", 4)?;
3852        self.internal_serialize::<S>(&mut s)?;
3853        s.end()
3854    }
3855}
3856
3857/// Metadata returned by docs/get_metadata.
3858#[derive(Debug, Clone, PartialEq, Eq)]
3859#[non_exhaustive] // structs may have more fields added in the future.
3860pub struct PaperDocGetMetadataResult {
3861    /// The Paper doc ID.
3862    pub doc_id: PaperDocId,
3863    /// The Paper doc owner's email address.
3864    pub owner: String,
3865    /// The Paper doc title.
3866    pub title: String,
3867    /// The Paper doc creation date.
3868    pub created_date: crate::types::common::DropboxTimestamp,
3869    /// The Paper doc status.
3870    pub status: PaperDocStatus,
3871    /// The Paper doc revision. Simply an ever increasing number.
3872    pub revision: i64,
3873    /// The date when the Paper doc was last edited.
3874    pub last_updated_date: crate::types::common::DropboxTimestamp,
3875    /// The email address of the last editor of the Paper doc.
3876    pub last_editor: String,
3877}
3878
3879impl PaperDocGetMetadataResult {
3880    pub fn new(
3881        doc_id: PaperDocId,
3882        owner: String,
3883        title: String,
3884        created_date: crate::types::common::DropboxTimestamp,
3885        status: PaperDocStatus,
3886        revision: i64,
3887        last_updated_date: crate::types::common::DropboxTimestamp,
3888        last_editor: String,
3889    ) -> Self {
3890        PaperDocGetMetadataResult {
3891            doc_id,
3892            owner,
3893            title,
3894            created_date,
3895            status,
3896            revision,
3897            last_updated_date,
3898            last_editor,
3899        }
3900    }
3901}
3902
3903const PAPER_DOC_GET_METADATA_RESULT_FIELDS: &[&str] = &["doc_id",
3904                                                        "owner",
3905                                                        "title",
3906                                                        "created_date",
3907                                                        "status",
3908                                                        "revision",
3909                                                        "last_updated_date",
3910                                                        "last_editor"];
3911impl PaperDocGetMetadataResult {
3912    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
3913        map: V,
3914    ) -> Result<PaperDocGetMetadataResult, V::Error> {
3915        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
3916    }
3917
3918    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
3919        mut map: V,
3920        optional: bool,
3921    ) -> Result<Option<PaperDocGetMetadataResult>, V::Error> {
3922        let mut field_doc_id = None;
3923        let mut field_owner = None;
3924        let mut field_title = None;
3925        let mut field_created_date = None;
3926        let mut field_status = None;
3927        let mut field_revision = None;
3928        let mut field_last_updated_date = None;
3929        let mut field_last_editor = None;
3930        let mut nothing = true;
3931        while let Some(key) = map.next_key::<&str>()? {
3932            nothing = false;
3933            match key {
3934                "doc_id" => {
3935                    if field_doc_id.is_some() {
3936                        return Err(::serde::de::Error::duplicate_field("doc_id"));
3937                    }
3938                    field_doc_id = Some(map.next_value()?);
3939                }
3940                "owner" => {
3941                    if field_owner.is_some() {
3942                        return Err(::serde::de::Error::duplicate_field("owner"));
3943                    }
3944                    field_owner = Some(map.next_value()?);
3945                }
3946                "title" => {
3947                    if field_title.is_some() {
3948                        return Err(::serde::de::Error::duplicate_field("title"));
3949                    }
3950                    field_title = Some(map.next_value()?);
3951                }
3952                "created_date" => {
3953                    if field_created_date.is_some() {
3954                        return Err(::serde::de::Error::duplicate_field("created_date"));
3955                    }
3956                    field_created_date = Some(map.next_value()?);
3957                }
3958                "status" => {
3959                    if field_status.is_some() {
3960                        return Err(::serde::de::Error::duplicate_field("status"));
3961                    }
3962                    field_status = Some(map.next_value()?);
3963                }
3964                "revision" => {
3965                    if field_revision.is_some() {
3966                        return Err(::serde::de::Error::duplicate_field("revision"));
3967                    }
3968                    field_revision = Some(map.next_value()?);
3969                }
3970                "last_updated_date" => {
3971                    if field_last_updated_date.is_some() {
3972                        return Err(::serde::de::Error::duplicate_field("last_updated_date"));
3973                    }
3974                    field_last_updated_date = Some(map.next_value()?);
3975                }
3976                "last_editor" => {
3977                    if field_last_editor.is_some() {
3978                        return Err(::serde::de::Error::duplicate_field("last_editor"));
3979                    }
3980                    field_last_editor = Some(map.next_value()?);
3981                }
3982                _ => {
3983                    // unknown field allowed and ignored
3984                    map.next_value::<::serde_json::Value>()?;
3985                }
3986            }
3987        }
3988        if optional && nothing {
3989            return Ok(None);
3990        }
3991        let result = PaperDocGetMetadataResult {
3992            doc_id: field_doc_id.ok_or_else(|| ::serde::de::Error::missing_field("doc_id"))?,
3993            owner: field_owner.ok_or_else(|| ::serde::de::Error::missing_field("owner"))?,
3994            title: field_title.ok_or_else(|| ::serde::de::Error::missing_field("title"))?,
3995            created_date: field_created_date.ok_or_else(|| ::serde::de::Error::missing_field("created_date"))?,
3996            status: field_status.ok_or_else(|| ::serde::de::Error::missing_field("status"))?,
3997            revision: field_revision.ok_or_else(|| ::serde::de::Error::missing_field("revision"))?,
3998            last_updated_date: field_last_updated_date.ok_or_else(|| ::serde::de::Error::missing_field("last_updated_date"))?,
3999            last_editor: field_last_editor.ok_or_else(|| ::serde::de::Error::missing_field("last_editor"))?,
4000        };
4001        Ok(Some(result))
4002    }
4003
4004    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
4005        &self,
4006        s: &mut S::SerializeStruct,
4007    ) -> Result<(), S::Error> {
4008        use serde::ser::SerializeStruct;
4009        s.serialize_field("doc_id", &self.doc_id)?;
4010        s.serialize_field("owner", &self.owner)?;
4011        s.serialize_field("title", &self.title)?;
4012        s.serialize_field("created_date", &self.created_date)?;
4013        s.serialize_field("status", &self.status)?;
4014        s.serialize_field("revision", &self.revision)?;
4015        s.serialize_field("last_updated_date", &self.last_updated_date)?;
4016        s.serialize_field("last_editor", &self.last_editor)?;
4017        Ok(())
4018    }
4019}
4020
4021impl<'de> ::serde::de::Deserialize<'de> for PaperDocGetMetadataResult {
4022    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4023        // struct deserializer
4024        use serde::de::{MapAccess, Visitor};
4025        struct StructVisitor;
4026        impl<'de> Visitor<'de> for StructVisitor {
4027            type Value = PaperDocGetMetadataResult;
4028            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
4029                f.write_str("a PaperDocGetMetadataResult struct")
4030            }
4031            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
4032                PaperDocGetMetadataResult::internal_deserialize(map)
4033            }
4034        }
4035        deserializer.deserialize_struct("PaperDocGetMetadataResult", PAPER_DOC_GET_METADATA_RESULT_FIELDS, StructVisitor)
4036    }
4037}
4038
4039impl ::serde::ser::Serialize for PaperDocGetMetadataResult {
4040    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
4041        // struct serializer
4042        use serde::ser::SerializeStruct;
4043        let mut s = serializer.serialize_struct("PaperDocGetMetadataResult", 8)?;
4044        self.internal_serialize::<S>(&mut s)?;
4045        s.end()
4046    }
4047}
4048
4049#[derive(Debug, Clone, PartialEq, Eq)]
4050#[non_exhaustive] // variants may be added in the future
4051pub enum PaperDocPermissionLevel {
4052    /// User will be granted edit permissions.
4053    Edit,
4054    /// User will be granted view and comment permissions.
4055    ViewAndComment,
4056    /// Catch-all used for unrecognized values returned from the server. Encountering this value
4057    /// typically indicates that this SDK version is out of date.
4058    Other,
4059}
4060
4061impl<'de> ::serde::de::Deserialize<'de> for PaperDocPermissionLevel {
4062    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4063        // union deserializer
4064        use serde::de::{self, MapAccess, Visitor};
4065        struct EnumVisitor;
4066        impl<'de> Visitor<'de> for EnumVisitor {
4067            type Value = PaperDocPermissionLevel;
4068            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
4069                f.write_str("a PaperDocPermissionLevel structure")
4070            }
4071            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
4072                let tag: &str = match map.next_key()? {
4073                    Some(".tag") => map.next_value()?,
4074                    _ => return Err(de::Error::missing_field(".tag"))
4075                };
4076                let value = match tag {
4077                    "edit" => PaperDocPermissionLevel::Edit,
4078                    "view_and_comment" => PaperDocPermissionLevel::ViewAndComment,
4079                    _ => PaperDocPermissionLevel::Other,
4080                };
4081                crate::eat_json_fields(&mut map)?;
4082                Ok(value)
4083            }
4084        }
4085        const VARIANTS: &[&str] = &["edit",
4086                                    "view_and_comment",
4087                                    "other"];
4088        deserializer.deserialize_struct("PaperDocPermissionLevel", VARIANTS, EnumVisitor)
4089    }
4090}
4091
4092impl ::serde::ser::Serialize for PaperDocPermissionLevel {
4093    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
4094        // union serializer
4095        use serde::ser::SerializeStruct;
4096        match self {
4097            PaperDocPermissionLevel::Edit => {
4098                // unit
4099                let mut s = serializer.serialize_struct("PaperDocPermissionLevel", 1)?;
4100                s.serialize_field(".tag", "edit")?;
4101                s.end()
4102            }
4103            PaperDocPermissionLevel::ViewAndComment => {
4104                // unit
4105                let mut s = serializer.serialize_struct("PaperDocPermissionLevel", 1)?;
4106                s.serialize_field(".tag", "view_and_comment")?;
4107                s.end()
4108            }
4109            PaperDocPermissionLevel::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
4110        }
4111    }
4112}
4113
4114#[derive(Debug, Clone, PartialEq, Eq)]
4115#[non_exhaustive] // structs may have more fields added in the future.
4116pub struct PaperDocSharingPolicy {
4117    /// The Paper doc ID.
4118    pub doc_id: PaperDocId,
4119    /// The default sharing policy to be set for the Paper doc.
4120    pub sharing_policy: SharingPolicy,
4121}
4122
4123impl PaperDocSharingPolicy {
4124    pub fn new(doc_id: PaperDocId, sharing_policy: SharingPolicy) -> Self {
4125        PaperDocSharingPolicy {
4126            doc_id,
4127            sharing_policy,
4128        }
4129    }
4130}
4131
4132const PAPER_DOC_SHARING_POLICY_FIELDS: &[&str] = &["doc_id",
4133                                                   "sharing_policy"];
4134impl PaperDocSharingPolicy {
4135    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
4136        map: V,
4137    ) -> Result<PaperDocSharingPolicy, V::Error> {
4138        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
4139    }
4140
4141    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
4142        mut map: V,
4143        optional: bool,
4144    ) -> Result<Option<PaperDocSharingPolicy>, V::Error> {
4145        let mut field_doc_id = None;
4146        let mut field_sharing_policy = None;
4147        let mut nothing = true;
4148        while let Some(key) = map.next_key::<&str>()? {
4149            nothing = false;
4150            match key {
4151                "doc_id" => {
4152                    if field_doc_id.is_some() {
4153                        return Err(::serde::de::Error::duplicate_field("doc_id"));
4154                    }
4155                    field_doc_id = Some(map.next_value()?);
4156                }
4157                "sharing_policy" => {
4158                    if field_sharing_policy.is_some() {
4159                        return Err(::serde::de::Error::duplicate_field("sharing_policy"));
4160                    }
4161                    field_sharing_policy = Some(map.next_value()?);
4162                }
4163                _ => {
4164                    // unknown field allowed and ignored
4165                    map.next_value::<::serde_json::Value>()?;
4166                }
4167            }
4168        }
4169        if optional && nothing {
4170            return Ok(None);
4171        }
4172        let result = PaperDocSharingPolicy {
4173            doc_id: field_doc_id.ok_or_else(|| ::serde::de::Error::missing_field("doc_id"))?,
4174            sharing_policy: field_sharing_policy.ok_or_else(|| ::serde::de::Error::missing_field("sharing_policy"))?,
4175        };
4176        Ok(Some(result))
4177    }
4178
4179    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
4180        &self,
4181        s: &mut S::SerializeStruct,
4182    ) -> Result<(), S::Error> {
4183        use serde::ser::SerializeStruct;
4184        s.serialize_field("doc_id", &self.doc_id)?;
4185        s.serialize_field("sharing_policy", &self.sharing_policy)?;
4186        Ok(())
4187    }
4188}
4189
4190impl<'de> ::serde::de::Deserialize<'de> for PaperDocSharingPolicy {
4191    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4192        // struct deserializer
4193        use serde::de::{MapAccess, Visitor};
4194        struct StructVisitor;
4195        impl<'de> Visitor<'de> for StructVisitor {
4196            type Value = PaperDocSharingPolicy;
4197            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
4198                f.write_str("a PaperDocSharingPolicy struct")
4199            }
4200            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
4201                PaperDocSharingPolicy::internal_deserialize(map)
4202            }
4203        }
4204        deserializer.deserialize_struct("PaperDocSharingPolicy", PAPER_DOC_SHARING_POLICY_FIELDS, StructVisitor)
4205    }
4206}
4207
4208impl ::serde::ser::Serialize for PaperDocSharingPolicy {
4209    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
4210        // struct serializer
4211        use serde::ser::SerializeStruct;
4212        let mut s = serializer.serialize_struct("PaperDocSharingPolicy", 2)?;
4213        self.internal_serialize::<S>(&mut s)?;
4214        s.end()
4215    }
4216}
4217
4218// struct extends RefPaperDoc
4219impl From<PaperDocSharingPolicy> for RefPaperDoc {
4220    fn from(subtype: PaperDocSharingPolicy) -> Self {
4221        Self {
4222            doc_id: subtype.doc_id,
4223        }
4224    }
4225}
4226/// The status of a Paper doc.
4227#[derive(Debug, Clone, PartialEq, Eq)]
4228#[non_exhaustive] // variants may be added in the future
4229pub enum PaperDocStatus {
4230    /// The Paper doc is active.
4231    Active,
4232    /// The Paper doc is deleted.
4233    Deleted,
4234    /// Catch-all used for unrecognized values returned from the server. Encountering this value
4235    /// typically indicates that this SDK version is out of date.
4236    Other,
4237}
4238
4239impl<'de> ::serde::de::Deserialize<'de> for PaperDocStatus {
4240    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4241        // union deserializer
4242        use serde::de::{self, MapAccess, Visitor};
4243        struct EnumVisitor;
4244        impl<'de> Visitor<'de> for EnumVisitor {
4245            type Value = PaperDocStatus;
4246            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
4247                f.write_str("a PaperDocStatus structure")
4248            }
4249            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
4250                let tag: &str = match map.next_key()? {
4251                    Some(".tag") => map.next_value()?,
4252                    _ => return Err(de::Error::missing_field(".tag"))
4253                };
4254                let value = match tag {
4255                    "active" => PaperDocStatus::Active,
4256                    "deleted" => PaperDocStatus::Deleted,
4257                    _ => PaperDocStatus::Other,
4258                };
4259                crate::eat_json_fields(&mut map)?;
4260                Ok(value)
4261            }
4262        }
4263        const VARIANTS: &[&str] = &["active",
4264                                    "deleted",
4265                                    "other"];
4266        deserializer.deserialize_struct("PaperDocStatus", VARIANTS, EnumVisitor)
4267    }
4268}
4269
4270impl ::serde::ser::Serialize for PaperDocStatus {
4271    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
4272        // union serializer
4273        use serde::ser::SerializeStruct;
4274        match self {
4275            PaperDocStatus::Active => {
4276                // unit
4277                let mut s = serializer.serialize_struct("PaperDocStatus", 1)?;
4278                s.serialize_field(".tag", "active")?;
4279                s.end()
4280            }
4281            PaperDocStatus::Deleted => {
4282                // unit
4283                let mut s = serializer.serialize_struct("PaperDocStatus", 1)?;
4284                s.serialize_field(".tag", "deleted")?;
4285                s.end()
4286            }
4287            PaperDocStatus::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
4288        }
4289    }
4290}
4291
4292#[derive(Debug, Clone, PartialEq, Eq)]
4293#[non_exhaustive] // structs may have more fields added in the future.
4294pub struct PaperDocUpdateArgs {
4295    /// The Paper doc ID.
4296    pub doc_id: PaperDocId,
4297    /// The policy used for the current update call.
4298    pub doc_update_policy: PaperDocUpdatePolicy,
4299    /// The latest doc revision. This value must match the head revision or an error code will be
4300    /// returned. This is to prevent colliding writes.
4301    pub revision: i64,
4302    /// The format of provided data.
4303    pub import_format: ImportFormat,
4304}
4305
4306impl PaperDocUpdateArgs {
4307    pub fn new(
4308        doc_id: PaperDocId,
4309        doc_update_policy: PaperDocUpdatePolicy,
4310        revision: i64,
4311        import_format: ImportFormat,
4312    ) -> Self {
4313        PaperDocUpdateArgs {
4314            doc_id,
4315            doc_update_policy,
4316            revision,
4317            import_format,
4318        }
4319    }
4320}
4321
4322const PAPER_DOC_UPDATE_ARGS_FIELDS: &[&str] = &["doc_id",
4323                                                "doc_update_policy",
4324                                                "revision",
4325                                                "import_format"];
4326impl PaperDocUpdateArgs {
4327    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
4328        map: V,
4329    ) -> Result<PaperDocUpdateArgs, V::Error> {
4330        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
4331    }
4332
4333    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
4334        mut map: V,
4335        optional: bool,
4336    ) -> Result<Option<PaperDocUpdateArgs>, V::Error> {
4337        let mut field_doc_id = None;
4338        let mut field_doc_update_policy = None;
4339        let mut field_revision = None;
4340        let mut field_import_format = None;
4341        let mut nothing = true;
4342        while let Some(key) = map.next_key::<&str>()? {
4343            nothing = false;
4344            match key {
4345                "doc_id" => {
4346                    if field_doc_id.is_some() {
4347                        return Err(::serde::de::Error::duplicate_field("doc_id"));
4348                    }
4349                    field_doc_id = Some(map.next_value()?);
4350                }
4351                "doc_update_policy" => {
4352                    if field_doc_update_policy.is_some() {
4353                        return Err(::serde::de::Error::duplicate_field("doc_update_policy"));
4354                    }
4355                    field_doc_update_policy = Some(map.next_value()?);
4356                }
4357                "revision" => {
4358                    if field_revision.is_some() {
4359                        return Err(::serde::de::Error::duplicate_field("revision"));
4360                    }
4361                    field_revision = Some(map.next_value()?);
4362                }
4363                "import_format" => {
4364                    if field_import_format.is_some() {
4365                        return Err(::serde::de::Error::duplicate_field("import_format"));
4366                    }
4367                    field_import_format = Some(map.next_value()?);
4368                }
4369                _ => {
4370                    // unknown field allowed and ignored
4371                    map.next_value::<::serde_json::Value>()?;
4372                }
4373            }
4374        }
4375        if optional && nothing {
4376            return Ok(None);
4377        }
4378        let result = PaperDocUpdateArgs {
4379            doc_id: field_doc_id.ok_or_else(|| ::serde::de::Error::missing_field("doc_id"))?,
4380            doc_update_policy: field_doc_update_policy.ok_or_else(|| ::serde::de::Error::missing_field("doc_update_policy"))?,
4381            revision: field_revision.ok_or_else(|| ::serde::de::Error::missing_field("revision"))?,
4382            import_format: field_import_format.ok_or_else(|| ::serde::de::Error::missing_field("import_format"))?,
4383        };
4384        Ok(Some(result))
4385    }
4386
4387    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
4388        &self,
4389        s: &mut S::SerializeStruct,
4390    ) -> Result<(), S::Error> {
4391        use serde::ser::SerializeStruct;
4392        s.serialize_field("doc_id", &self.doc_id)?;
4393        s.serialize_field("doc_update_policy", &self.doc_update_policy)?;
4394        s.serialize_field("revision", &self.revision)?;
4395        s.serialize_field("import_format", &self.import_format)?;
4396        Ok(())
4397    }
4398}
4399
4400impl<'de> ::serde::de::Deserialize<'de> for PaperDocUpdateArgs {
4401    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4402        // struct deserializer
4403        use serde::de::{MapAccess, Visitor};
4404        struct StructVisitor;
4405        impl<'de> Visitor<'de> for StructVisitor {
4406            type Value = PaperDocUpdateArgs;
4407            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
4408                f.write_str("a PaperDocUpdateArgs struct")
4409            }
4410            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
4411                PaperDocUpdateArgs::internal_deserialize(map)
4412            }
4413        }
4414        deserializer.deserialize_struct("PaperDocUpdateArgs", PAPER_DOC_UPDATE_ARGS_FIELDS, StructVisitor)
4415    }
4416}
4417
4418impl ::serde::ser::Serialize for PaperDocUpdateArgs {
4419    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
4420        // struct serializer
4421        use serde::ser::SerializeStruct;
4422        let mut s = serializer.serialize_struct("PaperDocUpdateArgs", 4)?;
4423        self.internal_serialize::<S>(&mut s)?;
4424        s.end()
4425    }
4426}
4427
4428// struct extends RefPaperDoc
4429impl From<PaperDocUpdateArgs> for RefPaperDoc {
4430    fn from(subtype: PaperDocUpdateArgs) -> Self {
4431        Self {
4432            doc_id: subtype.doc_id,
4433        }
4434    }
4435}
4436#[derive(Debug, Clone, PartialEq, Eq)]
4437#[non_exhaustive] // variants may be added in the future
4438pub enum PaperDocUpdateError {
4439    /// Your account does not have permissions to perform this action. This may be due to it only
4440    /// having access to Paper as files in the Dropbox filesystem. For more information, refer to
4441    /// the [Paper Migration
4442    /// Guide](https://www.dropbox.com/lp/developers/reference/paper-migration-guide).
4443    InsufficientPermissions,
4444    /// The required doc was not found.
4445    DocNotFound,
4446    /// The provided content was malformed and cannot be imported to Paper.
4447    ContentMalformed,
4448    /// The provided revision does not match the document head.
4449    RevisionMismatch,
4450    /// The newly created Paper doc would be too large, split the content into multiple docs.
4451    DocLengthExceeded,
4452    /// The imported document contains an image that is too large. The current limit is 1MB. This
4453    /// only applies to HTML with data URI.
4454    ImageSizeExceeded,
4455    /// This operation is not allowed on archived Paper docs.
4456    DocArchived,
4457    /// This operation is not allowed on deleted Paper docs.
4458    DocDeleted,
4459    /// Catch-all used for unrecognized values returned from the server. Encountering this value
4460    /// typically indicates that this SDK version is out of date.
4461    Other,
4462}
4463
4464impl<'de> ::serde::de::Deserialize<'de> for PaperDocUpdateError {
4465    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4466        // union deserializer
4467        use serde::de::{self, MapAccess, Visitor};
4468        struct EnumVisitor;
4469        impl<'de> Visitor<'de> for EnumVisitor {
4470            type Value = PaperDocUpdateError;
4471            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
4472                f.write_str("a PaperDocUpdateError structure")
4473            }
4474            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
4475                let tag: &str = match map.next_key()? {
4476                    Some(".tag") => map.next_value()?,
4477                    _ => return Err(de::Error::missing_field(".tag"))
4478                };
4479                let value = match tag {
4480                    "insufficient_permissions" => PaperDocUpdateError::InsufficientPermissions,
4481                    "doc_not_found" => PaperDocUpdateError::DocNotFound,
4482                    "content_malformed" => PaperDocUpdateError::ContentMalformed,
4483                    "revision_mismatch" => PaperDocUpdateError::RevisionMismatch,
4484                    "doc_length_exceeded" => PaperDocUpdateError::DocLengthExceeded,
4485                    "image_size_exceeded" => PaperDocUpdateError::ImageSizeExceeded,
4486                    "doc_archived" => PaperDocUpdateError::DocArchived,
4487                    "doc_deleted" => PaperDocUpdateError::DocDeleted,
4488                    _ => PaperDocUpdateError::Other,
4489                };
4490                crate::eat_json_fields(&mut map)?;
4491                Ok(value)
4492            }
4493        }
4494        const VARIANTS: &[&str] = &["insufficient_permissions",
4495                                    "other",
4496                                    "doc_not_found",
4497                                    "content_malformed",
4498                                    "revision_mismatch",
4499                                    "doc_length_exceeded",
4500                                    "image_size_exceeded",
4501                                    "doc_archived",
4502                                    "doc_deleted"];
4503        deserializer.deserialize_struct("PaperDocUpdateError", VARIANTS, EnumVisitor)
4504    }
4505}
4506
4507impl ::serde::ser::Serialize for PaperDocUpdateError {
4508    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
4509        // union serializer
4510        use serde::ser::SerializeStruct;
4511        match self {
4512            PaperDocUpdateError::InsufficientPermissions => {
4513                // unit
4514                let mut s = serializer.serialize_struct("PaperDocUpdateError", 1)?;
4515                s.serialize_field(".tag", "insufficient_permissions")?;
4516                s.end()
4517            }
4518            PaperDocUpdateError::DocNotFound => {
4519                // unit
4520                let mut s = serializer.serialize_struct("PaperDocUpdateError", 1)?;
4521                s.serialize_field(".tag", "doc_not_found")?;
4522                s.end()
4523            }
4524            PaperDocUpdateError::ContentMalformed => {
4525                // unit
4526                let mut s = serializer.serialize_struct("PaperDocUpdateError", 1)?;
4527                s.serialize_field(".tag", "content_malformed")?;
4528                s.end()
4529            }
4530            PaperDocUpdateError::RevisionMismatch => {
4531                // unit
4532                let mut s = serializer.serialize_struct("PaperDocUpdateError", 1)?;
4533                s.serialize_field(".tag", "revision_mismatch")?;
4534                s.end()
4535            }
4536            PaperDocUpdateError::DocLengthExceeded => {
4537                // unit
4538                let mut s = serializer.serialize_struct("PaperDocUpdateError", 1)?;
4539                s.serialize_field(".tag", "doc_length_exceeded")?;
4540                s.end()
4541            }
4542            PaperDocUpdateError::ImageSizeExceeded => {
4543                // unit
4544                let mut s = serializer.serialize_struct("PaperDocUpdateError", 1)?;
4545                s.serialize_field(".tag", "image_size_exceeded")?;
4546                s.end()
4547            }
4548            PaperDocUpdateError::DocArchived => {
4549                // unit
4550                let mut s = serializer.serialize_struct("PaperDocUpdateError", 1)?;
4551                s.serialize_field(".tag", "doc_archived")?;
4552                s.end()
4553            }
4554            PaperDocUpdateError::DocDeleted => {
4555                // unit
4556                let mut s = serializer.serialize_struct("PaperDocUpdateError", 1)?;
4557                s.serialize_field(".tag", "doc_deleted")?;
4558                s.end()
4559            }
4560            PaperDocUpdateError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
4561        }
4562    }
4563}
4564
4565impl ::std::error::Error for PaperDocUpdateError {
4566}
4567
4568impl ::std::fmt::Display for PaperDocUpdateError {
4569    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
4570        match self {
4571            PaperDocUpdateError::DocNotFound => f.write_str("The required doc was not found."),
4572            PaperDocUpdateError::ContentMalformed => f.write_str("The provided content was malformed and cannot be imported to Paper."),
4573            PaperDocUpdateError::RevisionMismatch => f.write_str("The provided revision does not match the document head."),
4574            PaperDocUpdateError::DocLengthExceeded => f.write_str("The newly created Paper doc would be too large, split the content into multiple docs."),
4575            PaperDocUpdateError::ImageSizeExceeded => f.write_str("The imported document contains an image that is too large. The current limit is 1MB. This only applies to HTML with data URI."),
4576            PaperDocUpdateError::DocArchived => f.write_str("This operation is not allowed on archived Paper docs."),
4577            PaperDocUpdateError::DocDeleted => f.write_str("This operation is not allowed on deleted Paper docs."),
4578            _ => write!(f, "{:?}", *self),
4579        }
4580    }
4581}
4582
4583// union extends DocLookupError
4584impl From<DocLookupError> for PaperDocUpdateError {
4585    fn from(parent: DocLookupError) -> Self {
4586        match parent {
4587            DocLookupError::InsufficientPermissions => PaperDocUpdateError::InsufficientPermissions,
4588            DocLookupError::Other => PaperDocUpdateError::Other,
4589            DocLookupError::DocNotFound => PaperDocUpdateError::DocNotFound,
4590        }
4591    }
4592}
4593#[derive(Debug, Clone, PartialEq, Eq)]
4594#[non_exhaustive] // variants may be added in the future
4595pub enum PaperDocUpdatePolicy {
4596    /// The content will be appended to the doc.
4597    Append,
4598    /// The content will be prepended to the doc. The doc title will not be affected.
4599    Prepend,
4600    /// The document will be overwitten at the head with the provided content.
4601    OverwriteAll,
4602    /// Catch-all used for unrecognized values returned from the server. Encountering this value
4603    /// typically indicates that this SDK version is out of date.
4604    Other,
4605}
4606
4607impl<'de> ::serde::de::Deserialize<'de> for PaperDocUpdatePolicy {
4608    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4609        // union deserializer
4610        use serde::de::{self, MapAccess, Visitor};
4611        struct EnumVisitor;
4612        impl<'de> Visitor<'de> for EnumVisitor {
4613            type Value = PaperDocUpdatePolicy;
4614            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
4615                f.write_str("a PaperDocUpdatePolicy structure")
4616            }
4617            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
4618                let tag: &str = match map.next_key()? {
4619                    Some(".tag") => map.next_value()?,
4620                    _ => return Err(de::Error::missing_field(".tag"))
4621                };
4622                let value = match tag {
4623                    "append" => PaperDocUpdatePolicy::Append,
4624                    "prepend" => PaperDocUpdatePolicy::Prepend,
4625                    "overwrite_all" => PaperDocUpdatePolicy::OverwriteAll,
4626                    _ => PaperDocUpdatePolicy::Other,
4627                };
4628                crate::eat_json_fields(&mut map)?;
4629                Ok(value)
4630            }
4631        }
4632        const VARIANTS: &[&str] = &["append",
4633                                    "prepend",
4634                                    "overwrite_all",
4635                                    "other"];
4636        deserializer.deserialize_struct("PaperDocUpdatePolicy", VARIANTS, EnumVisitor)
4637    }
4638}
4639
4640impl ::serde::ser::Serialize for PaperDocUpdatePolicy {
4641    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
4642        // union serializer
4643        use serde::ser::SerializeStruct;
4644        match self {
4645            PaperDocUpdatePolicy::Append => {
4646                // unit
4647                let mut s = serializer.serialize_struct("PaperDocUpdatePolicy", 1)?;
4648                s.serialize_field(".tag", "append")?;
4649                s.end()
4650            }
4651            PaperDocUpdatePolicy::Prepend => {
4652                // unit
4653                let mut s = serializer.serialize_struct("PaperDocUpdatePolicy", 1)?;
4654                s.serialize_field(".tag", "prepend")?;
4655                s.end()
4656            }
4657            PaperDocUpdatePolicy::OverwriteAll => {
4658                // unit
4659                let mut s = serializer.serialize_struct("PaperDocUpdatePolicy", 1)?;
4660                s.serialize_field(".tag", "overwrite_all")?;
4661                s.end()
4662            }
4663            PaperDocUpdatePolicy::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
4664        }
4665    }
4666}
4667
4668#[derive(Debug, Clone, PartialEq, Eq)]
4669#[non_exhaustive] // structs may have more fields added in the future.
4670pub struct PaperFolderCreateArg {
4671    /// The name of the new Paper folder.
4672    pub name: String,
4673    /// The encrypted Paper folder Id where the new Paper folder should be created. The API user has
4674    /// to have write access to this folder or error is thrown. If not supplied, the new folder will
4675    /// be created at top level.
4676    pub parent_folder_id: Option<String>,
4677    /// Whether the folder to be created should be a team folder. This value will be ignored if
4678    /// parent_folder_id is supplied, as the new folder will inherit the type (private or team
4679    /// folder) from its parent. We will by default create a top-level private folder if both
4680    /// parent_folder_id and is_team_folder are not supplied.
4681    pub is_team_folder: Option<bool>,
4682}
4683
4684impl PaperFolderCreateArg {
4685    pub fn new(name: String) -> Self {
4686        PaperFolderCreateArg {
4687            name,
4688            parent_folder_id: None,
4689            is_team_folder: None,
4690        }
4691    }
4692
4693    pub fn with_parent_folder_id(mut self, value: String) -> Self {
4694        self.parent_folder_id = Some(value);
4695        self
4696    }
4697
4698    pub fn with_is_team_folder(mut self, value: bool) -> Self {
4699        self.is_team_folder = Some(value);
4700        self
4701    }
4702}
4703
4704const PAPER_FOLDER_CREATE_ARG_FIELDS: &[&str] = &["name",
4705                                                  "parent_folder_id",
4706                                                  "is_team_folder"];
4707impl PaperFolderCreateArg {
4708    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
4709        map: V,
4710    ) -> Result<PaperFolderCreateArg, V::Error> {
4711        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
4712    }
4713
4714    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
4715        mut map: V,
4716        optional: bool,
4717    ) -> Result<Option<PaperFolderCreateArg>, V::Error> {
4718        let mut field_name = None;
4719        let mut field_parent_folder_id = None;
4720        let mut field_is_team_folder = None;
4721        let mut nothing = true;
4722        while let Some(key) = map.next_key::<&str>()? {
4723            nothing = false;
4724            match key {
4725                "name" => {
4726                    if field_name.is_some() {
4727                        return Err(::serde::de::Error::duplicate_field("name"));
4728                    }
4729                    field_name = Some(map.next_value()?);
4730                }
4731                "parent_folder_id" => {
4732                    if field_parent_folder_id.is_some() {
4733                        return Err(::serde::de::Error::duplicate_field("parent_folder_id"));
4734                    }
4735                    field_parent_folder_id = Some(map.next_value()?);
4736                }
4737                "is_team_folder" => {
4738                    if field_is_team_folder.is_some() {
4739                        return Err(::serde::de::Error::duplicate_field("is_team_folder"));
4740                    }
4741                    field_is_team_folder = Some(map.next_value()?);
4742                }
4743                _ => {
4744                    // unknown field allowed and ignored
4745                    map.next_value::<::serde_json::Value>()?;
4746                }
4747            }
4748        }
4749        if optional && nothing {
4750            return Ok(None);
4751        }
4752        let result = PaperFolderCreateArg {
4753            name: field_name.ok_or_else(|| ::serde::de::Error::missing_field("name"))?,
4754            parent_folder_id: field_parent_folder_id.and_then(Option::flatten),
4755            is_team_folder: field_is_team_folder.and_then(Option::flatten),
4756        };
4757        Ok(Some(result))
4758    }
4759
4760    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
4761        &self,
4762        s: &mut S::SerializeStruct,
4763    ) -> Result<(), S::Error> {
4764        use serde::ser::SerializeStruct;
4765        s.serialize_field("name", &self.name)?;
4766        if let Some(val) = &self.parent_folder_id {
4767            s.serialize_field("parent_folder_id", val)?;
4768        }
4769        if let Some(val) = &self.is_team_folder {
4770            s.serialize_field("is_team_folder", val)?;
4771        }
4772        Ok(())
4773    }
4774}
4775
4776impl<'de> ::serde::de::Deserialize<'de> for PaperFolderCreateArg {
4777    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4778        // struct deserializer
4779        use serde::de::{MapAccess, Visitor};
4780        struct StructVisitor;
4781        impl<'de> Visitor<'de> for StructVisitor {
4782            type Value = PaperFolderCreateArg;
4783            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
4784                f.write_str("a PaperFolderCreateArg struct")
4785            }
4786            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
4787                PaperFolderCreateArg::internal_deserialize(map)
4788            }
4789        }
4790        deserializer.deserialize_struct("PaperFolderCreateArg", PAPER_FOLDER_CREATE_ARG_FIELDS, StructVisitor)
4791    }
4792}
4793
4794impl ::serde::ser::Serialize for PaperFolderCreateArg {
4795    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
4796        // struct serializer
4797        use serde::ser::SerializeStruct;
4798        let mut s = serializer.serialize_struct("PaperFolderCreateArg", 3)?;
4799        self.internal_serialize::<S>(&mut s)?;
4800        s.end()
4801    }
4802}
4803
4804#[derive(Debug, Clone, PartialEq, Eq)]
4805#[non_exhaustive] // variants may be added in the future
4806pub enum PaperFolderCreateError {
4807    /// Your account does not have permissions to perform this action. This may be due to it only
4808    /// having access to Paper as files in the Dropbox filesystem. For more information, refer to
4809    /// the [Paper Migration
4810    /// Guide](https://www.dropbox.com/lp/developers/reference/paper-migration-guide).
4811    InsufficientPermissions,
4812    /// The specified parent Paper folder cannot be found.
4813    FolderNotFound,
4814    /// The folder id cannot be decrypted to valid folder id.
4815    InvalidFolderId,
4816    /// Catch-all used for unrecognized values returned from the server. Encountering this value
4817    /// typically indicates that this SDK version is out of date.
4818    Other,
4819}
4820
4821impl<'de> ::serde::de::Deserialize<'de> for PaperFolderCreateError {
4822    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4823        // union deserializer
4824        use serde::de::{self, MapAccess, Visitor};
4825        struct EnumVisitor;
4826        impl<'de> Visitor<'de> for EnumVisitor {
4827            type Value = PaperFolderCreateError;
4828            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
4829                f.write_str("a PaperFolderCreateError structure")
4830            }
4831            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
4832                let tag: &str = match map.next_key()? {
4833                    Some(".tag") => map.next_value()?,
4834                    _ => return Err(de::Error::missing_field(".tag"))
4835                };
4836                let value = match tag {
4837                    "insufficient_permissions" => PaperFolderCreateError::InsufficientPermissions,
4838                    "folder_not_found" => PaperFolderCreateError::FolderNotFound,
4839                    "invalid_folder_id" => PaperFolderCreateError::InvalidFolderId,
4840                    _ => PaperFolderCreateError::Other,
4841                };
4842                crate::eat_json_fields(&mut map)?;
4843                Ok(value)
4844            }
4845        }
4846        const VARIANTS: &[&str] = &["insufficient_permissions",
4847                                    "other",
4848                                    "folder_not_found",
4849                                    "invalid_folder_id"];
4850        deserializer.deserialize_struct("PaperFolderCreateError", VARIANTS, EnumVisitor)
4851    }
4852}
4853
4854impl ::serde::ser::Serialize for PaperFolderCreateError {
4855    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
4856        // union serializer
4857        use serde::ser::SerializeStruct;
4858        match self {
4859            PaperFolderCreateError::InsufficientPermissions => {
4860                // unit
4861                let mut s = serializer.serialize_struct("PaperFolderCreateError", 1)?;
4862                s.serialize_field(".tag", "insufficient_permissions")?;
4863                s.end()
4864            }
4865            PaperFolderCreateError::FolderNotFound => {
4866                // unit
4867                let mut s = serializer.serialize_struct("PaperFolderCreateError", 1)?;
4868                s.serialize_field(".tag", "folder_not_found")?;
4869                s.end()
4870            }
4871            PaperFolderCreateError::InvalidFolderId => {
4872                // unit
4873                let mut s = serializer.serialize_struct("PaperFolderCreateError", 1)?;
4874                s.serialize_field(".tag", "invalid_folder_id")?;
4875                s.end()
4876            }
4877            PaperFolderCreateError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
4878        }
4879    }
4880}
4881
4882impl ::std::error::Error for PaperFolderCreateError {
4883}
4884
4885impl ::std::fmt::Display for PaperFolderCreateError {
4886    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
4887        match self {
4888            PaperFolderCreateError::FolderNotFound => f.write_str("The specified parent Paper folder cannot be found."),
4889            PaperFolderCreateError::InvalidFolderId => f.write_str("The folder id cannot be decrypted to valid folder id."),
4890            _ => write!(f, "{:?}", *self),
4891        }
4892    }
4893}
4894
4895// union extends PaperApiBaseError
4896impl From<PaperApiBaseError> for PaperFolderCreateError {
4897    fn from(parent: PaperApiBaseError) -> Self {
4898        match parent {
4899            PaperApiBaseError::InsufficientPermissions => PaperFolderCreateError::InsufficientPermissions,
4900            PaperApiBaseError::Other => PaperFolderCreateError::Other,
4901        }
4902    }
4903}
4904#[derive(Debug, Clone, PartialEq, Eq)]
4905#[non_exhaustive] // structs may have more fields added in the future.
4906pub struct PaperFolderCreateResult {
4907    /// Folder ID of the newly created folder.
4908    pub folder_id: String,
4909}
4910
4911impl PaperFolderCreateResult {
4912    pub fn new(folder_id: String) -> Self {
4913        PaperFolderCreateResult {
4914            folder_id,
4915        }
4916    }
4917}
4918
4919const PAPER_FOLDER_CREATE_RESULT_FIELDS: &[&str] = &["folder_id"];
4920impl PaperFolderCreateResult {
4921    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
4922        map: V,
4923    ) -> Result<PaperFolderCreateResult, V::Error> {
4924        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
4925    }
4926
4927    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
4928        mut map: V,
4929        optional: bool,
4930    ) -> Result<Option<PaperFolderCreateResult>, V::Error> {
4931        let mut field_folder_id = None;
4932        let mut nothing = true;
4933        while let Some(key) = map.next_key::<&str>()? {
4934            nothing = false;
4935            match key {
4936                "folder_id" => {
4937                    if field_folder_id.is_some() {
4938                        return Err(::serde::de::Error::duplicate_field("folder_id"));
4939                    }
4940                    field_folder_id = Some(map.next_value()?);
4941                }
4942                _ => {
4943                    // unknown field allowed and ignored
4944                    map.next_value::<::serde_json::Value>()?;
4945                }
4946            }
4947        }
4948        if optional && nothing {
4949            return Ok(None);
4950        }
4951        let result = PaperFolderCreateResult {
4952            folder_id: field_folder_id.ok_or_else(|| ::serde::de::Error::missing_field("folder_id"))?,
4953        };
4954        Ok(Some(result))
4955    }
4956
4957    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
4958        &self,
4959        s: &mut S::SerializeStruct,
4960    ) -> Result<(), S::Error> {
4961        use serde::ser::SerializeStruct;
4962        s.serialize_field("folder_id", &self.folder_id)?;
4963        Ok(())
4964    }
4965}
4966
4967impl<'de> ::serde::de::Deserialize<'de> for PaperFolderCreateResult {
4968    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4969        // struct deserializer
4970        use serde::de::{MapAccess, Visitor};
4971        struct StructVisitor;
4972        impl<'de> Visitor<'de> for StructVisitor {
4973            type Value = PaperFolderCreateResult;
4974            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
4975                f.write_str("a PaperFolderCreateResult struct")
4976            }
4977            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
4978                PaperFolderCreateResult::internal_deserialize(map)
4979            }
4980        }
4981        deserializer.deserialize_struct("PaperFolderCreateResult", PAPER_FOLDER_CREATE_RESULT_FIELDS, StructVisitor)
4982    }
4983}
4984
4985impl ::serde::ser::Serialize for PaperFolderCreateResult {
4986    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
4987        // struct serializer
4988        use serde::ser::SerializeStruct;
4989        let mut s = serializer.serialize_struct("PaperFolderCreateResult", 1)?;
4990        self.internal_serialize::<S>(&mut s)?;
4991        s.end()
4992    }
4993}
4994
4995#[derive(Debug, Clone, PartialEq, Eq)]
4996#[non_exhaustive] // structs may have more fields added in the future.
4997pub struct RefPaperDoc {
4998    /// The Paper doc ID.
4999    pub doc_id: PaperDocId,
5000}
5001
5002impl RefPaperDoc {
5003    pub fn new(doc_id: PaperDocId) -> Self {
5004        RefPaperDoc {
5005            doc_id,
5006        }
5007    }
5008}
5009
5010const REF_PAPER_DOC_FIELDS: &[&str] = &["doc_id"];
5011impl RefPaperDoc {
5012    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
5013        map: V,
5014    ) -> Result<RefPaperDoc, V::Error> {
5015        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
5016    }
5017
5018    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
5019        mut map: V,
5020        optional: bool,
5021    ) -> Result<Option<RefPaperDoc>, V::Error> {
5022        let mut field_doc_id = None;
5023        let mut nothing = true;
5024        while let Some(key) = map.next_key::<&str>()? {
5025            nothing = false;
5026            match key {
5027                "doc_id" => {
5028                    if field_doc_id.is_some() {
5029                        return Err(::serde::de::Error::duplicate_field("doc_id"));
5030                    }
5031                    field_doc_id = Some(map.next_value()?);
5032                }
5033                _ => {
5034                    // unknown field allowed and ignored
5035                    map.next_value::<::serde_json::Value>()?;
5036                }
5037            }
5038        }
5039        if optional && nothing {
5040            return Ok(None);
5041        }
5042        let result = RefPaperDoc {
5043            doc_id: field_doc_id.ok_or_else(|| ::serde::de::Error::missing_field("doc_id"))?,
5044        };
5045        Ok(Some(result))
5046    }
5047
5048    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
5049        &self,
5050        s: &mut S::SerializeStruct,
5051    ) -> Result<(), S::Error> {
5052        use serde::ser::SerializeStruct;
5053        s.serialize_field("doc_id", &self.doc_id)?;
5054        Ok(())
5055    }
5056}
5057
5058impl<'de> ::serde::de::Deserialize<'de> for RefPaperDoc {
5059    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
5060        // struct deserializer
5061        use serde::de::{MapAccess, Visitor};
5062        struct StructVisitor;
5063        impl<'de> Visitor<'de> for StructVisitor {
5064            type Value = RefPaperDoc;
5065            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
5066                f.write_str("a RefPaperDoc struct")
5067            }
5068            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
5069                RefPaperDoc::internal_deserialize(map)
5070            }
5071        }
5072        deserializer.deserialize_struct("RefPaperDoc", REF_PAPER_DOC_FIELDS, StructVisitor)
5073    }
5074}
5075
5076impl ::serde::ser::Serialize for RefPaperDoc {
5077    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
5078        // struct serializer
5079        use serde::ser::SerializeStruct;
5080        let mut s = serializer.serialize_struct("RefPaperDoc", 1)?;
5081        self.internal_serialize::<S>(&mut s)?;
5082        s.end()
5083    }
5084}
5085
5086#[derive(Debug, Clone, PartialEq, Eq)]
5087#[non_exhaustive] // structs may have more fields added in the future.
5088pub struct RemovePaperDocUser {
5089    /// The Paper doc ID.
5090    pub doc_id: PaperDocId,
5091    /// User which should be removed from the Paper doc. Specify only email address or Dropbox
5092    /// account ID.
5093    pub member: crate::types::sharing::MemberSelector,
5094}
5095
5096impl RemovePaperDocUser {
5097    pub fn new(doc_id: PaperDocId, member: crate::types::sharing::MemberSelector) -> Self {
5098        RemovePaperDocUser {
5099            doc_id,
5100            member,
5101        }
5102    }
5103}
5104
5105const REMOVE_PAPER_DOC_USER_FIELDS: &[&str] = &["doc_id",
5106                                                "member"];
5107impl RemovePaperDocUser {
5108    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
5109        map: V,
5110    ) -> Result<RemovePaperDocUser, V::Error> {
5111        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
5112    }
5113
5114    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
5115        mut map: V,
5116        optional: bool,
5117    ) -> Result<Option<RemovePaperDocUser>, V::Error> {
5118        let mut field_doc_id = None;
5119        let mut field_member = None;
5120        let mut nothing = true;
5121        while let Some(key) = map.next_key::<&str>()? {
5122            nothing = false;
5123            match key {
5124                "doc_id" => {
5125                    if field_doc_id.is_some() {
5126                        return Err(::serde::de::Error::duplicate_field("doc_id"));
5127                    }
5128                    field_doc_id = Some(map.next_value()?);
5129                }
5130                "member" => {
5131                    if field_member.is_some() {
5132                        return Err(::serde::de::Error::duplicate_field("member"));
5133                    }
5134                    field_member = Some(map.next_value()?);
5135                }
5136                _ => {
5137                    // unknown field allowed and ignored
5138                    map.next_value::<::serde_json::Value>()?;
5139                }
5140            }
5141        }
5142        if optional && nothing {
5143            return Ok(None);
5144        }
5145        let result = RemovePaperDocUser {
5146            doc_id: field_doc_id.ok_or_else(|| ::serde::de::Error::missing_field("doc_id"))?,
5147            member: field_member.ok_or_else(|| ::serde::de::Error::missing_field("member"))?,
5148        };
5149        Ok(Some(result))
5150    }
5151
5152    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
5153        &self,
5154        s: &mut S::SerializeStruct,
5155    ) -> Result<(), S::Error> {
5156        use serde::ser::SerializeStruct;
5157        s.serialize_field("doc_id", &self.doc_id)?;
5158        s.serialize_field("member", &self.member)?;
5159        Ok(())
5160    }
5161}
5162
5163impl<'de> ::serde::de::Deserialize<'de> for RemovePaperDocUser {
5164    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
5165        // struct deserializer
5166        use serde::de::{MapAccess, Visitor};
5167        struct StructVisitor;
5168        impl<'de> Visitor<'de> for StructVisitor {
5169            type Value = RemovePaperDocUser;
5170            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
5171                f.write_str("a RemovePaperDocUser struct")
5172            }
5173            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
5174                RemovePaperDocUser::internal_deserialize(map)
5175            }
5176        }
5177        deserializer.deserialize_struct("RemovePaperDocUser", REMOVE_PAPER_DOC_USER_FIELDS, StructVisitor)
5178    }
5179}
5180
5181impl ::serde::ser::Serialize for RemovePaperDocUser {
5182    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
5183        // struct serializer
5184        use serde::ser::SerializeStruct;
5185        let mut s = serializer.serialize_struct("RemovePaperDocUser", 2)?;
5186        self.internal_serialize::<S>(&mut s)?;
5187        s.end()
5188    }
5189}
5190
5191// struct extends RefPaperDoc
5192impl From<RemovePaperDocUser> for RefPaperDoc {
5193    fn from(subtype: RemovePaperDocUser) -> Self {
5194        Self {
5195            doc_id: subtype.doc_id,
5196        }
5197    }
5198}
5199/// Sharing policy of Paper doc.
5200#[derive(Debug, Clone, PartialEq, Eq, Default)]
5201#[non_exhaustive] // structs may have more fields added in the future.
5202pub struct SharingPolicy {
5203    /// This value applies to the non-team members.
5204    pub public_sharing_policy: Option<SharingPublicPolicyType>,
5205    /// This value applies to the team members only. The value is null for all personal accounts.
5206    pub team_sharing_policy: Option<SharingTeamPolicyType>,
5207}
5208
5209impl SharingPolicy {
5210    pub fn with_public_sharing_policy(mut self, value: SharingPublicPolicyType) -> Self {
5211        self.public_sharing_policy = Some(value);
5212        self
5213    }
5214
5215    pub fn with_team_sharing_policy(mut self, value: SharingTeamPolicyType) -> Self {
5216        self.team_sharing_policy = Some(value);
5217        self
5218    }
5219}
5220
5221const SHARING_POLICY_FIELDS: &[&str] = &["public_sharing_policy",
5222                                         "team_sharing_policy"];
5223impl SharingPolicy {
5224    // no _opt deserializer
5225    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
5226        mut map: V,
5227    ) -> Result<SharingPolicy, V::Error> {
5228        let mut field_public_sharing_policy = None;
5229        let mut field_team_sharing_policy = None;
5230        while let Some(key) = map.next_key::<&str>()? {
5231            match key {
5232                "public_sharing_policy" => {
5233                    if field_public_sharing_policy.is_some() {
5234                        return Err(::serde::de::Error::duplicate_field("public_sharing_policy"));
5235                    }
5236                    field_public_sharing_policy = Some(map.next_value()?);
5237                }
5238                "team_sharing_policy" => {
5239                    if field_team_sharing_policy.is_some() {
5240                        return Err(::serde::de::Error::duplicate_field("team_sharing_policy"));
5241                    }
5242                    field_team_sharing_policy = Some(map.next_value()?);
5243                }
5244                _ => {
5245                    // unknown field allowed and ignored
5246                    map.next_value::<::serde_json::Value>()?;
5247                }
5248            }
5249        }
5250        let result = SharingPolicy {
5251            public_sharing_policy: field_public_sharing_policy.and_then(Option::flatten),
5252            team_sharing_policy: field_team_sharing_policy.and_then(Option::flatten),
5253        };
5254        Ok(result)
5255    }
5256
5257    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
5258        &self,
5259        s: &mut S::SerializeStruct,
5260    ) -> Result<(), S::Error> {
5261        use serde::ser::SerializeStruct;
5262        if let Some(val) = &self.public_sharing_policy {
5263            s.serialize_field("public_sharing_policy", val)?;
5264        }
5265        if let Some(val) = &self.team_sharing_policy {
5266            s.serialize_field("team_sharing_policy", val)?;
5267        }
5268        Ok(())
5269    }
5270}
5271
5272impl<'de> ::serde::de::Deserialize<'de> for SharingPolicy {
5273    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
5274        // struct deserializer
5275        use serde::de::{MapAccess, Visitor};
5276        struct StructVisitor;
5277        impl<'de> Visitor<'de> for StructVisitor {
5278            type Value = SharingPolicy;
5279            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
5280                f.write_str("a SharingPolicy struct")
5281            }
5282            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
5283                SharingPolicy::internal_deserialize(map)
5284            }
5285        }
5286        deserializer.deserialize_struct("SharingPolicy", SHARING_POLICY_FIELDS, StructVisitor)
5287    }
5288}
5289
5290impl ::serde::ser::Serialize for SharingPolicy {
5291    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
5292        // struct serializer
5293        use serde::ser::SerializeStruct;
5294        let mut s = serializer.serialize_struct("SharingPolicy", 2)?;
5295        self.internal_serialize::<S>(&mut s)?;
5296        s.end()
5297    }
5298}
5299
5300#[derive(Debug, Clone, PartialEq, Eq)]
5301pub enum SharingPublicPolicyType {
5302    /// Users who have a link to this doc can edit it.
5303    PeopleWithLinkCanEdit,
5304    /// Users who have a link to this doc can view and comment on it.
5305    PeopleWithLinkCanViewAndComment,
5306    /// Users must be explicitly invited to this doc.
5307    InviteOnly,
5308    /// Value used to indicate that doc sharing is enabled only within team.
5309    Disabled,
5310}
5311
5312impl<'de> ::serde::de::Deserialize<'de> for SharingPublicPolicyType {
5313    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
5314        // union deserializer
5315        use serde::de::{self, MapAccess, Visitor};
5316        struct EnumVisitor;
5317        impl<'de> Visitor<'de> for EnumVisitor {
5318            type Value = SharingPublicPolicyType;
5319            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
5320                f.write_str("a SharingPublicPolicyType structure")
5321            }
5322            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
5323                let tag: &str = match map.next_key()? {
5324                    Some(".tag") => map.next_value()?,
5325                    _ => return Err(de::Error::missing_field(".tag"))
5326                };
5327                let value = match tag {
5328                    "people_with_link_can_edit" => SharingPublicPolicyType::PeopleWithLinkCanEdit,
5329                    "people_with_link_can_view_and_comment" => SharingPublicPolicyType::PeopleWithLinkCanViewAndComment,
5330                    "invite_only" => SharingPublicPolicyType::InviteOnly,
5331                    "disabled" => SharingPublicPolicyType::Disabled,
5332                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
5333                };
5334                crate::eat_json_fields(&mut map)?;
5335                Ok(value)
5336            }
5337        }
5338        const VARIANTS: &[&str] = &["people_with_link_can_edit",
5339                                    "people_with_link_can_view_and_comment",
5340                                    "invite_only",
5341                                    "disabled"];
5342        deserializer.deserialize_struct("SharingPublicPolicyType", VARIANTS, EnumVisitor)
5343    }
5344}
5345
5346impl ::serde::ser::Serialize for SharingPublicPolicyType {
5347    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
5348        // union serializer
5349        use serde::ser::SerializeStruct;
5350        match self {
5351            SharingPublicPolicyType::PeopleWithLinkCanEdit => {
5352                // unit
5353                let mut s = serializer.serialize_struct("SharingPublicPolicyType", 1)?;
5354                s.serialize_field(".tag", "people_with_link_can_edit")?;
5355                s.end()
5356            }
5357            SharingPublicPolicyType::PeopleWithLinkCanViewAndComment => {
5358                // unit
5359                let mut s = serializer.serialize_struct("SharingPublicPolicyType", 1)?;
5360                s.serialize_field(".tag", "people_with_link_can_view_and_comment")?;
5361                s.end()
5362            }
5363            SharingPublicPolicyType::InviteOnly => {
5364                // unit
5365                let mut s = serializer.serialize_struct("SharingPublicPolicyType", 1)?;
5366                s.serialize_field(".tag", "invite_only")?;
5367                s.end()
5368            }
5369            SharingPublicPolicyType::Disabled => {
5370                // unit
5371                let mut s = serializer.serialize_struct("SharingPublicPolicyType", 1)?;
5372                s.serialize_field(".tag", "disabled")?;
5373                s.end()
5374            }
5375        }
5376    }
5377}
5378
5379// union extends SharingTeamPolicyType
5380impl From<SharingTeamPolicyType> for SharingPublicPolicyType {
5381    fn from(parent: SharingTeamPolicyType) -> Self {
5382        match parent {
5383            SharingTeamPolicyType::PeopleWithLinkCanEdit => SharingPublicPolicyType::PeopleWithLinkCanEdit,
5384            SharingTeamPolicyType::PeopleWithLinkCanViewAndComment => SharingPublicPolicyType::PeopleWithLinkCanViewAndComment,
5385            SharingTeamPolicyType::InviteOnly => SharingPublicPolicyType::InviteOnly,
5386        }
5387    }
5388}
5389/// The sharing policy type of the Paper doc.
5390#[derive(Debug, Clone, PartialEq, Eq)]
5391pub enum SharingTeamPolicyType {
5392    /// Users who have a link to this doc can edit it.
5393    PeopleWithLinkCanEdit,
5394    /// Users who have a link to this doc can view and comment on it.
5395    PeopleWithLinkCanViewAndComment,
5396    /// Users must be explicitly invited to this doc.
5397    InviteOnly,
5398}
5399
5400impl<'de> ::serde::de::Deserialize<'de> for SharingTeamPolicyType {
5401    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
5402        // union deserializer
5403        use serde::de::{self, MapAccess, Visitor};
5404        struct EnumVisitor;
5405        impl<'de> Visitor<'de> for EnumVisitor {
5406            type Value = SharingTeamPolicyType;
5407            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
5408                f.write_str("a SharingTeamPolicyType structure")
5409            }
5410            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
5411                let tag: &str = match map.next_key()? {
5412                    Some(".tag") => map.next_value()?,
5413                    _ => return Err(de::Error::missing_field(".tag"))
5414                };
5415                let value = match tag {
5416                    "people_with_link_can_edit" => SharingTeamPolicyType::PeopleWithLinkCanEdit,
5417                    "people_with_link_can_view_and_comment" => SharingTeamPolicyType::PeopleWithLinkCanViewAndComment,
5418                    "invite_only" => SharingTeamPolicyType::InviteOnly,
5419                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
5420                };
5421                crate::eat_json_fields(&mut map)?;
5422                Ok(value)
5423            }
5424        }
5425        const VARIANTS: &[&str] = &["people_with_link_can_edit",
5426                                    "people_with_link_can_view_and_comment",
5427                                    "invite_only"];
5428        deserializer.deserialize_struct("SharingTeamPolicyType", VARIANTS, EnumVisitor)
5429    }
5430}
5431
5432impl ::serde::ser::Serialize for SharingTeamPolicyType {
5433    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
5434        // union serializer
5435        use serde::ser::SerializeStruct;
5436        match self {
5437            SharingTeamPolicyType::PeopleWithLinkCanEdit => {
5438                // unit
5439                let mut s = serializer.serialize_struct("SharingTeamPolicyType", 1)?;
5440                s.serialize_field(".tag", "people_with_link_can_edit")?;
5441                s.end()
5442            }
5443            SharingTeamPolicyType::PeopleWithLinkCanViewAndComment => {
5444                // unit
5445                let mut s = serializer.serialize_struct("SharingTeamPolicyType", 1)?;
5446                s.serialize_field(".tag", "people_with_link_can_view_and_comment")?;
5447                s.end()
5448            }
5449            SharingTeamPolicyType::InviteOnly => {
5450                // unit
5451                let mut s = serializer.serialize_struct("SharingTeamPolicyType", 1)?;
5452                s.serialize_field(".tag", "invite_only")?;
5453                s.end()
5454            }
5455        }
5456    }
5457}
5458
5459#[derive(Debug, Clone, PartialEq, Eq)]
5460#[non_exhaustive] // structs may have more fields added in the future.
5461pub struct UserInfoWithPermissionLevel {
5462    /// User shared on the Paper doc.
5463    pub user: crate::types::sharing::UserInfo,
5464    /// Permission level for the user.
5465    pub permission_level: PaperDocPermissionLevel,
5466}
5467
5468impl UserInfoWithPermissionLevel {
5469    pub fn new(
5470        user: crate::types::sharing::UserInfo,
5471        permission_level: PaperDocPermissionLevel,
5472    ) -> Self {
5473        UserInfoWithPermissionLevel {
5474            user,
5475            permission_level,
5476        }
5477    }
5478}
5479
5480const USER_INFO_WITH_PERMISSION_LEVEL_FIELDS: &[&str] = &["user",
5481                                                          "permission_level"];
5482impl UserInfoWithPermissionLevel {
5483    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
5484        map: V,
5485    ) -> Result<UserInfoWithPermissionLevel, V::Error> {
5486        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
5487    }
5488
5489    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
5490        mut map: V,
5491        optional: bool,
5492    ) -> Result<Option<UserInfoWithPermissionLevel>, V::Error> {
5493        let mut field_user = None;
5494        let mut field_permission_level = None;
5495        let mut nothing = true;
5496        while let Some(key) = map.next_key::<&str>()? {
5497            nothing = false;
5498            match key {
5499                "user" => {
5500                    if field_user.is_some() {
5501                        return Err(::serde::de::Error::duplicate_field("user"));
5502                    }
5503                    field_user = Some(map.next_value()?);
5504                }
5505                "permission_level" => {
5506                    if field_permission_level.is_some() {
5507                        return Err(::serde::de::Error::duplicate_field("permission_level"));
5508                    }
5509                    field_permission_level = Some(map.next_value()?);
5510                }
5511                _ => {
5512                    // unknown field allowed and ignored
5513                    map.next_value::<::serde_json::Value>()?;
5514                }
5515            }
5516        }
5517        if optional && nothing {
5518            return Ok(None);
5519        }
5520        let result = UserInfoWithPermissionLevel {
5521            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
5522            permission_level: field_permission_level.ok_or_else(|| ::serde::de::Error::missing_field("permission_level"))?,
5523        };
5524        Ok(Some(result))
5525    }
5526
5527    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
5528        &self,
5529        s: &mut S::SerializeStruct,
5530    ) -> Result<(), S::Error> {
5531        use serde::ser::SerializeStruct;
5532        s.serialize_field("user", &self.user)?;
5533        s.serialize_field("permission_level", &self.permission_level)?;
5534        Ok(())
5535    }
5536}
5537
5538impl<'de> ::serde::de::Deserialize<'de> for UserInfoWithPermissionLevel {
5539    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
5540        // struct deserializer
5541        use serde::de::{MapAccess, Visitor};
5542        struct StructVisitor;
5543        impl<'de> Visitor<'de> for StructVisitor {
5544            type Value = UserInfoWithPermissionLevel;
5545            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
5546                f.write_str("a UserInfoWithPermissionLevel struct")
5547            }
5548            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
5549                UserInfoWithPermissionLevel::internal_deserialize(map)
5550            }
5551        }
5552        deserializer.deserialize_struct("UserInfoWithPermissionLevel", USER_INFO_WITH_PERMISSION_LEVEL_FIELDS, StructVisitor)
5553    }
5554}
5555
5556impl ::serde::ser::Serialize for UserInfoWithPermissionLevel {
5557    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
5558        // struct serializer
5559        use serde::ser::SerializeStruct;
5560        let mut s = serializer.serialize_struct("UserInfoWithPermissionLevel", 2)?;
5561        self.internal_serialize::<S>(&mut s)?;
5562        s.end()
5563    }
5564}
5565
5566#[derive(Debug, Clone, PartialEq, Eq)]
5567#[non_exhaustive] // variants may be added in the future
5568pub enum UserOnPaperDocFilter {
5569    /// all users who have visited the Paper doc.
5570    Visited,
5571    /// All uses who are shared on the Paper doc. This includes all users who have visited the Paper
5572    /// doc as well as those who have not.
5573    Shared,
5574    /// Catch-all used for unrecognized values returned from the server. Encountering this value
5575    /// typically indicates that this SDK version is out of date.
5576    Other,
5577}
5578
5579impl<'de> ::serde::de::Deserialize<'de> for UserOnPaperDocFilter {
5580    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
5581        // union deserializer
5582        use serde::de::{self, MapAccess, Visitor};
5583        struct EnumVisitor;
5584        impl<'de> Visitor<'de> for EnumVisitor {
5585            type Value = UserOnPaperDocFilter;
5586            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
5587                f.write_str("a UserOnPaperDocFilter structure")
5588            }
5589            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
5590                let tag: &str = match map.next_key()? {
5591                    Some(".tag") => map.next_value()?,
5592                    _ => return Err(de::Error::missing_field(".tag"))
5593                };
5594                let value = match tag {
5595                    "visited" => UserOnPaperDocFilter::Visited,
5596                    "shared" => UserOnPaperDocFilter::Shared,
5597                    _ => UserOnPaperDocFilter::Other,
5598                };
5599                crate::eat_json_fields(&mut map)?;
5600                Ok(value)
5601            }
5602        }
5603        const VARIANTS: &[&str] = &["visited",
5604                                    "shared",
5605                                    "other"];
5606        deserializer.deserialize_struct("UserOnPaperDocFilter", VARIANTS, EnumVisitor)
5607    }
5608}
5609
5610impl ::serde::ser::Serialize for UserOnPaperDocFilter {
5611    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
5612        // union serializer
5613        use serde::ser::SerializeStruct;
5614        match self {
5615            UserOnPaperDocFilter::Visited => {
5616                // unit
5617                let mut s = serializer.serialize_struct("UserOnPaperDocFilter", 1)?;
5618                s.serialize_field(".tag", "visited")?;
5619                s.end()
5620            }
5621            UserOnPaperDocFilter::Shared => {
5622                // unit
5623                let mut s = serializer.serialize_struct("UserOnPaperDocFilter", 1)?;
5624                s.serialize_field(".tag", "shared")?;
5625                s.end()
5626            }
5627            UserOnPaperDocFilter::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
5628        }
5629    }
5630}
5631