//! Declarative macros (folded in from the former `solus` proc-macro crate).
/// Declare a process-global singleton for a hyperparameter struct.
///
/// The struct must implement [`Default`]. `T::get()` returns the active value,
/// lazily initialized from `Default`; `T::init(v)` sets it once, returning
/// `Err(v)` if it was already set. Replaces the former `#[derive(HyperParams)]`.
///
/// ```ignore
/// #[derive(Clone, Copy, Default)]
/// struct FooHyperParams { threshold: f32 }
/// pokerkit::hyperparams!(FooHyperParams);
/// // FooHyperParams::get(); FooHyperParams { threshold: 0.5 }.init();
/// ```