From 6e8beb604dbfa0cc89b0eb123711e842029bdfb2 Mon Sep 17 00:00:00 2001 From: Jonathan de Jong Date: Mon, 12 Jul 2021 18:05:43 +0200 Subject: [PATCH] support some deprecations --- src/database.rs | 28 ++++++++++++++++++++++++++-- src/database/abstraction/sqlite.rs | 2 +- src/main.rs | 3 ++- 3 files changed, 29 insertions(+), 4 deletions(-) diff --git a/src/database.rs b/src/database.rs index e9646dfe..c58a396b 100644 --- a/src/database.rs +++ b/src/database.rs @@ -42,8 +42,8 @@ use self::proxy::ProxyConfig; pub struct Config { server_name: Box, database_path: String, - #[serde(default = "default_db_cache_capacity")] - db_cache_capacity: u32, + cache_capacity: Option, // deprecated + db_cache_capacity: Option, #[serde(default = "default_sqlite_read_pool_size")] sqlite_read_pool_size: usize, #[serde(default = "false_fn")] @@ -73,6 +73,30 @@ pub struct Config { pub log: String, } +macro_rules! deprecate_with { + ($self:expr ; $from:ident -> $to:ident) => { + if let Some(v) = $self.$from { + let from = stringify!($from); + let to = stringify!($to); + log::warn!("{} is deprecated, use {} instead", from, to); + + $self.$to.get_or_insert(v); + } + }; + ($self:expr ; $from:ident -> $to:ident or $default:expr) => { + deprecate_with!($self ; $from -> $to); + $self.$to.get_or_insert_with($default); + }; +} + +impl Config { + pub fn fallbacks(mut self) -> Self { + // TODO: have a proper way handle into above struct (maybe serde supports something like this?) + deprecate_with!(self ; cache_capacity -> db_cache_capacity or default_db_cache_capacity); + self + } +} + fn false_fn() -> bool { false } diff --git a/src/database/abstraction/sqlite.rs b/src/database/abstraction/sqlite.rs index d4ab9ad0..6864287e 100644 --- a/src/database/abstraction/sqlite.rs +++ b/src/database/abstraction/sqlite.rs @@ -128,7 +128,7 @@ impl DatabaseEngine for Engine { let pool = Pool::new( Path::new(&config.database_path).join("conduit.db"), config.sqlite_read_pool_size, - config.db_cache_capacity / 1024, // bytes -> kb + config.db_cache_capacity.expect("fallbacks hasn't been called") / 1024, // bytes -> kb )?; pool.write_lock() diff --git a/src/main.rs b/src/main.rs index 034c39ea..fd574682 100644 --- a/src/main.rs +++ b/src/main.rs @@ -196,7 +196,8 @@ async fn main() { let config = raw_config .extract::() - .expect("It looks like your config is invalid. Please take a look at the error"); + .expect("It looks like your config is invalid. Please take a look at the error") + .fallbacks(); let db = Database::load_or_create(config.clone()) .await