libtodoist/api/
comment.rs

1use serde::Serialize;
2
3use crate::error::Error;
4use crate::models::Attachment;
5use crate::{models, EmptyQuery};
6
7crate::endpoint_group!();
8
9impl Client<'_> {
10    pub async fn list(&self, params: ListRequest) -> Result<Vec<models::Comment>, Error> {
11        match self.api_client.get("/comments".to_string(), &params).await {
12            Err(err) => Err(Error::RequestError(err.to_string())),
13            Ok(None) => Ok(vec![]),
14            Ok(Some(text)) => match serde_json::from_str(&text) {
15                Ok(comments) => Ok(comments),
16                Err(err) => Err(Error::ParseError(err.to_string())),
17            },
18        }
19    }
20
21    pub async fn get(&self, id: String) -> Result<Option<models::Comment>, Error> {
22        match self.api_client.get(format!("/comments/{}", id), &EmptyQuery{}).await {
23            Err(err) => Err(Error::RequestError(err.to_string())),
24            Ok(None) => Ok(None),
25            Ok(Some(text)) => match serde_json::from_str(&text) {
26                Ok(comment) => Ok(Some(comment)),
27                Err(err) => Err(Error::ParseError(err.to_string()))
28            },
29        }
30    }
31
32    pub async fn create(&self, request: CreateRequest) -> Result<Option<models::Comment>, Error> {
33        match self.api_client.post("/comments".to_string(), request).await {
34            Err(err) => Err(Error::RequestError(err.to_string())),
35            Ok(None) => Ok(None),
36            Ok(Some(text)) => match serde_json::from_str(&text) {
37                Ok(comment) => Ok(Some(comment)),
38                Err(_) => Err(Error::ParseError("unable to parse response".to_string()))
39            },
40        }
41    }
42
43    pub async fn update(&self, id: String, request: UpdateRequest) -> Result<Option<models::Comment>, Error> {
44        match self.api_client.post(format!("/comments/{}", id), request).await {
45            Err(err) => Err(Error::RequestError(err.to_string())),
46            Ok(None) => Ok(None),
47            Ok(Some(text)) => match serde_json::from_str(&text) {
48                Ok(comment) => Ok(Some(comment)),
49                Err(_) => Err(Error::ParseError("unable to parse response".to_string()))
50            },
51        }
52    }
53
54    pub async fn delete(&self, id: String) -> Option<Error> {
55        match self.api_client.delete(format!("/comments/{}", id)).await {
56            Err(err) => Some(Error::RequestError(err.to_string())),
57            Ok(_) => None,
58        }
59    }
60}
61
62#[derive(Serialize)]
63pub struct ListRequest {
64    pub project_id: Option<String>,
65    pub task_id: Option<String>,
66}
67
68#[derive(Serialize)]
69pub struct CreateRequest {
70    pub task_id: Option<String>,
71    pub project_id: Option<String>,
72    pub content: String,
73    pub attachment: Option<Attachment>,
74}
75
76#[derive(Serialize)]
77pub struct UpdateRequest {
78    pub content: String,
79}