notion_client/endpoints/databases/
query.rs1pub mod request;
2pub mod response;
3
4use crate::{endpoints::NOTION_URI, objects::Response, NotionClientError};
5
6use self::{request::QueryDatabaseRequest, response::QueryDatabaseResponse};
7
8use super::DatabasesEndpoint;
9
10impl DatabasesEndpoint {
11 pub async fn query_a_database(
12 &self,
13 database_id: &str,
14 request: QueryDatabaseRequest,
15 ) -> Result<QueryDatabaseResponse, NotionClientError> {
16 let json = serde_json::to_string(&request)
17 .map_err(|e| NotionClientError::FailedToSerialize { source: e })?;
18
19 let result = self
20 .client
21 .post(format!(
22 "{notion_uri}/databases/{database_id}/query",
23 notion_uri = NOTION_URI,
24 database_id = database_id
25 ))
26 .body(json)
27 .send()
28 .await
29 .map_err(|e| NotionClientError::FailedToRequest { source: e })?;
30
31 let body = result
32 .text()
33 .await
34 .map_err(|e| NotionClientError::FailedToText { source: e })?;
35
36 let response = serde_json::from_str(&body)
37 .map_err(|e| NotionClientError::FailedToDeserialize { source: e, body })?;
38
39 match response {
40 Response::Success(r) => Ok(r),
41 Response::Error(e) => Err(NotionClientError::InvalidStatusCode { error: e }),
42 }
43 }
44}