From 887496d040be61fe9a78169b4fa89febbec08812 Mon Sep 17 00:00:00 2001
From: Jason Volk <jason@zemos.net>
Date: Sat, 1 Jun 2024 12:10:25 +0000
Subject: [PATCH] consolidate default cargo features

Signed-off-by: Jason Volk <jason@zemos.net>
---
 Cargo.lock              |   7 +--
 src/admin/Cargo.toml    |   8 ---
 src/api/Cargo.toml      |   7 ---
 src/core/Cargo.toml     |  11 ----
 src/database/Cargo.toml |   8 ---
 src/main/Cargo.toml     | 117 ++++++++++++++++++++++++++++++++++------
 src/router/Cargo.toml   |   9 ----
 src/service/Cargo.toml  |  17 ------
 8 files changed, 104 insertions(+), 80 deletions(-)

diff --git a/Cargo.lock b/Cargo.lock
index 375440ef..b2975e33 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -572,8 +572,12 @@ name = "conduit"
 version = "0.4.1"
 dependencies = [
  "clap",
+ "conduit_admin",
+ "conduit_api",
  "conduit_core",
+ "conduit_database",
  "conduit_router",
+ "conduit_service",
  "console-subscriber",
  "hardened_malloc-rs",
  "log",
@@ -761,18 +765,15 @@ dependencies = [
  "log",
  "loole",
  "lru-cache",
- "parking_lot",
  "rand",
  "regex",
  "reqwest",
  "ruma",
  "ruma-identifiers-validation",
- "rusqlite",
  "serde",
  "serde_json",
  "serde_yaml",
  "sha2",
- "thread_local",
  "tokio",
  "tracing",
  "url",
diff --git a/src/admin/Cargo.toml b/src/admin/Cargo.toml
index 244cf7d2..42327430 100644
--- a/src/admin/Cargo.toml
+++ b/src/admin/Cargo.toml
@@ -17,14 +17,6 @@ crate-type = [
 ]
 
 [features]
-default = [
-	"rocksdb",
-	"io_uring",
-	"jemalloc",
-	"zstd_compression",
-	"release_max_log_level",
-]
-
 dev_release_log_level = []
 release_max_log_level = [
 	"tracing/max_level_trace",
diff --git a/src/api/Cargo.toml b/src/api/Cargo.toml
index 315fa76c..a80a254e 100644
--- a/src/api/Cargo.toml
+++ b/src/api/Cargo.toml
@@ -17,13 +17,6 @@ crate-type = [
 ]
 
 [features]
-default = [
-	"element_hacks",
-	"gzip_compression",
-	"brotli_compression",
-	"release_max_log_level",
-]
-
 element_hacks = []
 dev_release_log_level = []
 release_max_log_level = [
diff --git a/src/core/Cargo.toml b/src/core/Cargo.toml
index a0c8a060..dd17946f 100644
--- a/src/core/Cargo.toml
+++ b/src/core/Cargo.toml
@@ -17,17 +17,6 @@ crate-type = [
 ]
 
 [features]
-default = [
-	"rocksdb",
-	"io_uring",
-	"jemalloc",
-	"gzip_compression",
-	"zstd_compression",
-	"brotli_compression",
-	"sentry_telemetry",
-	"release_max_log_level",
-]
-
 dev_release_log_level = []
 release_max_log_level = [
 	"tracing/max_level_trace",
diff --git a/src/database/Cargo.toml b/src/database/Cargo.toml
index e23d2d7b..113414cb 100644
--- a/src/database/Cargo.toml
+++ b/src/database/Cargo.toml
@@ -17,14 +17,6 @@ crate-type = [
 ]
 
 [features]
-default = [
-	"rocksdb",
-	"io_uring",
-	"jemalloc",
-	"zstd_compression",
-	"release_max_log_level",
-]
-
 dev_release_log_level = []
 release_max_log_level = [
 	"tracing/max_level_trace",
diff --git a/src/main/Cargo.toml b/src/main/Cargo.toml
index 06c8c697..94c62656 100644
--- a/src/main/Cargo.toml
+++ b/src/main/Cargo.toml
@@ -37,27 +37,57 @@ assets = [
 
 [features]
 default = [
-	"sentry_telemetry",
+	"brotli_compression",
+	"element_hacks",
+	"gzip_compression",
+	"io_uring",
+	"jemalloc",
 	"release_max_log_level",
+	"rocksdb",
+	"sentry_telemetry",
+	"systemd",
+	"zstd_compression",
 ]
 
-# increases performance, reduces build times, and reduces binary size by not compiling or
-# genreating code for log level filters that users will generally not use (debug and trace)
-release_max_log_level = [
-	"tracing/max_level_trace",
-	"tracing/release_max_level_info",
-	"log/max_level_trace",
-	"log/release_max_level_info",
+axum_dual_protocol = [
+	"conduit-router/axum_dual_protocol",
 ]
-sentry_telemetry = [
-	"dep:sentry",
-	"dep:sentry-tracing",
-	"dep:sentry-tower",
+brotli_compression = [
+	"conduit-api/brotli_compression",
+	"conduit-core/brotli_compression",
+	"conduit-router/brotli_compression",
+	"conduit-service/brotli_compression",
 ]
-# enable the tokio_console server ncompatible with release_max_log_level
-tokio_console = [
-	"dep:console-subscriber",
-	"tokio/tracing",
+dev_release_log_level = [
+	"conduit-api/dev_release_log_level",
+	"conduit-core/dev_release_log_level",
+	"conduit-database/dev_release_log_level",
+	"conduit-router/dev_release_log_level",
+	"conduit-service/dev_release_log_level",
+]
+element_hacks = [
+	"conduit-api/element_hacks",
+]
+gzip_compression = [
+	"conduit-api/gzip_compression",
+	"conduit-router/gzip_compression",
+	"conduit-service/gzip_compression",
+]
+hardened_malloc = [
+	"conduit-core/hardened_malloc",
+]
+io_uring = [
+	"conduit-admin/io_uring",
+	"conduit-core/io_uring",
+	"conduit-database/io_uring",
+]
+jemalloc = [
+	"conduit-admin/jemalloc",
+	"conduit-core/jemalloc",
+	"conduit-database/jemalloc",	
+]
+jemalloc_prof = [
+	"conduit-core/jemalloc_prof",
 ]
 perf_measurements = [
 	"dep:opentelemetry",
@@ -65,11 +95,64 @@ perf_measurements = [
 	"dep:tracing-opentelemetry",
 	"dep:opentelemetry_sdk",
 	"dep:opentelemetry-jaeger",
+	"conduit-core/perf_measurements",
+	"conduit-core/sentry_telemetry",
+]
+# increases performance, reduces build times, and reduces binary size by not compiling or
+# genreating code for log level filters that users will generally not use (debug and trace)
+release_max_log_level = [
+	"tracing/max_level_trace",
+	"tracing/release_max_level_info",
+	"log/max_level_trace",
+	"log/release_max_level_info",
+	"conduit-admin/release_max_log_level",
+	"conduit-api/release_max_log_level",
+	"conduit-core/release_max_log_level",
+	"conduit-database/release_max_log_level",
+	"conduit-router/release_max_log_level",
+	"conduit-service/release_max_log_level",
+]
+rocksdb = [
+	"conduit-admin/rocksdb",
+	"conduit-core/rocksdb",
+	"conduit-database/rocksdb",
+]
+sentry_telemetry = [
+	"dep:sentry",
+	"dep:sentry-tracing",
+	"dep:sentry-tower",
+	"conduit-core/sentry_telemetry",
+	"conduit-router/sentry_telemetry",
+]
+sha256_media = [
+	"conduit-service/sha256_media",
+]
+sqlite = [
+	"conduit-core/sqlite",
+	"conduit-database/sqlite",
+]
+systemd = [
+	"conduit-router/systemd",
+]
+# enable the tokio_console server ncompatible with release_max_log_level
+tokio_console = [
+	"dep:console-subscriber",
+	"tokio/tracing",
+]
+zstd_compression = [
+	"conduit-admin/zstd_compression",
+	"conduit-core/zstd_compression",
+	"conduit-database/zstd_compression",
+	"conduit-router/zstd_compression",
 ]
 
 [dependencies]
-conduit-router.workspace = true
+conduit-admin.workspace = true
+conduit-api.workspace = true
 conduit-core.workspace = true
+conduit-database.workspace = true
+conduit-router.workspace = true
+conduit-service.workspace = true
 
 tokio.workspace = true
 log.workspace = true
diff --git a/src/router/Cargo.toml b/src/router/Cargo.toml
index 11028112..6084aa07 100644
--- a/src/router/Cargo.toml
+++ b/src/router/Cargo.toml
@@ -17,15 +17,6 @@ crate-type = [
 ]
 
 [features]
-default = [
-	"systemd",
-	"sentry_telemetry",
-	"gzip_compression",
-	"zstd_compression",
-	"brotli_compression",
-	"release_max_log_level",
-]
-
 dev_release_log_level = []
 release_max_log_level = [
 	"tracing/max_level_trace",
diff --git a/src/service/Cargo.toml b/src/service/Cargo.toml
index e4189125..f6f682a9 100644
--- a/src/service/Cargo.toml
+++ b/src/service/Cargo.toml
@@ -17,12 +17,6 @@ crate-type = [
 ]
 
 [features]
-default = [
-	"gzip_compression",
-	"brotli_compression",
-	"release_max_log_level",
-]
-
 dev_release_log_level = []
 release_max_log_level = [
 	"tracing/max_level_trace",
@@ -30,11 +24,6 @@ release_max_log_level = [
 	"log/max_level_trace",
 	"log/release_max_level_info",
 ]
-sqlite = [
-	"dep:rusqlite",
-	"dep:parking_lot",
-	"dep:thread_local",
-]
 gzip_compression = [
 	"reqwest/gzip",
 ]
@@ -63,22 +52,16 @@ jsonwebtoken.workspace = true
 log.workspace = true
 loole.workspace = true
 lru-cache.workspace = true
-parking_lot.optional = true
-parking_lot.workspace = true
 rand.workspace = true
 regex.workspace = true
 reqwest.workspace = true
 ruma-identifiers-validation.workspace = true
 ruma.workspace = true
-rusqlite.optional = true
-rusqlite.workspace = true
 serde_json.workspace = true
 serde.workspace = true
 serde_yaml.workspace = true
 sha2.optional = true
 sha2.workspace = true
-thread_local.optional = true
-thread_local.workspace = true
 tokio.workspace = true
 tracing.workspace = true
 url.workspace = true