notion_client/endpoints/comments/
retrieve.rs

1pub mod response;
2
3use crate::{endpoints::NOTION_URI, objects::Response, NotionClientError};
4
5use response::RetrieveCommentsResponse;
6
7use super::CommentsEndpoint;
8
9impl CommentsEndpoint {
10    pub async fn retrieve_a_user(
11        &self,
12        block_id: &str,
13        start_cursor: Option<&str>,
14        page_size: Option<u32>,
15    ) -> Result<RetrieveCommentsResponse, NotionClientError> {
16        let mut query = vec![];
17        if let Some(start_cursor) = start_cursor {
18            query.insert(0, ("start_cursor", start_cursor));
19        }
20        let page_size = page_size.map(|p| p.to_string());
21        if let Some(page_size) = &page_size {
22            query.insert(0, ("page_size", page_size));
23        }
24
25        let result = self
26            .client
27            .get(format!(
28                "{notion_uri}/comments?block_id={block_id}",
29                notion_uri = NOTION_URI,
30                block_id = block_id,
31            ))
32            .query(&query)
33            .send()
34            .await
35            .map_err(|e| NotionClientError::FailedToRequest { source: e })?;
36
37        let body = result
38            .text()
39            .await
40            .map_err(|e| NotionClientError::FailedToText { source: e })?;
41
42        let response = serde_json::from_str(&body)
43            .map_err(|e| NotionClientError::FailedToDeserialize { source: e, body })?;
44
45        match response {
46            Response::Success(r) => Ok(r),
47            Response::Error(e) => Err(NotionClientError::InvalidStatusCode { error: e }),
48        }
49    }
50}