use crate::models::{Database, ListResponse}; use std::collections::HashMap; use crate::models::search::SearchRequest; mod models; struct NotionApi { token: String } impl NotionApi { /// This method is apparently deprecated pub async fn list_databases(&self) -> Result, Box> { let client = reqwest::ClientBuilder::new().build()?; let json = client.get("https://api.notion.com/v1/databases") .bearer_auth(self.token.clone()) .send() .await? .text().await?; dbg!(&json); let result = serde_json::from_str(&json)?; Ok(result) } pub async fn search>(&self, query: T) -> Result, Box> { let client = reqwest::ClientBuilder::new().build()?; let json = client.post("https://api.notion.com/v1/search") .bearer_auth(self.token.clone()) .json(&query.into()) .send() .await? .text().await?; dbg!(serde_json::from_str::(&json)?); let result = serde_json::from_str(&json)?; Ok(result) } } #[cfg(test)] mod tests { use crate::NotionApi; use crate::models::search::{NotionSearch, FilterValue, FilterProperty}; const TEST_TOKEN: &'static str = include_str!(".api_token"); #[tokio::test] async fn list_databases() -> Result<(), Box> { let api = NotionApi { token: TEST_TOKEN.to_string() }; dbg!(api.list_databases().await?); Ok(()) } #[tokio::test] async fn search() -> Result<(), Box> { let api = NotionApi { token: TEST_TOKEN.to_string() }; dbg!(api.search(NotionSearch::Filter {value: FilterValue::Database, property: FilterProperty::Object}).await?); Ok(()) } }