notion_into_sqlite/
lib.rs

1pub mod json_util;
2pub mod notion_client;
3pub mod notion_database;
4pub mod notion_pages;
5pub mod sqlite;
6
7#[macro_use]
8extern crate log;
9
10use crate::notion_client::NotionClient;
11use crate::sqlite::Sqlite;
12use anyhow::{Context, Result};
13
14pub fn main(api_key: &str, database_id: &str, output: &str) -> Result<()> {
15    env_logger::init();
16
17    Sqlite::validate_database_path(output)
18        .with_context(|| format!("Failed to create a database file {}", output))?;
19
20    let client = NotionClient {
21        api_key: api_key.into(),
22    };
23
24    let schema = client
25        .get_database(database_id)
26        .with_context(|| "Failed to fetch database schema")?;
27    let pages = client
28        .get_all_pages(database_id, &schema)
29        .with_context(|| "Failed to fetch pages")?;
30
31    let sqlite = Sqlite::new(output, &schema).with_context(|| "Failed to connect to sqlite")?;
32    sqlite
33        .create_tables()
34        .with_context(|| "Failed to create tables")?;
35
36    for page in pages {
37        sqlite
38            .insert(&page)
39            .with_context(|| "Failed to insert pages to sqlite")?;
40    }
41
42    Ok(())
43}