1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
use once_cell::sync::OnceCell; pub struct PgAtomic<T> { inner: OnceCell<*mut T>, } impl<T> PgAtomic<T> { pub const fn new() -> Self { Self { inner: OnceCell::new(), } } } impl<T> PgAtomic<T> where T: atomic_traits::Atomic + Default, { pub fn attach(&self, value: *mut T) { self.inner .set(value) .expect("This PgAtomic is not empty, can't re-attach"); } pub fn get(&self) -> &T { unsafe { self.inner .get() .expect("This PgAtomic as not been initialized") .as_ref() .unwrap() } } } unsafe impl<T> Send for PgAtomic<T> where T: atomic_traits::Atomic + Default {} unsafe impl<T> Sync for PgAtomic<T> where T: atomic_traits::Atomic + Default {}