use crate::{de::Decode, enc::Encode, impl_borrow_decode}; use core::sync::atomic::Ordering; #[cfg(target_has_atomic = "ptr")] use core::sync::atomic::{AtomicIsize, AtomicUsize}; #[cfg(target_has_atomic = "8")] use core::sync::atomic::{AtomicBool, AtomicI8, AtomicU8}; #[cfg(target_has_atomic = "16")] use core::sync::atomic::{AtomicI16, AtomicU16}; #[cfg(target_has_atomic = "32")] use core::sync::atomic::{AtomicI32, AtomicU32}; #[cfg(target_has_atomic = "64")] use core::sync::atomic::{AtomicI64, AtomicU64}; #[cfg(target_has_atomic = "8")] impl Encode for AtomicBool { fn encode( &self, encoder: &mut E, ) -> Result<(), crate::error::EncodeError> { self.load(Ordering::SeqCst).encode(encoder) } } #[cfg(target_has_atomic = "8")] impl Decode for AtomicBool { fn decode(decoder: &mut D) -> Result { Ok(AtomicBool::new(Decode::decode(decoder)?)) } } #[cfg(target_has_atomic = "8")] impl_borrow_decode!(AtomicBool); #[cfg(target_has_atomic = "8")] impl Encode for AtomicU8 { fn encode( &self, encoder: &mut E, ) -> Result<(), crate::error::EncodeError> { self.load(Ordering::SeqCst).encode(encoder) } } #[cfg(target_has_atomic = "8")] impl Decode for AtomicU8 { fn decode(decoder: &mut D) -> Result { Ok(AtomicU8::new(Decode::decode(decoder)?)) } } #[cfg(target_has_atomic = "8")] impl_borrow_decode!(AtomicU8); #[cfg(target_has_atomic = "16")] impl Encode for AtomicU16 { fn encode( &self, encoder: &mut E, ) -> Result<(), crate::error::EncodeError> { self.load(Ordering::SeqCst).encode(encoder) } } #[cfg(target_has_atomic = "16")] impl Decode for AtomicU16 { fn decode(decoder: &mut D) -> Result { Ok(AtomicU16::new(Decode::decode(decoder)?)) } } #[cfg(target_has_atomic = "16")] impl_borrow_decode!(AtomicU16); #[cfg(target_has_atomic = "32")] impl Encode for AtomicU32 { fn encode( &self, encoder: &mut E, ) -> Result<(), crate::error::EncodeError> { self.load(Ordering::SeqCst).encode(encoder) } } #[cfg(target_has_atomic = "32")] impl Decode for AtomicU32 { fn decode(decoder: &mut D) -> Result { Ok(AtomicU32::new(Decode::decode(decoder)?)) } } #[cfg(target_has_atomic = "32")] impl_borrow_decode!(AtomicU32); #[cfg(target_has_atomic = "64")] impl Encode for AtomicU64 { fn encode( &self, encoder: &mut E, ) -> Result<(), crate::error::EncodeError> { self.load(Ordering::SeqCst).encode(encoder) } } #[cfg(target_has_atomic = "64")] impl Decode for AtomicU64 { fn decode(decoder: &mut D) -> Result { Ok(AtomicU64::new(Decode::decode(decoder)?)) } } #[cfg(target_has_atomic = "64")] impl_borrow_decode!(AtomicU64); #[cfg(target_has_atomic = "ptr")] impl Encode for AtomicUsize { fn encode( &self, encoder: &mut E, ) -> Result<(), crate::error::EncodeError> { self.load(Ordering::SeqCst).encode(encoder) } } #[cfg(target_has_atomic = "ptr")] impl Decode for AtomicUsize { fn decode(decoder: &mut D) -> Result { Ok(AtomicUsize::new(Decode::decode(decoder)?)) } } #[cfg(target_has_atomic = "ptr")] impl_borrow_decode!(AtomicUsize); #[cfg(target_has_atomic = "8")] impl Encode for AtomicI8 { fn encode( &self, encoder: &mut E, ) -> Result<(), crate::error::EncodeError> { self.load(Ordering::SeqCst).encode(encoder) } } #[cfg(target_has_atomic = "8")] impl Decode for AtomicI8 { fn decode(decoder: &mut D) -> Result { Ok(AtomicI8::new(Decode::decode(decoder)?)) } } #[cfg(target_has_atomic = "8")] impl_borrow_decode!(AtomicI8); #[cfg(target_has_atomic = "16")] impl Encode for AtomicI16 { fn encode( &self, encoder: &mut E, ) -> Result<(), crate::error::EncodeError> { self.load(Ordering::SeqCst).encode(encoder) } } #[cfg(target_has_atomic = "16")] impl Decode for AtomicI16 { fn decode(decoder: &mut D) -> Result { Ok(AtomicI16::new(Decode::decode(decoder)?)) } } #[cfg(target_has_atomic = "16")] impl_borrow_decode!(AtomicI16); #[cfg(target_has_atomic = "32")] impl Encode for AtomicI32 { fn encode( &self, encoder: &mut E, ) -> Result<(), crate::error::EncodeError> { self.load(Ordering::SeqCst).encode(encoder) } } #[cfg(target_has_atomic = "32")] impl Decode for AtomicI32 { fn decode(decoder: &mut D) -> Result { Ok(AtomicI32::new(Decode::decode(decoder)?)) } } #[cfg(target_has_atomic = "32")] impl_borrow_decode!(AtomicI32); #[cfg(target_has_atomic = "64")] impl Encode for AtomicI64 { fn encode( &self, encoder: &mut E, ) -> Result<(), crate::error::EncodeError> { self.load(Ordering::SeqCst).encode(encoder) } } #[cfg(target_has_atomic = "64")] impl Decode for AtomicI64 { fn decode(decoder: &mut D) -> Result { Ok(AtomicI64::new(Decode::decode(decoder)?)) } } #[cfg(target_has_atomic = "64")] impl_borrow_decode!(AtomicI64); #[cfg(target_has_atomic = "ptr")] impl Encode for AtomicIsize { fn encode( &self, encoder: &mut E, ) -> Result<(), crate::error::EncodeError> { self.load(Ordering::SeqCst).encode(encoder) } } #[cfg(target_has_atomic = "ptr")] impl Decode for AtomicIsize { fn decode(decoder: &mut D) -> Result { Ok(AtomicIsize::new(Decode::decode(decoder)?)) } } #[cfg(target_has_atomic = "ptr")] impl_borrow_decode!(AtomicIsize);