1pub mod personal {
2 use serde::Serialize;
3
4 use crate::enums::Color;
5 use crate::{models, EmptyQuery};
6 use crate::error::Error;
7
8 crate::endpoint_group!();
9
10 impl Client<'_> {
11 pub async fn list(&self) -> Result<Vec<models::Label>, Error> {
12 match self.api_client.get("/labels".to_string(), &EmptyQuery{}).await {
13 Err(err) => Err(Error::RequestError(err.to_string())),
14 Ok(None) => Ok(vec![]),
15 Ok(Some(text)) => match serde_json::from_str(&text) {
16 Ok(labels) => Ok(labels),
17 Err(err) => Err(Error::ParseError(err.to_string())),
18 },
19 }
20 }
21
22 pub async fn create(&self, request: CreateRequest) -> Result<Option<models::Label>, Error> {
23 match self.api_client.post("/labels".to_string(), request).await {
24 Err(err) => Err(Error::RequestError(err.to_string())),
25 Ok(None) => Ok(None),
26 Ok(Some(text)) => match serde_json::from_str(&text) {
27 Ok(label) => Ok(Some(label)),
28 Err(err) => Err(Error::ParseError(err.to_string())),
29 },
30 }
31 }
32
33 pub async fn get(&self, id: String) -> Result<Option<models::Label>, Error> {
34 match self.api_client.get(format!("/labels/{}", id), &EmptyQuery{}).await {
35 Err(err) => Err(Error::RequestError(err.to_string())),
36 Ok(None) => Ok(None),
37 Ok(Some(text)) => match serde_json::from_str(&text) {
38 Ok(label) => Ok(Some(label)),
39 Err(err) => Err(Error::ParseError(err.to_string()))
40 },
41 }
42 }
43
44 pub async fn delete(&self, id: String) -> Option<Error> {
45 match self.api_client.delete(format!("/labels/{}", id)).await {
46 Err(err) => Some(Error::RequestError(err.to_string())),
47 Ok(_) => None,
48 }
49 }
50
51 pub async fn update(&self, id: String, request: UpdateRequest) -> Result<Option<models::Label>, Error> {
52 match self.api_client.post(format!("/labels/{}", id), request).await {
53 Err(err) => Err(Error::RequestError(err.to_string())),
54 Ok(None) => Ok(None),
55 Ok(Some(text)) => match serde_json::from_str(&text) {
56 Ok(label) => Ok(Some(label)),
57 Err(_) => Err(Error::ParseError("unable to parse response".to_string()))
58 },
59 }
60 }
61 }
62
63 #[derive(Serialize)]
64 pub struct CreateRequest {
65 pub name: String,
66 pub order: i64,
67 pub color: Color,
68 pub is_favorite: bool,
69 }
70
71 #[derive(Serialize)]
72 pub struct UpdateRequest {
73 pub name: String,
74 pub order: i64,
75 pub color: Color,
76 pub is_favorite: bool,
77 }
78}
79
80pub mod shared {
81 use serde::Serialize;
82
83 use crate::{models, error::Error};
84
85 crate::endpoint_group!();
86
87 impl Client<'_> {
88 pub async fn list(&self, omit_personal: bool) -> Result<Vec<models::Label>, Error> {
89 match self.api_client.get("/labels".to_string(), &ListRequest{omit_personal}).await {
90 Err(err) => Err(Error::RequestError(err.to_string())),
91 Ok(None) => Ok(vec![]),
92 Ok(Some(text)) => match serde_json::from_str(&text) {
93 Ok(labels) => Ok(labels),
94 Err(err) => Err(Error::ParseError(err.to_string())),
95 },
96 }
97 }
98
99 pub async fn rename(&self, request: RenameRequest) -> Option<Error> {
100 match self.api_client.post("/labels/shared/rename".to_string(), request).await {
101 Err(err) => Some(Error::RequestError(err.to_string())),
102 Ok(_) => None,
103 }
104 }
105
106 pub async fn remove(&self, name: String) -> Option<Error> {
107 match self.api_client.post("/labels/shared/rename".to_string(), &RemoveRequest{name}).await {
108 Err(err) => Some(Error::RequestError(err.to_string())),
109 Ok(_) => None,
110 }
111 }
112 }
113
114 #[derive(Serialize)]
115 pub struct ListRequest {
116 pub omit_personal: bool,
117 }
118
119 #[derive(Serialize)]
120 pub struct RenameRequest {
121 pub name: String,
122 pub new_name: String,
123 }
124
125 #[derive(Serialize)]
126 pub struct RemoveRequest {
127 pub name: String,
128 }
129}