notion_client/endpoints/blocks/
retrieve.rs1pub mod response;
2
3use crate::{
4 endpoints::NOTION_URI,
5 objects::{block::Block, Response},
6 NotionClientError,
7};
8
9use self::response::RetrieveBlockChilerenResponse;
10
11use super::BlocksEndpoint;
12
13impl BlocksEndpoint {
14 pub async fn retrieve_a_block(&self, block_id: &str) -> Result<Block, NotionClientError> {
15 let result = self
16 .client
17 .get(format!(
18 "{notion_uri}/blocks/{block_id}",
19 notion_uri = NOTION_URI,
20 ))
21 .send()
22 .await
23 .map_err(|e| NotionClientError::FailedToRequest { source: e })?;
24
25 let body = result
26 .text()
27 .await
28 .map_err(|e| NotionClientError::FailedToText { source: e })?;
29
30 let response = serde_json::from_str(&body)
31 .map_err(|e| NotionClientError::FailedToDeserialize { source: e, body })?;
32
33 match response {
34 Response::Success(r) => Ok(r),
35 Response::Error(e) => Err(NotionClientError::InvalidStatusCode { error: e }),
36 }
37 }
38
39 pub async fn retrieve_block_children(
40 &self,
41 block_id: &str,
42 start_cursor: Option<&str>,
43 page_size: Option<u32>,
44 ) -> Result<RetrieveBlockChilerenResponse, NotionClientError> {
45 let mut query = vec![];
46 if let Some(start_cursor) = start_cursor {
47 query.insert(0, ("start_cursor", start_cursor));
48 }
49 let page_size = page_size.map(|p| p.to_string());
50 if let Some(page_size) = &page_size {
51 query.insert(0, ("page_size", page_size));
52 }
53
54 let result = self
55 .client
56 .get(format!(
57 "{notion_uri}/blocks/{block_id}/children",
58 notion_uri = NOTION_URI,
59 ))
60 .query(&query)
61 .send()
62 .await
63 .map_err(|e| NotionClientError::FailedToRequest { source: e })?;
64
65 let body = result
66 .text()
67 .await
68 .map_err(|e| NotionClientError::FailedToText { source: e })?;
69
70 let response = serde_json::from_str(&body)
71 .map_err(|e| NotionClientError::FailedToDeserialize { source: e, body })?;
72
73 match response {
74 Response::Success(r) => Ok(r),
75 Response::Error(e) => Err(NotionClientError::InvalidStatusCode { error: e }),
76 }
77 }
78}