1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
use crate::errors::Result;
use crate::types::*;
use uuid::Uuid;

/// Changes imported contacts using the list of contacts saved on the device. Imports newly added contacts and, if at least the file database is enabled, deletes recently deleted contacts. Query result depends on the result of the previous query, so only one query is possible at the same time
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ChangeImportedContacts {
    #[doc(hidden)]
    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
    extra: Option<String>,
    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
    client_id: Option<i32>,
    /// The new list of contacts, contact's vCard are ignored and are not imported

    #[serde(default)]
    contacts: Vec<Contact>,

    #[serde(rename(serialize = "@type"))]
    td_type: String,
}

impl RObject for ChangeImportedContacts {
    #[doc(hidden)]
    fn extra(&self) -> Option<&str> {
        self.extra.as_deref()
    }
    #[doc(hidden)]
    fn client_id(&self) -> Option<i32> {
        self.client_id
    }
}

impl RFunction for ChangeImportedContacts {}

impl ChangeImportedContacts {
    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
        Ok(serde_json::from_str(json.as_ref())?)
    }
    pub fn builder() -> ChangeImportedContactsBuilder {
        let mut inner = ChangeImportedContacts::default();
        inner.extra = Some(Uuid::new_v4().to_string());

        inner.td_type = "changeImportedContacts".to_string();

        ChangeImportedContactsBuilder { inner }
    }

    pub fn contacts(&self) -> &Vec<Contact> {
        &self.contacts
    }
}

#[doc(hidden)]
pub struct ChangeImportedContactsBuilder {
    inner: ChangeImportedContacts,
}

#[deprecated]
pub type RTDChangeImportedContactsBuilder = ChangeImportedContactsBuilder;

impl ChangeImportedContactsBuilder {
    pub fn build(&self) -> ChangeImportedContacts {
        self.inner.clone()
    }

    pub fn contacts(&mut self, contacts: Vec<Contact>) -> &mut Self {
        self.inner.contacts = contacts;
        self
    }
}

impl AsRef<ChangeImportedContacts> for ChangeImportedContacts {
    fn as_ref(&self) -> &ChangeImportedContacts {
        self
    }
}

impl AsRef<ChangeImportedContacts> for ChangeImportedContactsBuilder {
    fn as_ref(&self) -> &ChangeImportedContacts {
        &self.inner
    }
}