1use crate::serde_helpers::double_option;
4
5use super::*;
6
7#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
8pub struct SignTemplate {
9 #[serde(default, skip_serializing_if = "Option::is_none")]
10 pub r#type: Option<SignTemplateType>,
11 #[serde(default, skip_serializing_if = "Option::is_none")]
12 pub id: Option<String>,
13 #[serde(
14 default,
15 skip_serializing_if = "Option::is_none",
16 deserialize_with = "double_option"
17 )]
18 pub name: Option<Option<String>>,
19 #[serde(
20 default,
21 skip_serializing_if = "Option::is_none",
22 deserialize_with = "double_option"
23 )]
24 pub email_subject: Option<Option<String>>,
25 #[serde(
26 default,
27 skip_serializing_if = "Option::is_none",
28 deserialize_with = "double_option"
29 )]
30 pub email_message: Option<Option<String>>,
31 #[serde(
32 default,
33 skip_serializing_if = "Option::is_none",
34 deserialize_with = "double_option"
35 )]
36 pub days_valid: Option<Option<i64>>,
37 #[serde(default, skip_serializing_if = "Option::is_none")]
38 pub parent_folder: Option<FolderMini>,
39 #[serde(default, skip_serializing_if = "Option::is_none")]
40 pub source_files: Option<Vec<FileMini>>,
41 #[serde(default, skip_serializing_if = "Option::is_none")]
42 pub are_fields_locked: Option<bool>,
43 #[serde(default, skip_serializing_if = "Option::is_none")]
44 pub are_options_locked: Option<bool>,
45 #[serde(default, skip_serializing_if = "Option::is_none")]
46 pub are_recipients_locked: Option<bool>,
47 #[serde(default, skip_serializing_if = "Option::is_none")]
48 pub are_email_settings_locked: Option<bool>,
49 #[serde(default, skip_serializing_if = "Option::is_none")]
50 pub are_files_locked: Option<bool>,
51 #[serde(default, skip_serializing_if = "Option::is_none")]
52 pub signers: Option<Vec<TemplateSigner>>,
53 #[serde(default, skip_serializing_if = "Option::is_none")]
54 pub additional_info: Option<SignTemplateAdditionalInfo>,
55 #[serde(
56 default,
57 skip_serializing_if = "Option::is_none",
58 deserialize_with = "double_option"
59 )]
60 pub ready_sign_link: Option<Option<SignTemplateReadySignLink>>,
61 #[serde(
62 default,
63 skip_serializing_if = "Option::is_none",
64 deserialize_with = "double_option"
65 )]
66 pub custom_branding: Option<Option<SignTemplateCustomBranding>>,
67 #[serde(
68 default,
69 skip_serializing_if = "Option::is_none",
70 deserialize_with = "double_option"
71 )]
72 pub request_flow: Option<Option<String>>,
73}
74
75#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
76pub struct SignTemplates {
77 #[serde(default, skip_serializing_if = "Option::is_none")]
78 pub limit: Option<i64>,
79 #[serde(
80 default,
81 skip_serializing_if = "Option::is_none",
82 deserialize_with = "double_option"
83 )]
84 pub next_marker: Option<Option<String>>,
85 #[serde(
86 default,
87 skip_serializing_if = "Option::is_none",
88 deserialize_with = "double_option"
89 )]
90 pub prev_marker: Option<Option<String>>,
91 #[serde(default, skip_serializing_if = "Option::is_none")]
92 pub entries: Option<Vec<SignTemplate>>,
93}
94
95#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
96pub struct TemplateSigner {
97 #[serde(default, skip_serializing_if = "Option::is_none")]
98 pub inputs: Option<Vec<TemplateSignerInput>>,
99 #[serde(
100 default,
101 skip_serializing_if = "Option::is_none",
102 deserialize_with = "double_option"
103 )]
104 pub email: Option<Option<String>>,
105 #[serde(default, skip_serializing_if = "Option::is_none")]
106 pub role: Option<SignRequestCreateSignerRole>,
107 #[serde(default, skip_serializing_if = "Option::is_none")]
108 pub is_in_person: Option<bool>,
109 #[serde(default, skip_serializing_if = "Option::is_none")]
110 pub order: Option<i64>,
111 #[serde(
112 default,
113 skip_serializing_if = "Option::is_none",
114 deserialize_with = "double_option"
115 )]
116 pub signer_group_id: Option<Option<String>>,
117 #[serde(
118 default,
119 skip_serializing_if = "Option::is_none",
120 deserialize_with = "double_option"
121 )]
122 pub label: Option<Option<String>>,
123 #[serde(default, skip_serializing_if = "Option::is_none")]
124 pub public_id: Option<String>,
125 #[serde(
126 default,
127 skip_serializing_if = "Option::is_none",
128 deserialize_with = "double_option"
129 )]
130 pub is_password_required: Option<Option<bool>>,
131 #[serde(
132 default,
133 skip_serializing_if = "Option::is_none",
134 deserialize_with = "double_option"
135 )]
136 pub is_phone_number_required: Option<Option<bool>>,
137 #[serde(
138 default,
139 skip_serializing_if = "Option::is_none",
140 deserialize_with = "double_option"
141 )]
142 pub login_required: Option<Option<bool>>,
143}
144
145#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
146pub struct TemplateSignerInput {
147 #[serde(
148 default,
149 skip_serializing_if = "Option::is_none",
150 deserialize_with = "double_option"
151 )]
152 pub document_tag_id: Option<Option<String>>,
153 #[serde(
154 default,
155 skip_serializing_if = "Option::is_none",
156 deserialize_with = "double_option"
157 )]
158 pub text_value: Option<Option<String>>,
159 #[serde(
160 default,
161 skip_serializing_if = "Option::is_none",
162 deserialize_with = "double_option"
163 )]
164 pub checkbox_value: Option<Option<bool>>,
165 #[serde(
166 default,
167 skip_serializing_if = "Option::is_none",
168 deserialize_with = "double_option"
169 )]
170 pub date_value: Option<Option<chrono::NaiveDate>>,
171 #[serde(default, skip_serializing_if = "Option::is_none")]
172 pub r#type: Option<TemplateSignerInputType>,
173 #[serde(default, skip_serializing_if = "Option::is_none")]
174 pub content_type: Option<SignRequestSignerInputContentType>,
175 #[serde(default, skip_serializing_if = "Option::is_none")]
176 pub is_required: Option<bool>,
177 pub page_index: i64,
178 #[serde(
179 default,
180 skip_serializing_if = "Option::is_none",
181 deserialize_with = "double_option"
182 )]
183 pub document_id: Option<Option<String>>,
184 #[serde(
185 default,
186 skip_serializing_if = "Option::is_none",
187 deserialize_with = "double_option"
188 )]
189 pub dropdown_choices: Option<Option<Vec<String>>>,
190 #[serde(
191 default,
192 skip_serializing_if = "Option::is_none",
193 deserialize_with = "double_option"
194 )]
195 pub group_id: Option<Option<String>>,
196 #[serde(default, skip_serializing_if = "Option::is_none")]
197 pub coordinates: Option<TemplateSignerInputCoordinates>,
198 #[serde(default, skip_serializing_if = "Option::is_none")]
199 pub dimensions: Option<TemplateSignerInputDimensions>,
200 #[serde(
201 default,
202 skip_serializing_if = "Option::is_none",
203 deserialize_with = "double_option"
204 )]
205 pub label: Option<Option<String>>,
206 #[serde(default, skip_serializing_if = "Option::is_none")]
207 pub read_only: Option<bool>,
208 #[serde(
209 default,
210 skip_serializing_if = "Option::is_none",
211 deserialize_with = "double_option"
212 )]
213 pub validation: Option<Option<SignRequestSignerInputValidation>>,
214}
215
216#[derive(Clone, Debug, Default, Eq, PartialEq, serde::Deserialize, serde::Serialize)]
217#[serde(transparent)]
218pub struct SignTemplateType(pub String);
219
220impl SignTemplateType {
221 pub const SIGN_TEMPLATE: &'static str = "sign-template";
222}
223
224#[derive(Clone, Debug, Default, Eq, PartialEq, serde::Deserialize, serde::Serialize)]
225#[serde(transparent)]
226pub struct AdditionalInfoNonEditable(pub String);
227
228impl AdditionalInfoNonEditable {
229 pub const EMAIL_SUBJECT: &'static str = "email_subject";
230 pub const EMAIL_MESSAGE: &'static str = "email_message";
231 pub const NAME: &'static str = "name";
232 pub const DAYS_VALID: &'static str = "days_valid";
233 pub const SIGNERS: &'static str = "signers";
234 pub const SOURCE_FILES: &'static str = "source_files";
235}
236
237#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
238pub struct AdditionalInfoRequired {
239 #[serde(default, skip_serializing_if = "Option::is_none")]
240 pub signers: Option<Vec<Vec<SignRequestSignerInputEmailValidationValidationType>>>,
241}
242
243#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
244pub struct SignTemplateAdditionalInfo {
245 #[serde(default, skip_serializing_if = "Option::is_none")]
246 pub non_editable: Option<Vec<AdditionalInfoNonEditable>>,
247 #[serde(default, skip_serializing_if = "Option::is_none")]
248 pub required: Option<AdditionalInfoRequired>,
249}
250
251#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
252pub struct SignTemplateReadySignLink {
253 #[serde(default, skip_serializing_if = "Option::is_none")]
254 pub url: Option<String>,
255 #[serde(
256 default,
257 skip_serializing_if = "Option::is_none",
258 deserialize_with = "double_option"
259 )]
260 pub name: Option<Option<String>>,
261 #[serde(
262 default,
263 skip_serializing_if = "Option::is_none",
264 deserialize_with = "double_option"
265 )]
266 pub instructions: Option<Option<String>>,
267 #[serde(
268 default,
269 skip_serializing_if = "Option::is_none",
270 deserialize_with = "double_option"
271 )]
272 pub folder_id: Option<Option<String>>,
273 #[serde(default, skip_serializing_if = "Option::is_none")]
274 pub is_notification_disabled: Option<bool>,
275 #[serde(default, skip_serializing_if = "Option::is_none")]
276 pub is_active: Option<bool>,
277}
278
279#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
280pub struct SignTemplateCustomBranding {
281 #[serde(
282 default,
283 skip_serializing_if = "Option::is_none",
284 deserialize_with = "double_option"
285 )]
286 pub company_name: Option<Option<String>>,
287 #[serde(
288 default,
289 skip_serializing_if = "Option::is_none",
290 deserialize_with = "double_option"
291 )]
292 pub logo_uri: Option<Option<String>>,
293 #[serde(
294 default,
295 skip_serializing_if = "Option::is_none",
296 deserialize_with = "double_option"
297 )]
298 pub branding_color: Option<Option<String>>,
299 #[serde(
300 default,
301 skip_serializing_if = "Option::is_none",
302 deserialize_with = "double_option"
303 )]
304 pub email_footer_text: Option<Option<String>>,
305}
306
307#[derive(Clone, Debug, Default, Eq, PartialEq, serde::Deserialize, serde::Serialize)]
308#[serde(transparent)]
309pub struct TemplateSignerInputType(pub String);
310
311impl TemplateSignerInputType {
312 pub const SIGNATURE: &'static str = "signature";
313 pub const DATE: &'static str = "date";
314 pub const TEXT: &'static str = "text";
315 pub const CHECKBOX: &'static str = "checkbox";
316 pub const ATTACHMENT: &'static str = "attachment";
317 pub const RADIO: &'static str = "radio";
318 pub const DROPDOWN: &'static str = "dropdown";
319}
320
321#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
322pub struct TemplateSignerInputCoordinates {
323 #[serde(default, skip_serializing_if = "Option::is_none")]
324 pub x: Option<f64>,
325 #[serde(default, skip_serializing_if = "Option::is_none")]
326 pub y: Option<f64>,
327}
328
329#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
330pub struct TemplateSignerInputDimensions {
331 #[serde(default, skip_serializing_if = "Option::is_none")]
332 pub width: Option<f64>,
333 #[serde(default, skip_serializing_if = "Option::is_none")]
334 pub height: Option<f64>,
335}