Skip to main content

proxmox_api/generated/cluster/backup/
id.rs

1pub mod included_volumes;
2#[derive(Debug, Clone)]
3pub struct IdClient<T> {
4    client: T,
5    path: String,
6}
7impl<T> IdClient<T>
8where
9    T: crate::client::Client,
10{
11    pub fn new(client: T, parent_path: &str, id: &str) -> Self {
12        Self {
13            client,
14            path: format!("{}/{}", parent_path, id),
15        }
16    }
17}
18impl<T> IdClient<T>
19where
20    T: crate::client::Client,
21{
22    #[doc = "Delete vzdump backup job definition."]
23    #[doc = ""]
24    #[doc = "Permission check: perm(\"/\", [\"Sys.Modify\"])"]
25    pub async fn delete(&self) -> Result<(), T::Error> {
26        let path = self.path.to_string();
27        self.client.delete(&path, &()).await
28    }
29}
30impl<T> IdClient<T>
31where
32    T: crate::client::Client,
33{
34    #[doc = "Read vzdump backup job definition."]
35    #[doc = ""]
36    #[doc = "Permission check: perm(\"/\", [\"Sys.Audit\"])"]
37    pub async fn get(&self) -> Result<GetOutput, T::Error> {
38        let path = self.path.to_string();
39        self.client.get(&path, &()).await
40    }
41}
42impl<T> IdClient<T>
43where
44    T: crate::client::Client,
45{
46    #[doc = "Update vzdump backup job definition."]
47    #[doc = ""]
48    #[doc = "Permission check: perm(\"/\", [\"Sys.Modify\"])"]
49    #[doc = "The 'tmpdir', 'dumpdir' and 'script' parameters are additionally restricted to the 'root@pam' user."]
50    pub async fn put(&self, params: PutParams) -> Result<(), T::Error> {
51        let path = self.path.to_string();
52        self.client.put(&path, &params).await
53    }
54}
55#[derive(Clone, Debug, :: serde :: Serialize, :: serde :: Deserialize, Default)]
56pub struct GetOutput {
57    #[serde(
58        flatten,
59        default,
60        skip_serializing_if = "::std::collections::HashMap::is_empty"
61    )]
62    pub additional_properties: ::std::collections::HashMap<String, ::serde_json::Value>,
63}
64#[derive(Clone, Debug, :: serde :: Serialize, :: serde :: Deserialize, Default)]
65pub struct PutParams {
66    #[serde(
67        serialize_with = "crate::types::serialize_bool_optional",
68        deserialize_with = "crate::types::deserialize_bool_optional"
69    )]
70    #[serde(skip_serializing_if = "Option::is_none", default)]
71    #[doc = "Backup all known guest systems on this host."]
72    #[doc = ""]
73    pub all: Option<bool>,
74    #[serde(
75        serialize_with = "crate::types::serialize_unsigned_int_optional",
76        deserialize_with = "crate::types::deserialize_unsigned_int_optional"
77    )]
78    #[serde(skip_serializing_if = "Option::is_none", default)]
79    #[doc = "Limit I/O bandwidth (in KiB/s)."]
80    #[doc = ""]
81    pub bwlimit: Option<u64>,
82    #[serde(skip_serializing_if = "Option::is_none", default)]
83    #[doc = "Description for the Job."]
84    #[doc = ""]
85    pub comment: Option<CommentStr>,
86    #[serde(skip_serializing_if = "Option::is_none", default)]
87    #[doc = "Compress dump file."]
88    #[doc = ""]
89    pub compress: Option<Compress>,
90    #[serde(skip_serializing_if = "Option::is_none", default)]
91    #[doc = "A list of settings you want to delete."]
92    #[doc = ""]
93    pub delete: Option<String>,
94    #[serde(skip_serializing_if = "Option::is_none", default)]
95    #[doc = "Day of week selection."]
96    #[doc = ""]
97    pub dow: Option<String>,
98    #[serde(skip_serializing_if = "Option::is_none", default)]
99    #[doc = "Store resulting files to specified directory."]
100    #[doc = ""]
101    pub dumpdir: Option<String>,
102    #[serde(
103        serialize_with = "crate::types::serialize_bool_optional",
104        deserialize_with = "crate::types::deserialize_bool_optional"
105    )]
106    #[serde(skip_serializing_if = "Option::is_none", default)]
107    #[doc = "Enable or disable the job."]
108    #[doc = ""]
109    pub enabled: Option<bool>,
110    #[serde(skip_serializing_if = "Option::is_none", default)]
111    #[doc = "Exclude specified guest systems (assumes --all)"]
112    #[doc = ""]
113    pub exclude: Option<String>,
114    #[serde(rename = "exclude-path")]
115    #[serde(skip_serializing_if = "::std::vec::Vec::is_empty", default)]
116    #[doc = "Exclude certain files/directories (shell globs). Paths starting with '/' are anchored to the container's root, other paths match relative to each subdirectory."]
117    #[doc = ""]
118    pub exclude_path: Vec<String>,
119    #[serde(skip_serializing_if = "Option::is_none", default)]
120    #[doc = "Options for backup fleecing (VM only)."]
121    #[doc = ""]
122    pub fleecing: Option<String>,
123    #[serde(skip_serializing_if = "Option::is_none", default)]
124    #[doc = "Set IO priority when using the BFQ scheduler. For snapshot and suspend mode backups of VMs, this only affects the compressor. A value of 8 means the idle priority is used, otherwise the best-effort priority is used with the specified value."]
125    #[doc = ""]
126    pub ionice: Option<IoniceInt>,
127    #[serde(skip_serializing_if = "Option::is_none", default)]
128    #[doc = "Maximal time to wait for the global lock (minutes)."]
129    #[doc = ""]
130    pub lockwait: Option<LockwaitInt>,
131    #[serde(skip_serializing_if = "Option::is_none", default)]
132    #[doc = "Deprecated: use notification targets/matchers instead. Specify when to send a notification mail"]
133    #[doc = ""]
134    pub mailnotification: Option<Mailnotification>,
135    #[serde(skip_serializing_if = "Option::is_none", default)]
136    #[doc = "Deprecated: Use notification targets/matchers instead. Comma-separated list of email addresses or users that should receive email notifications."]
137    #[doc = ""]
138    pub mailto: Option<String>,
139    #[serde(
140        serialize_with = "crate::types::serialize_non_zero_pos_int_optional",
141        deserialize_with = "crate::types::deserialize_non_zero_pos_int_optional"
142    )]
143    #[serde(skip_serializing_if = "Option::is_none", default)]
144    #[doc = "Deprecated: use 'prune-backups' instead. Maximal number of backup files per guest system."]
145    #[doc = ""]
146    pub maxfiles: Option<std::num::NonZeroU64>,
147    #[serde(skip_serializing_if = "Option::is_none", default)]
148    #[doc = "Backup mode."]
149    #[doc = ""]
150    pub mode: Option<Mode>,
151    #[serde(skip_serializing_if = "Option::is_none", default)]
152    #[doc = "Only run if executed on this node."]
153    #[doc = ""]
154    pub node: Option<String>,
155    #[serde(rename = "notes-template")]
156    #[serde(skip_serializing_if = "Option::is_none", default)]
157    #[doc = "Template string for generating notes for the backup(s). It can contain variables which will be replaced by their values. Currently supported are {{cluster}}, {{guestname}}, {{node}}, and {{vmid}}, but more might be added in the future. Needs to be a single line, newline and backslash need to be escaped as '\\n' and '\\\\' respectively."]
158    #[doc = ""]
159    pub notes_template: Option<NotesTemplateStr>,
160    #[serde(rename = "notification-mode")]
161    #[serde(skip_serializing_if = "Option::is_none", default)]
162    #[doc = "Determine which notification system to use. If set to 'legacy-sendmail', vzdump will consider the mailto/mailnotification parameters and send emails to the specified address(es) via the 'sendmail' command. If set to 'notification-system', a notification will be sent via PVE's notification system, and the mailto and mailnotification will be ignored. If set to 'auto' (default setting), an email will be sent if mailto is set, and the notification system will be used if not."]
163    #[doc = ""]
164    pub notification_mode: Option<NotificationMode>,
165    #[serde(rename = "pbs-change-detection-mode")]
166    #[serde(skip_serializing_if = "Option::is_none", default)]
167    #[doc = "PBS mode used to detect file changes and switch encoding format for container backups."]
168    #[doc = ""]
169    pub pbs_change_detection_mode: Option<PbsChangeDetectionMode>,
170    #[serde(skip_serializing_if = "Option::is_none", default)]
171    #[doc = "Other performance-related settings."]
172    #[doc = ""]
173    pub performance: Option<String>,
174    #[serde(
175        serialize_with = "crate::types::serialize_int_optional",
176        deserialize_with = "crate::types::deserialize_int_optional"
177    )]
178    #[serde(skip_serializing_if = "Option::is_none", default)]
179    #[doc = "Use pigz instead of gzip when N\\\\>0. N=1 uses half of cores, N\\\\>1 uses N as thread count."]
180    #[doc = ""]
181    pub pigz: Option<i64>,
182    #[serde(skip_serializing_if = "Option::is_none", default)]
183    #[doc = "Backup all known guest systems included in the specified pool."]
184    #[doc = ""]
185    pub pool: Option<String>,
186    #[serde(
187        serialize_with = "crate::types::serialize_bool_optional",
188        deserialize_with = "crate::types::deserialize_bool_optional"
189    )]
190    #[serde(skip_serializing_if = "Option::is_none", default)]
191    #[doc = "If true, mark backup(s) as protected."]
192    #[doc = ""]
193    pub protected: Option<bool>,
194    #[serde(rename = "prune-backups")]
195    #[serde(skip_serializing_if = "Option::is_none", default)]
196    #[doc = "Use these retention options instead of those from the storage configuration."]
197    #[doc = ""]
198    pub prune_backups: Option<String>,
199    #[serde(
200        serialize_with = "crate::types::serialize_bool_optional",
201        deserialize_with = "crate::types::deserialize_bool_optional"
202    )]
203    #[serde(skip_serializing_if = "Option::is_none", default)]
204    #[doc = "Be quiet."]
205    #[doc = ""]
206    pub quiet: Option<bool>,
207    #[serde(
208        serialize_with = "crate::types::serialize_bool_optional",
209        deserialize_with = "crate::types::deserialize_bool_optional"
210    )]
211    #[serde(skip_serializing_if = "Option::is_none", default)]
212    #[doc = "Prune older backups according to 'prune-backups'."]
213    #[doc = ""]
214    pub remove: Option<bool>,
215    #[serde(rename = "repeat-missed")]
216    #[serde(
217        serialize_with = "crate::types::serialize_bool_optional",
218        deserialize_with = "crate::types::deserialize_bool_optional"
219    )]
220    #[serde(skip_serializing_if = "Option::is_none", default)]
221    #[doc = "If true, the job will be run as soon as possible if it was missed while the scheduler was not running."]
222    #[doc = ""]
223    pub repeat_missed: Option<bool>,
224    #[serde(skip_serializing_if = "Option::is_none", default)]
225    #[doc = "Backup schedule. The format is a subset of `systemd` calendar events."]
226    #[doc = ""]
227    pub schedule: Option<ScheduleStr>,
228    #[serde(skip_serializing_if = "Option::is_none", default)]
229    #[doc = "Use specified hook script."]
230    #[doc = ""]
231    pub script: Option<String>,
232    #[serde(skip_serializing_if = "Option::is_none", default)]
233    #[doc = "Job Start time."]
234    #[doc = ""]
235    pub starttime: Option<StarttimeStr>,
236    #[serde(
237        serialize_with = "crate::types::serialize_bool_optional",
238        deserialize_with = "crate::types::deserialize_bool_optional"
239    )]
240    #[serde(skip_serializing_if = "Option::is_none", default)]
241    #[doc = "Exclude temporary files and logs."]
242    #[doc = ""]
243    pub stdexcludes: Option<bool>,
244    #[serde(
245        serialize_with = "crate::types::serialize_bool_optional",
246        deserialize_with = "crate::types::deserialize_bool_optional"
247    )]
248    #[serde(skip_serializing_if = "Option::is_none", default)]
249    #[doc = "Stop running backup jobs on this host."]
250    #[doc = ""]
251    pub stop: Option<bool>,
252    #[serde(skip_serializing_if = "Option::is_none", default)]
253    #[doc = "Maximal time to wait until a guest system is stopped (minutes)."]
254    #[doc = ""]
255    pub stopwait: Option<StopwaitInt>,
256    #[serde(skip_serializing_if = "Option::is_none", default)]
257    #[doc = "Store resulting file to this storage."]
258    #[doc = ""]
259    pub storage: Option<String>,
260    #[serde(skip_serializing_if = "Option::is_none", default)]
261    #[doc = "Store temporary files to specified directory."]
262    #[doc = ""]
263    pub tmpdir: Option<String>,
264    #[serde(skip_serializing_if = "Option::is_none", default)]
265    #[doc = "The ID of the guest system you want to backup."]
266    #[doc = ""]
267    pub vmid: Option<String>,
268    #[serde(skip_serializing_if = "Option::is_none", default)]
269    #[doc = "Zstd threads. N=0 uses half of the available cores, if N is set to a value bigger than 0, N is used as thread count."]
270    #[doc = ""]
271    pub zstd: Option<ZstdInt>,
272    #[serde(
273        flatten,
274        default,
275        skip_serializing_if = "::std::collections::HashMap::is_empty"
276    )]
277    pub additional_properties: ::std::collections::HashMap<String, ::serde_json::Value>,
278}
279#[derive(Clone, Debug, :: serde :: Serialize, :: serde :: Deserialize, PartialEq, Default)]
280#[doc = "Compress dump file."]
281#[doc = ""]
282pub enum Compress {
283    #[serde(rename = "0")]
284    #[default]
285    _0,
286    #[serde(rename = "1")]
287    _1,
288    #[serde(rename = "gzip")]
289    Gzip,
290    #[serde(rename = "lzo")]
291    Lzo,
292    #[serde(rename = "zstd")]
293    Zstd,
294}
295impl TryFrom<&str> for Compress {
296    type Error = String;
297    fn try_from(value: &str) -> Result<Self, <Self as TryFrom<&str>>::Error> {
298        match value {
299            "0" => Ok(Self::_0),
300            "1" => Ok(Self::_1),
301            "gzip" => Ok(Self::Gzip),
302            "lzo" => Ok(Self::Lzo),
303            "zstd" => Ok(Self::Zstd),
304            v => Err(format!("Unknown variant {v}")),
305        }
306    }
307}
308#[derive(Clone, Debug, :: serde :: Serialize, :: serde :: Deserialize, PartialEq, Default)]
309#[doc = "Deprecated: use notification targets/matchers instead. Specify when to send a notification mail"]
310#[doc = ""]
311pub enum Mailnotification {
312    #[serde(rename = "always")]
313    #[default]
314    Always,
315    #[serde(rename = "failure")]
316    Failure,
317}
318impl TryFrom<&str> for Mailnotification {
319    type Error = String;
320    fn try_from(value: &str) -> Result<Self, <Self as TryFrom<&str>>::Error> {
321        match value {
322            "always" => Ok(Self::Always),
323            "failure" => Ok(Self::Failure),
324            v => Err(format!("Unknown variant {v}")),
325        }
326    }
327}
328#[derive(Clone, Debug, :: serde :: Serialize, :: serde :: Deserialize, PartialEq, Default)]
329#[doc = "Backup mode."]
330#[doc = ""]
331pub enum Mode {
332    #[serde(rename = "snapshot")]
333    #[default]
334    Snapshot,
335    #[serde(rename = "stop")]
336    Stop,
337    #[serde(rename = "suspend")]
338    Suspend,
339}
340impl TryFrom<&str> for Mode {
341    type Error = String;
342    fn try_from(value: &str) -> Result<Self, <Self as TryFrom<&str>>::Error> {
343        match value {
344            "snapshot" => Ok(Self::Snapshot),
345            "stop" => Ok(Self::Stop),
346            "suspend" => Ok(Self::Suspend),
347            v => Err(format!("Unknown variant {v}")),
348        }
349    }
350}
351#[derive(Clone, Debug, :: serde :: Serialize, :: serde :: Deserialize, PartialEq, Default)]
352#[doc = "Determine which notification system to use. If set to 'legacy-sendmail', vzdump will consider the mailto/mailnotification parameters and send emails to the specified address(es) via the 'sendmail' command. If set to 'notification-system', a notification will be sent via PVE's notification system, and the mailto and mailnotification will be ignored. If set to 'auto' (default setting), an email will be sent if mailto is set, and the notification system will be used if not."]
353#[doc = ""]
354pub enum NotificationMode {
355    #[serde(rename = "auto")]
356    #[default]
357    Auto,
358    #[serde(rename = "legacy-sendmail")]
359    LegacySendmail,
360    #[serde(rename = "notification-system")]
361    NotificationSystem,
362}
363impl TryFrom<&str> for NotificationMode {
364    type Error = String;
365    fn try_from(value: &str) -> Result<Self, <Self as TryFrom<&str>>::Error> {
366        match value {
367            "auto" => Ok(Self::Auto),
368            "legacy-sendmail" => Ok(Self::LegacySendmail),
369            "notification-system" => Ok(Self::NotificationSystem),
370            v => Err(format!("Unknown variant {v}")),
371        }
372    }
373}
374#[derive(Clone, Debug, :: serde :: Serialize, :: serde :: Deserialize, PartialEq)]
375#[doc = "PBS mode used to detect file changes and switch encoding format for container backups."]
376#[doc = ""]
377pub enum PbsChangeDetectionMode {
378    #[serde(rename = "data")]
379    Data,
380    #[serde(rename = "legacy")]
381    Legacy,
382    #[serde(rename = "metadata")]
383    Metadata,
384}
385impl TryFrom<&str> for PbsChangeDetectionMode {
386    type Error = String;
387    fn try_from(value: &str) -> Result<Self, <Self as TryFrom<&str>>::Error> {
388        match value {
389            "data" => Ok(Self::Data),
390            "legacy" => Ok(Self::Legacy),
391            "metadata" => Ok(Self::Metadata),
392            v => Err(format!("Unknown variant {v}")),
393        }
394    }
395}
396#[derive(Debug, Clone, Copy, PartialEq, PartialOrd)]
397pub struct IoniceInt(i128);
398impl crate::types::bounded_integer::BoundedInteger for IoniceInt {
399    const MIN: Option<i128> = Some(0i128);
400    const MAX: Option<i128> = Some(8i128);
401    const DEFAULT: Option<i128> = Some(7i128);
402    const TYPE_DESCRIPTION: &'static str = "an integer between 0 and 8";
403    fn get(&self) -> i128 {
404        self.0
405    }
406    fn new(value: i128) -> Result<Self, crate::types::bounded_integer::BoundedIntegerError> {
407        Self::validate(value)?;
408        Ok(Self(value))
409    }
410}
411impl std::convert::TryFrom<i128> for IoniceInt {
412    type Error = crate::types::bounded_integer::BoundedIntegerError;
413    fn try_from(value: i128) -> Result<Self, Self::Error> {
414        crate::types::bounded_integer::BoundedInteger::new(value)
415    }
416}
417impl ::serde::Serialize for IoniceInt {
418    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
419    where
420        S: ::serde::Serializer,
421    {
422        crate::types::bounded_integer::serialize_bounded_integer(self, serializer)
423    }
424}
425impl<'de> ::serde::Deserialize<'de> for IoniceInt {
426    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
427    where
428        D: ::serde::Deserializer<'de>,
429    {
430        crate::types::bounded_integer::deserialize_bounded_integer(deserializer)
431    }
432}
433#[derive(Debug, Clone, Copy, PartialEq, PartialOrd)]
434pub struct LockwaitInt(i128);
435impl crate::types::bounded_integer::BoundedInteger for LockwaitInt {
436    const MIN: Option<i128> = Some(0i128);
437    const MAX: Option<i128> = None::<i128>;
438    const DEFAULT: Option<i128> = Some(180i128);
439    const TYPE_DESCRIPTION: &'static str = "an integer greater than or equal to 0";
440    fn get(&self) -> i128 {
441        self.0
442    }
443    fn new(value: i128) -> Result<Self, crate::types::bounded_integer::BoundedIntegerError> {
444        Self::validate(value)?;
445        Ok(Self(value))
446    }
447}
448impl std::convert::TryFrom<i128> for LockwaitInt {
449    type Error = crate::types::bounded_integer::BoundedIntegerError;
450    fn try_from(value: i128) -> Result<Self, Self::Error> {
451        crate::types::bounded_integer::BoundedInteger::new(value)
452    }
453}
454impl ::serde::Serialize for LockwaitInt {
455    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
456    where
457        S: ::serde::Serializer,
458    {
459        crate::types::bounded_integer::serialize_bounded_integer(self, serializer)
460    }
461}
462impl<'de> ::serde::Deserialize<'de> for LockwaitInt {
463    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
464    where
465        D: ::serde::Deserializer<'de>,
466    {
467        crate::types::bounded_integer::deserialize_bounded_integer(deserializer)
468    }
469}
470#[derive(Debug, Clone, Copy, PartialEq, PartialOrd)]
471pub struct StopwaitInt(i128);
472impl crate::types::bounded_integer::BoundedInteger for StopwaitInt {
473    const MIN: Option<i128> = Some(0i128);
474    const MAX: Option<i128> = None::<i128>;
475    const DEFAULT: Option<i128> = Some(10i128);
476    const TYPE_DESCRIPTION: &'static str = "an integer greater than or equal to 0";
477    fn get(&self) -> i128 {
478        self.0
479    }
480    fn new(value: i128) -> Result<Self, crate::types::bounded_integer::BoundedIntegerError> {
481        Self::validate(value)?;
482        Ok(Self(value))
483    }
484}
485impl std::convert::TryFrom<i128> for StopwaitInt {
486    type Error = crate::types::bounded_integer::BoundedIntegerError;
487    fn try_from(value: i128) -> Result<Self, Self::Error> {
488        crate::types::bounded_integer::BoundedInteger::new(value)
489    }
490}
491impl ::serde::Serialize for StopwaitInt {
492    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
493    where
494        S: ::serde::Serializer,
495    {
496        crate::types::bounded_integer::serialize_bounded_integer(self, serializer)
497    }
498}
499impl<'de> ::serde::Deserialize<'de> for StopwaitInt {
500    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
501    where
502        D: ::serde::Deserializer<'de>,
503    {
504        crate::types::bounded_integer::deserialize_bounded_integer(deserializer)
505    }
506}
507#[derive(Debug, Clone, Copy, PartialEq, PartialOrd)]
508pub struct ZstdInt(i128);
509impl crate::types::bounded_integer::BoundedInteger for ZstdInt {
510    const MIN: Option<i128> = None::<i128>;
511    const MAX: Option<i128> = None::<i128>;
512    const DEFAULT: Option<i128> = Some(1i128);
513    const TYPE_DESCRIPTION: &'static str = "a valid integer";
514    fn get(&self) -> i128 {
515        self.0
516    }
517    fn new(value: i128) -> Result<Self, crate::types::bounded_integer::BoundedIntegerError> {
518        Self::validate(value)?;
519        Ok(Self(value))
520    }
521}
522impl std::convert::TryFrom<i128> for ZstdInt {
523    type Error = crate::types::bounded_integer::BoundedIntegerError;
524    fn try_from(value: i128) -> Result<Self, Self::Error> {
525        crate::types::bounded_integer::BoundedInteger::new(value)
526    }
527}
528impl ::serde::Serialize for ZstdInt {
529    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
530    where
531        S: ::serde::Serializer,
532    {
533        crate::types::bounded_integer::serialize_bounded_integer(self, serializer)
534    }
535}
536impl<'de> ::serde::Deserialize<'de> for ZstdInt {
537    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
538    where
539        D: ::serde::Deserializer<'de>,
540    {
541        crate::types::bounded_integer::deserialize_bounded_integer(deserializer)
542    }
543}
544#[derive(Debug, Clone, PartialEq, PartialOrd)]
545pub struct CommentStr {
546    value: String,
547}
548impl crate::types::bounded_string::BoundedString for CommentStr {
549    const MIN_LENGTH: Option<usize> = None::<usize>;
550    const MAX_LENGTH: Option<usize> = Some(512usize);
551    const DEFAULT: Option<&'static str> = None::<&'static str>;
552    const PATTERN: Option<&'static str> = None::<&'static str>;
553    const TYPE_DESCRIPTION: &'static str = "a string with length at most 512";
554    fn get_value(&self) -> &str {
555        &self.value
556    }
557    fn new(value: String) -> Result<Self, crate::types::bounded_string::BoundedStringError> {
558        Self::validate(&value)?;
559        Ok(Self { value })
560    }
561}
562impl std::convert::TryFrom<String> for CommentStr {
563    type Error = crate::types::bounded_string::BoundedStringError;
564    fn try_from(value: String) -> Result<Self, Self::Error> {
565        crate::types::bounded_string::BoundedString::new(value)
566    }
567}
568impl ::serde::Serialize for CommentStr {
569    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
570    where
571        S: ::serde::Serializer,
572    {
573        crate::types::bounded_string::serialize_bounded_string(self, serializer)
574    }
575}
576impl<'de> ::serde::Deserialize<'de> for CommentStr {
577    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
578    where
579        D: ::serde::Deserializer<'de>,
580    {
581        crate::types::bounded_string::deserialize_bounded_string(deserializer)
582    }
583}
584#[derive(Debug, Clone, PartialEq, PartialOrd)]
585pub struct NotesTemplateStr {
586    value: String,
587}
588impl crate::types::bounded_string::BoundedString for NotesTemplateStr {
589    const MIN_LENGTH: Option<usize> = None::<usize>;
590    const MAX_LENGTH: Option<usize> = Some(1024usize);
591    const DEFAULT: Option<&'static str> = None::<&'static str>;
592    const PATTERN: Option<&'static str> = None::<&'static str>;
593    const TYPE_DESCRIPTION: &'static str = "a string with length at most 1024";
594    fn get_value(&self) -> &str {
595        &self.value
596    }
597    fn new(value: String) -> Result<Self, crate::types::bounded_string::BoundedStringError> {
598        Self::validate(&value)?;
599        Ok(Self { value })
600    }
601}
602impl std::convert::TryFrom<String> for NotesTemplateStr {
603    type Error = crate::types::bounded_string::BoundedStringError;
604    fn try_from(value: String) -> Result<Self, Self::Error> {
605        crate::types::bounded_string::BoundedString::new(value)
606    }
607}
608impl ::serde::Serialize for NotesTemplateStr {
609    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
610    where
611        S: ::serde::Serializer,
612    {
613        crate::types::bounded_string::serialize_bounded_string(self, serializer)
614    }
615}
616impl<'de> ::serde::Deserialize<'de> for NotesTemplateStr {
617    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
618    where
619        D: ::serde::Deserializer<'de>,
620    {
621        crate::types::bounded_string::deserialize_bounded_string(deserializer)
622    }
623}
624#[derive(Debug, Clone, PartialEq, PartialOrd)]
625pub struct ScheduleStr {
626    value: String,
627}
628impl crate::types::bounded_string::BoundedString for ScheduleStr {
629    const MIN_LENGTH: Option<usize> = None::<usize>;
630    const MAX_LENGTH: Option<usize> = Some(128usize);
631    const DEFAULT: Option<&'static str> = None::<&'static str>;
632    const PATTERN: Option<&'static str> = None::<&'static str>;
633    const TYPE_DESCRIPTION: &'static str = "a string with length at most 128";
634    fn get_value(&self) -> &str {
635        &self.value
636    }
637    fn new(value: String) -> Result<Self, crate::types::bounded_string::BoundedStringError> {
638        Self::validate(&value)?;
639        Ok(Self { value })
640    }
641}
642impl std::convert::TryFrom<String> for ScheduleStr {
643    type Error = crate::types::bounded_string::BoundedStringError;
644    fn try_from(value: String) -> Result<Self, Self::Error> {
645        crate::types::bounded_string::BoundedString::new(value)
646    }
647}
648impl ::serde::Serialize for ScheduleStr {
649    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
650    where
651        S: ::serde::Serializer,
652    {
653        crate::types::bounded_string::serialize_bounded_string(self, serializer)
654    }
655}
656impl<'de> ::serde::Deserialize<'de> for ScheduleStr {
657    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
658    where
659        D: ::serde::Deserializer<'de>,
660    {
661        crate::types::bounded_string::deserialize_bounded_string(deserializer)
662    }
663}
664#[derive(Debug, Clone, PartialEq, PartialOrd)]
665pub struct StarttimeStr {
666    value: String,
667}
668impl crate::types::bounded_string::BoundedString for StarttimeStr {
669    const MIN_LENGTH: Option<usize> = None::<usize>;
670    const MAX_LENGTH: Option<usize> = None::<usize>;
671    const DEFAULT: Option<&'static str> = None::<&'static str>;
672    const PATTERN: Option<&'static str> = Some("\\d{1,2}:\\d{1,2}");
673    const TYPE_DESCRIPTION: &'static str =
674        "a string with pattern r\"\\d{1,2}:\\d{1,2}\" and no length constraints";
675    fn get_value(&self) -> &str {
676        &self.value
677    }
678    fn new(value: String) -> Result<Self, crate::types::bounded_string::BoundedStringError> {
679        Self::validate(&value)?;
680        Ok(Self { value })
681    }
682}
683impl std::convert::TryFrom<String> for StarttimeStr {
684    type Error = crate::types::bounded_string::BoundedStringError;
685    fn try_from(value: String) -> Result<Self, Self::Error> {
686        crate::types::bounded_string::BoundedString::new(value)
687    }
688}
689impl ::serde::Serialize for StarttimeStr {
690    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
691    where
692        S: ::serde::Serializer,
693    {
694        crate::types::bounded_string::serialize_bounded_string(self, serializer)
695    }
696}
697impl<'de> ::serde::Deserialize<'de> for StarttimeStr {
698    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
699    where
700        D: ::serde::Deserializer<'de>,
701    {
702        crate::types::bounded_string::deserialize_bounded_string(deserializer)
703    }
704}
705impl<T> IdClient<T>
706where
707    T: crate::client::Client,
708{
709    pub fn included_volumes(&self) -> included_volumes::IncludedVolumesClient<T> {
710        included_volumes::IncludedVolumesClient::<T>::new(self.client.clone(), &self.path)
711    }
712}