#![allow(
clippy::wildcard_imports,
clippy::too_many_arguments,
clippy::needless_pass_by_value,
dead_code,
reason = "split-out module preserves existing code while keeping files under the linecheck limit"
)]
use super::*;
pub(crate) fn write_removed_defaults(slugs: &BTreeSet<String>) -> std::io::Result<()> {
let path = removed_default_routines_path();
let parent = crate::utils::fs_perms::parent_or_err(&path, "removed-defaults tombstone")?;
std::fs::create_dir_all(parent)?;
let body = RemovedDefaults {
slugs: slugs.clone(),
};
let toml = toml::to_string_pretty(&body).map_err(std::io::Error::other)?;
std::fs::write(path, toml)
}
pub(crate) fn removed_defaults_lock() -> &'static Mutex<()> {
pub(crate) static LOCK: OnceLock<Mutex<()>> = OnceLock::new();
LOCK.get_or_init(|| Mutex::new(()))
}
pub fn record_removed_default(slug: &str) {
let _guard = removed_defaults_lock().lock_recover();
let mut slugs = read_removed_defaults();
if slugs.insert(slug.to_string()) {
if let Err(err) = write_removed_defaults(&slugs) {
log::warn!("record_removed_default: failed to persist tombstone for {slug:?}: {err}");
}
}
}
pub fn clear_removed_default(slug: &str) {
let _guard = removed_defaults_lock().lock_recover();
let mut slugs = read_removed_defaults();
if slugs.remove(slug) {
if let Err(err) = write_removed_defaults(&slugs) {
log::warn!("clear_removed_default: failed to clear tombstone for {slug:?}: {err}");
}
}
}