From 24d547e93ae232e7ea04ac8b45e643d068e68d6f Mon Sep 17 00:00:00 2001 From: alemi Date: Sat, 6 Apr 2024 18:03:13 +0200 Subject: [PATCH] feat: subdivide into features --- Cargo.toml | 47 +++++++++++++++++++++++++++-------------------- src/main.rs | 15 +++++++++++++-- src/model/mod.rs | 1 + 3 files changed, 41 insertions(+), 22 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 8da19d6..d3490d3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,27 +9,34 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -axum = "0.7.3" -chrono = { version = "0.4.31", features = ["serde"] } -clap = { version = "4.5.3", features = ["derive"] } -paste = "1.0.14" -reqwest = { version = "0.12", features = ["json"] } -sea-orm = { version = "0.12.14", features = ["macros", "sqlx-sqlite", "runtime-tokio-rustls"] } -sea-orm-migration = "0.12.15" -serde = { version = "1.0.193", features = ["derive"] } -serde_json = "1.0.108" -thiserror = "1.0.58" -tokio = { version = "1.35.1", features = ["full"] } -tracing = "0.1.40" -tracing-subscriber = "0.3.18" -uuid = { version = "1.8.0", features = ["v4"] } +thiserror = "1" +rand = "0.8" +sha256 = "1.5" +openssl = "0.10" # TODO handle pubkeys with a smaller crate +base64 = "0.22" +chrono = { version = "0.4", features = ["serde"] } +uuid = { version = "1.8", features = ["v4"] } +serde = { version = "1", features = ["derive"] } +serde_json = "1" jrd = "0.1" -apb = { path = "apb", features = ["dict", "fetch", "orm"] } +tracing = "0.1" +tracing-subscriber = "0.3" +clap = { version = "4.5", features = ["derive"] } +tokio = { version = "1.35", features = ["full"] } # TODO slim this down +sea-orm = { version = "0.12", features = ["macros", "sqlx-sqlite", "runtime-tokio-rustls"] } +reqwest = { version = "0.12", features = ["json"] } +axum = "0.7" +apb = { path = "apb", features = ["unstructured", "fetch", "orm"] } # nodeinfo = "0.0.2" # the version on crates.io doesn't re-export necessary types to build the struct!!! nodeinfo = { git = "https://codeberg.org/thefederationinfo/nodeinfo-rs", rev = "e865094804" } -rand = "0.8.5" -sha256 = "1.5.0" -openssl = "0.10.64" -base64 = "0.22.0" http-signature-normalization = "0.7.0" -mastodon-async-entities = "1.1.0" +# migrations +sea-orm-migration = { version = "0.12", optional = true } +# mastodon +mastodon-async-entities = { version = "1.1.0", optional = true } + +[features] +default = ["faker", "migrations"] +faker = [] +migrations = ["dep:sea-orm-migration"] +mastodon = ["dep:mastodon-async-entities"] diff --git a/src/main.rs b/src/main.rs index d060bf9..ae07f44 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,18 +1,25 @@ pub mod activitypub; mod model; -mod migrations; mod server; mod router; mod errors; mod auth; mod dispatcher; mod fetcher; + + +#[cfg(feature = "migrations")] +mod migrations; + +#[cfg(feature = "migrations")] +use sea_orm_migration::MigratorTrait; + +#[cfg(feature = "mastodon")] mod mastodon; use clap::{Parser, Subcommand}; use sea_orm::{ConnectOptions, Database, EntityTrait, IntoActiveModel}; -use sea_orm_migration::MigratorTrait; pub use errors::UpubResult as Result; @@ -43,9 +50,11 @@ enum CliCommand { /// run fediverse server Serve , + #[cfg(feature = "migrations")] /// apply database migrations Migrate, + #[cfg(feature = "faker")] /// generate fake user, note and activity Faker{ /// how many fake statuses to insert for root user @@ -86,9 +95,11 @@ async fn main() { CliCommand::Serve => router::serve(db, args.domain) .await, + #[cfg(feature = "migrations")] CliCommand::Migrate => migrations::Migrator::up(&db, None) .await.expect("error applying migrations"), + #[cfg(feature = "faker")] CliCommand::Faker { count } => model::faker::faker(&db, args.domain, count) .await.expect("error creating fake entities"), diff --git a/src/model/mod.rs b/src/model/mod.rs index 07bf37c..aee73ec 100644 --- a/src/model/mod.rs +++ b/src/model/mod.rs @@ -12,6 +12,7 @@ pub mod session; pub mod delivery; pub mod application; +#[cfg(feature = "faker")] pub mod faker; #[derive(Debug, Clone, thiserror::Error)]