diff --git a/crates/cli/src/bin/trail.rs b/crates/cli/src/bin/trail.rs index 379ac0ce..d0bac4af 100644 --- a/crates/cli/src/bin/trail.rs +++ b/crates/cli/src/bin/trail.rs @@ -250,7 +250,7 @@ async fn async_main( let email = Email::new(&state, &cmd.to, cmd.subject, cmd.body)?; email.send().await?; - let c = state.get_config().email; + let c = state.get_config().email.clone(); match (c.smtp_host, c.smtp_port, c.smtp_username, c.smtp_password) { (Some(host), Some(port), Some(username), Some(_)) => { println!("Sent email using: {username}@{host}:{port}"); diff --git a/crates/core/src/admin/table/alter_table.rs b/crates/core/src/admin/table/alter_table.rs index 2dd79b43..2d526d88 100644 --- a/crates/core/src/admin/table/alter_table.rs +++ b/crates/core/src/admin/table/alter_table.rs @@ -168,7 +168,7 @@ pub async fn alter_table_handler( // Fix configuration: update all table references by existing APIs. if source_table_schema.name != target_table_name { - let mut config = state.get_config(); + let mut config = (*state.get_config()).clone(); let old_config_hash = hash_config(&config); for api in &mut config.record_apis { diff --git a/crates/core/src/admin/table/drop_table.rs b/crates/core/src/admin/table/drop_table.rs index 6b2ebf2d..e8b9a1e6 100644 --- a/crates/core/src/admin/table/drop_table.rs +++ b/crates/core/src/admin/table/drop_table.rs @@ -97,7 +97,7 @@ pub async fn drop_table_handler( // Fix configuration: remove all APIs reference the no longer existing table. { - let mut config = state.get_config(); + let mut config = (*state.get_config()).clone(); let old_config_hash = hash_config(&config); config.record_apis.retain(|c| { diff --git a/crates/core/src/app_state.rs b/crates/core/src/app_state.rs index 9d03bc25..853544d3 100644 --- a/crates/core/src/app_state.rs +++ b/crates/core/src/app_state.rs @@ -323,20 +323,15 @@ impl AppState { return r; } - pub fn get_config(&self) -> Config { - return self.state.config.value(); + pub fn get_config(&self) -> Arc { + return self.state.config.ptr().clone(); } pub fn access_config(&self, f: F) -> T where F: FnOnce(&Config) -> T, { - let mut result: Option = None; - let r = &mut result; - self.state.config.with_value(move |c| { - let _ = r.insert(f(c)); - }); - return result.expect("inserted"); + return f(&self.state.config.ptr()); } pub async fn validate_and_update_config( diff --git a/crates/core/src/records/subscribe/tests.rs b/crates/core/src/records/subscribe/tests.rs index 575cb4df..d4e19ebd 100644 --- a/crates/core/src/records/subscribe/tests.rs +++ b/crates/core/src/records/subscribe/tests.rs @@ -82,7 +82,7 @@ async fn subscribe_to_record_test() { // Make sure updating config doesn't drop subscriptions. state - .validate_and_update_config(state.get_config(), None) + .validate_and_update_config((*state.get_config()).clone(), None) .await .unwrap(); diff --git a/crates/core/src/records/test_utils.rs b/crates/core/src/records/test_utils.rs index 293b610d..672607dc 100644 --- a/crates/core/src/records/test_utils.rs +++ b/crates/core/src/records/test_utils.rs @@ -17,7 +17,7 @@ mod tests { acls: Acls, access_rules: AccessRules, ) -> Result<(), crate::config::ConfigError> { - let mut config = state.get_config(); + let mut config = (*state.get_config()).clone(); config.record_apis.push(RecordApiConfig { name: Some(api_name.to_string()), @@ -46,7 +46,7 @@ mod tests { state: &AppState, api: RecordApiConfig, ) -> Result<(), crate::config::ConfigError> { - let mut config = state.get_config(); + let mut config = (*state.get_config()).clone(); config.record_apis.push(api); return state.validate_and_update_config(config, None).await; } diff --git a/crates/core/tests/integration_test.rs b/crates/core/tests/integration_test.rs index 91b0dab6..6305497d 100644 --- a/crates/core/tests/integration_test.rs +++ b/crates/core/tests/integration_test.rs @@ -17,7 +17,7 @@ async fn add_record_api_config( state: &AppState, api: RecordApiConfig, ) -> Result<(), anyhow::Error> { - let mut config = state.get_config(); + let mut config = (*state.get_config()).clone(); config.record_apis.push(api); return Ok(state.validate_and_update_config(config, None).await?); }