notion_client/endpoints/data_sources/
query.rs1use crate::{
2 endpoints::{
3 databases::query::{request::QueryDatabaseRequest, response::QueryDatabaseResponse},
4 parse_response, NOTION_URI,
5 },
6 NotionClientError,
7};
8
9use super::DataSourcesEndpoint;
10
11impl DataSourcesEndpoint {
12 pub async fn query_a_data_source(
13 &self,
14 data_source_id: &str,
15 request: QueryDatabaseRequest,
16 ) -> Result<QueryDatabaseResponse, NotionClientError> {
17 let json = serde_json::to_string(&request)
18 .map_err(|e| NotionClientError::FailedToSerialize { source: e })?;
19
20 let result = self
21 .client
22 .post(format!(
23 "{notion_uri}/data_sources/{data_source_id}/query",
24 notion_uri = NOTION_URI,
25 data_source_id = data_source_id
26 ))
27 .body(json)
28 .send()
29 .await
30 .map_err(|e| NotionClientError::FailedToRequest { source: e })?;
31
32 let status = result.status();
33 let body = result
34 .text()
35 .await
36 .map_err(|e| NotionClientError::FailedToText { source: e })?;
37
38 parse_response(status, body)
39 }
40}