notion_client/endpoints/search/
title.rs

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