use std::sync::Once;
pub(crate) fn warn_once(site: &'static Once, message: impl FnOnce() -> String) {
site.call_once(|| eprintln!("mamba-rs WARNING: {}", message()));
}
#[cfg(test)]
mod tests {
use super::warn_once;
use std::sync::Once;
use std::sync::atomic::{AtomicUsize, Ordering};
#[test]
fn a_site_reports_once_and_never_builds_the_message_again() {
static SITE: Once = Once::new();
let built = AtomicUsize::new(0);
for _ in 0..3 {
warn_once(&SITE, || {
built.fetch_add(1, Ordering::SeqCst);
"diagnostics self-test".to_string()
});
}
assert_eq!(built.load(Ordering::SeqCst), 1);
}
}