microsd 0.2.0

Light‐weight systemd auxiliars
Documentation
macro_rules! load {
	($var:expr) => {
		$var.swap(Default::default(), std::sync::atomic::Ordering::AcqRel)
	};
}

macro_rules! store {
	($var:expr, $value:expr) => {
		cfg_select! {
			debug_assertions => assert_eq!($var.swap($value, std::sync::atomic::Ordering::AcqRel), Default::default()),
			_ => $var.store($value, std::sync::atomic::Ordering::Release)
		}
	};
}

pub(crate) use load;
pub(crate) use store;

#[cfg(test)]
mod tests {
	use std::sync::atomic::AtomicBool;

	#[test]
	#[should_panic]
	fn double() {
		let atomic = AtomicBool::new(false);
		store!(atomic, true);
		store!(atomic, true);
	}
}