diff --git a/Cargo.lock b/Cargo.lock index 41be304..4d39ef4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -93,8 +93,20 @@ name = "archivr-cli" version = "0.1.0" dependencies = [ "anyhow", + "archivr-core", "chrono", "clap", + "regex", + "rusqlite", + "serde_json", +] + +[[package]] +name = "archivr-core" +version = "0.1.0" +dependencies = [ + "anyhow", + "chrono", "hex", "regex", "rusqlite", diff --git a/Cargo.toml b/Cargo.toml index f6902f8..68cb6ba 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,5 +1,6 @@ [workspace] members = [ + "crates/archivr-core", "crates/archivr-cli", ] resolver = "2" diff --git a/crates/archivr-cli/Cargo.toml b/crates/archivr-cli/Cargo.toml index 5f70d01..3a190d7 100644 --- a/crates/archivr-cli/Cargo.toml +++ b/crates/archivr-cli/Cargo.toml @@ -8,12 +8,10 @@ name = "archivr" path = "src/main.rs" [dependencies] +archivr-core = { path = "../archivr-core" } anyhow.workspace = true chrono.workspace = true clap.workspace = true -hex.workspace = true regex.workspace = true rusqlite.workspace = true serde_json.workspace = true -sha3.workspace = true -uuid.workspace = true diff --git a/crates/archivr-cli/src/main.rs b/crates/archivr-cli/src/main.rs index 22ce63d..1279780 100644 --- a/crates/archivr-cli/src/main.rs +++ b/crates/archivr-cli/src/main.rs @@ -1,4 +1,5 @@ use anyhow::{Context, Result}; +use archivr_core::{database, downloader, twitter::parse_tweet_id}; use chrono::Local; use clap::{Parser, Subcommand}; use serde_json::json; @@ -9,11 +10,6 @@ use std::{ process, }; -mod database; -mod downloader; -mod hash; -mod twitter; - #[derive(Parser, Debug)] #[command(version, about, long_about = None)] struct Args { @@ -87,8 +83,6 @@ enum Source { Other, } -use crate::twitter::parse_tweet_id; - fn expand_shorthand_to_url(path: &str, source: &Source) -> String { if *source == Source::X && (path.starts_with("tweet:media:") || path.starts_with("x:media:")) { if let Some(tweet_id) = path.split(':').next_back().and_then(parse_tweet_id) { diff --git a/crates/archivr-core/Cargo.toml b/crates/archivr-core/Cargo.toml new file mode 100644 index 0000000..0a1da07 --- /dev/null +++ b/crates/archivr-core/Cargo.toml @@ -0,0 +1,14 @@ +[package] +name = "archivr-core" +version.workspace = true +edition.workspace = true + +[dependencies] +anyhow.workspace = true +chrono.workspace = true +hex.workspace = true +regex.workspace = true +rusqlite.workspace = true +serde_json.workspace = true +sha3.workspace = true +uuid.workspace = true diff --git a/crates/archivr-cli/src/database.rs b/crates/archivr-core/src/database.rs similarity index 100% rename from crates/archivr-cli/src/database.rs rename to crates/archivr-core/src/database.rs diff --git a/crates/archivr-cli/src/downloader/local.rs b/crates/archivr-core/src/downloader/local.rs similarity index 100% rename from crates/archivr-cli/src/downloader/local.rs rename to crates/archivr-core/src/downloader/local.rs diff --git a/crates/archivr-cli/src/downloader/mod.rs b/crates/archivr-core/src/downloader/mod.rs similarity index 100% rename from crates/archivr-cli/src/downloader/mod.rs rename to crates/archivr-core/src/downloader/mod.rs diff --git a/crates/archivr-cli/src/downloader/store.rs b/crates/archivr-core/src/downloader/store.rs similarity index 100% rename from crates/archivr-cli/src/downloader/store.rs rename to crates/archivr-core/src/downloader/store.rs diff --git a/crates/archivr-cli/src/downloader/tweets.rs b/crates/archivr-core/src/downloader/tweets.rs similarity index 99% rename from crates/archivr-cli/src/downloader/tweets.rs rename to crates/archivr-core/src/downloader/tweets.rs index dc430d6..22d8bff 100644 --- a/crates/archivr-cli/src/downloader/tweets.rs +++ b/crates/archivr-core/src/downloader/tweets.rs @@ -10,9 +10,7 @@ use std::{ sync::OnceLock, }; -use crate::twitter::parse_tweet_id; - -use super::store; +use crate::{downloader::store, twitter::parse_tweet_id}; /// Extracts a tweet ID from an archivr path like `"tweet:123"` by taking the /// last colon-separated segment and validating it as a numeric ID. diff --git a/crates/archivr-cli/src/downloader/ytdlp.rs b/crates/archivr-core/src/downloader/ytdlp.rs similarity index 100% rename from crates/archivr-cli/src/downloader/ytdlp.rs rename to crates/archivr-core/src/downloader/ytdlp.rs diff --git a/crates/archivr-cli/src/hash.rs b/crates/archivr-core/src/hash.rs similarity index 100% rename from crates/archivr-cli/src/hash.rs rename to crates/archivr-core/src/hash.rs diff --git a/crates/archivr-core/src/lib.rs b/crates/archivr-core/src/lib.rs new file mode 100644 index 0000000..50e268b --- /dev/null +++ b/crates/archivr-core/src/lib.rs @@ -0,0 +1,4 @@ +pub mod database; +pub mod downloader; +pub mod hash; +pub mod twitter; diff --git a/crates/archivr-cli/src/twitter.rs b/crates/archivr-core/src/twitter.rs similarity index 100% rename from crates/archivr-cli/src/twitter.rs rename to crates/archivr-core/src/twitter.rs