use reifydb_core::interface::catalog::{
change::CatalogTrackConfigChangeOperations,
config::{Config, ConfigKey},
};
use reifydb_transaction::transaction::admin::AdminTransaction;
use reifydb_type::value::Value;
use super::Catalog;
use crate::{CatalogStore, Result, error::CatalogError};
impl Catalog {
pub fn set_config(&self, txn: &mut AdminTransaction, key: ConfigKey, value: Value) -> Result<()> {
let value = key.accept(value).map_err(|e| CatalogError::from((key, e)))?;
let pre_value = self.materialized.get_config(key);
let pre = Config {
key,
value: pre_value,
default_value: key.default_value(),
description: key.description(),
requires_restart: key.requires_restart(),
};
CatalogStore::set_config(txn, key, &value)?;
let post = Config {
key,
value: value.clone(),
default_value: key.default_value(),
description: key.description(),
requires_restart: key.requires_restart(),
};
txn.track_config_set(pre, post)?;
Ok(())
}
}