libtodoist/api/
comment.rs1use 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(), ¶ms).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}