things3_cloud/wire/
checklist.rs1use crate::ids::ThingsId;
2use crate::wire::task::TaskStatus;
3use crate::wire::{deserialize_default_on_null, deserialize_vec_or_single};
4use serde::{Deserialize, Serialize};
5use serde_json::Value;
6use std::collections::BTreeMap;
7
8fn is_false(v: &bool) -> bool {
9 !*v
10}
11
12#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
14pub struct ChecklistItemProps {
15 #[serde(rename = "tt", default)]
17 pub title: String,
18
19 #[serde(rename = "ss", default)]
21 pub status: TaskStatus,
22
23 #[serde(rename = "sp", default, skip_serializing_if = "Option::is_none")]
25 pub stop_date: Option<f64>,
26
27 #[serde(rename = "ts", default, deserialize_with = "deserialize_vec_or_single")]
29 pub task_ids: Vec<ThingsId>,
30
31 #[serde(rename = "ix", default)]
33 pub sort_index: i32,
34
35 #[serde(rename = "cd", default, skip_serializing_if = "Option::is_none")]
37 pub creation_date: Option<f64>,
38
39 #[serde(rename = "md", default, skip_serializing_if = "Option::is_none")]
41 pub modification_date: Option<f64>,
42
43 #[serde(
45 rename = "lt",
46 default,
47 deserialize_with = "deserialize_default_on_null",
48 skip_serializing_if = "is_false"
49 )]
50 pub leaves_tombstone: bool,
51
52 #[serde(rename = "xx", default, skip_serializing_if = "Option::is_none")]
54 pub conflict_overrides: Option<Value>,
55}
56
57#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
59pub struct ChecklistItemPatch {
60 #[serde(rename = "tt", skip_serializing_if = "Option::is_none")]
62 pub title: Option<String>,
63
64 #[serde(rename = "ss", skip_serializing_if = "Option::is_none")]
66 pub status: Option<TaskStatus>,
67
68 #[serde(rename = "ts", skip_serializing_if = "Option::is_none")]
70 pub task_ids: Option<Vec<ThingsId>>,
71
72 #[serde(rename = "ix", skip_serializing_if = "Option::is_none")]
74 pub sort_index: Option<i32>,
75
76 #[serde(rename = "cd", skip_serializing_if = "Option::is_none")]
78 pub creation_date: Option<f64>,
79
80 #[serde(rename = "md", skip_serializing_if = "Option::is_none")]
82 pub modification_date: Option<f64>,
83}
84
85impl ChecklistItemPatch {
86 pub fn is_empty(&self) -> bool {
87 self.title.is_none()
88 && self.status.is_none()
89 && self.task_ids.is_none()
90 && self.sort_index.is_none()
91 && self.creation_date.is_none()
92 && self.modification_date.is_none()
93 }
94
95 pub fn into_properties(self) -> BTreeMap<String, Value> {
96 match serde_json::to_value(self) {
97 Ok(Value::Object(map)) => map.into_iter().collect(),
98 _ => BTreeMap::new(),
99 }
100 }
101}