Skip to main content

notion_client/endpoints/data_sources/
query.rs

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