1use serde::{Deserialize, Serialize};
2use std::collections::HashMap;
3use uuid::Uuid;
4
5use crate::model::{command::Command, item::Item, project::Project, section::Section, user::User};
6
7pub mod client;
8
9#[derive(Debug, Serialize, Deserialize, Default)]
10pub struct Response {
11 pub sync_token: String,
12
13 #[serde(default)]
14 pub projects: Vec<Project>,
15
16 #[serde(default)]
17 pub items: Vec<Item>,
18
19 #[serde(default)]
20 pub sections: Vec<Section>,
21
22 pub user: Option<User>,
23
24 pub full_sync: bool,
25
26 pub sync_status: Option<HashMap<Uuid, Status>>,
27
28 pub temp_id_mapping: HashMap<String, String>,
29}
30
31#[derive(Debug, Serialize, Deserialize)]
32pub struct Request {
33 pub commands: Vec<Command>,
34 pub resource_types: Vec<ResourceType>,
35 pub sync_token: String,
36}
37
38#[derive(Debug, Serialize, Deserialize, PartialEq)]
39pub enum Status {
40 #[serde(rename = "ok")]
41 Ok,
42 #[serde(untagged)]
43 Error(StatusError),
44}
45
46#[derive(Debug, Serialize, Deserialize, PartialEq)]
47pub struct StatusError {
48 #[serde(rename = "error_code")]
49 pub code: u32,
50 #[serde(rename = "error")]
51 pub message: String,
52}
53
54#[derive(Debug, Serialize, Deserialize, PartialEq)]
55pub enum ResourceType {
56 #[serde(rename = "items")]
57 Items,
58 #[serde(rename = "projects")]
59 Projects,
60 #[serde(rename = "sections")]
61 Sections,
62 #[serde(rename = "user")]
63 User,
64}
65
66impl ResourceType {
67 #[must_use]
69 pub fn all() -> Vec<Self> {
70 vec![Self::Items, Self::Projects, Self::Sections, Self::User]
71 }
72}