notion_client/endpoints/databases/
query.rs

1pub 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}