Skip to main content

bincode_next/
atomic.rs

1use crate::de::Decode;
2use crate::enc::Encode;
3use crate::impl_borrow_decode;
4use core::sync::atomic::Ordering;
5
6#[cfg(target_has_atomic = "ptr")]
7use core::sync::atomic::AtomicIsize;
8#[cfg(target_has_atomic = "ptr")]
9use core::sync::atomic::AtomicUsize;
10
11#[cfg(target_has_atomic = "8")]
12use core::sync::atomic::AtomicBool;
13#[cfg(target_has_atomic = "8")]
14use core::sync::atomic::AtomicI8;
15#[cfg(target_has_atomic = "8")]
16use core::sync::atomic::AtomicU8;
17
18#[cfg(target_has_atomic = "16")]
19use core::sync::atomic::AtomicI16;
20#[cfg(target_has_atomic = "16")]
21use core::sync::atomic::AtomicU16;
22
23#[cfg(target_has_atomic = "32")]
24use core::sync::atomic::AtomicI32;
25#[cfg(target_has_atomic = "32")]
26use core::sync::atomic::AtomicU32;
27
28#[cfg(target_has_atomic = "64")]
29use core::sync::atomic::AtomicI64;
30#[cfg(target_has_atomic = "64")]
31use core::sync::atomic::AtomicU64;
32
33#[cfg(target_has_atomic = "8")]
34impl Encode for AtomicBool {
35    fn encode<E: crate::enc::Encoder>(
36        &self,
37        encoder: &mut E,
38    ) -> Result<(), crate::error::EncodeError> {
39        self.load(Ordering::SeqCst).encode(encoder)
40    }
41}
42
43#[cfg(target_has_atomic = "8")]
44impl<Context> Decode<Context> for AtomicBool {
45    fn decode<D: crate::de::Decoder>(decoder: &mut D) -> Result<Self, crate::error::DecodeError> {
46        Ok(Self::new(Decode::decode(decoder)?))
47    }
48}
49#[cfg(target_has_atomic = "8")]
50impl_borrow_decode!(AtomicBool);
51
52#[cfg(target_has_atomic = "8")]
53impl Encode for AtomicU8 {
54    fn encode<E: crate::enc::Encoder>(
55        &self,
56        encoder: &mut E,
57    ) -> Result<(), crate::error::EncodeError> {
58        self.load(Ordering::SeqCst).encode(encoder)
59    }
60}
61
62#[cfg(target_has_atomic = "8")]
63impl<Context> Decode<Context> for AtomicU8 {
64    fn decode<D: crate::de::Decoder>(decoder: &mut D) -> Result<Self, crate::error::DecodeError> {
65        Ok(Self::new(Decode::decode(decoder)?))
66    }
67}
68#[cfg(target_has_atomic = "8")]
69impl_borrow_decode!(AtomicU8);
70
71#[cfg(target_has_atomic = "16")]
72impl Encode for AtomicU16 {
73    fn encode<E: crate::enc::Encoder>(
74        &self,
75        encoder: &mut E,
76    ) -> Result<(), crate::error::EncodeError> {
77        self.load(Ordering::SeqCst).encode(encoder)
78    }
79}
80
81#[cfg(target_has_atomic = "16")]
82impl<Context> Decode<Context> for AtomicU16 {
83    fn decode<D: crate::de::Decoder>(decoder: &mut D) -> Result<Self, crate::error::DecodeError> {
84        Ok(Self::new(Decode::decode(decoder)?))
85    }
86}
87#[cfg(target_has_atomic = "16")]
88impl_borrow_decode!(AtomicU16);
89
90#[cfg(target_has_atomic = "32")]
91impl Encode for AtomicU32 {
92    fn encode<E: crate::enc::Encoder>(
93        &self,
94        encoder: &mut E,
95    ) -> Result<(), crate::error::EncodeError> {
96        self.load(Ordering::SeqCst).encode(encoder)
97    }
98}
99
100#[cfg(target_has_atomic = "32")]
101impl<Context> Decode<Context> for AtomicU32 {
102    fn decode<D: crate::de::Decoder>(decoder: &mut D) -> Result<Self, crate::error::DecodeError> {
103        Ok(Self::new(Decode::decode(decoder)?))
104    }
105}
106#[cfg(target_has_atomic = "32")]
107impl_borrow_decode!(AtomicU32);
108
109#[cfg(target_has_atomic = "64")]
110impl Encode for AtomicU64 {
111    fn encode<E: crate::enc::Encoder>(
112        &self,
113        encoder: &mut E,
114    ) -> Result<(), crate::error::EncodeError> {
115        self.load(Ordering::SeqCst).encode(encoder)
116    }
117}
118
119#[cfg(target_has_atomic = "64")]
120impl<Context> Decode<Context> for AtomicU64 {
121    fn decode<D: crate::de::Decoder>(decoder: &mut D) -> Result<Self, crate::error::DecodeError> {
122        Ok(Self::new(Decode::decode(decoder)?))
123    }
124}
125#[cfg(target_has_atomic = "64")]
126impl_borrow_decode!(AtomicU64);
127
128#[cfg(target_has_atomic = "ptr")]
129impl Encode for AtomicUsize {
130    fn encode<E: crate::enc::Encoder>(
131        &self,
132        encoder: &mut E,
133    ) -> Result<(), crate::error::EncodeError> {
134        self.load(Ordering::SeqCst).encode(encoder)
135    }
136}
137
138#[cfg(target_has_atomic = "ptr")]
139impl<Context> Decode<Context> for AtomicUsize {
140    fn decode<D: crate::de::Decoder>(decoder: &mut D) -> Result<Self, crate::error::DecodeError> {
141        Ok(Self::new(Decode::decode(decoder)?))
142    }
143}
144#[cfg(target_has_atomic = "ptr")]
145impl_borrow_decode!(AtomicUsize);
146
147#[cfg(target_has_atomic = "8")]
148impl Encode for AtomicI8 {
149    fn encode<E: crate::enc::Encoder>(
150        &self,
151        encoder: &mut E,
152    ) -> Result<(), crate::error::EncodeError> {
153        self.load(Ordering::SeqCst).encode(encoder)
154    }
155}
156
157#[cfg(target_has_atomic = "8")]
158impl<Context> Decode<Context> for AtomicI8 {
159    fn decode<D: crate::de::Decoder>(decoder: &mut D) -> Result<Self, crate::error::DecodeError> {
160        Ok(Self::new(Decode::decode(decoder)?))
161    }
162}
163#[cfg(target_has_atomic = "8")]
164impl_borrow_decode!(AtomicI8);
165
166#[cfg(target_has_atomic = "16")]
167impl Encode for AtomicI16 {
168    fn encode<E: crate::enc::Encoder>(
169        &self,
170        encoder: &mut E,
171    ) -> Result<(), crate::error::EncodeError> {
172        self.load(Ordering::SeqCst).encode(encoder)
173    }
174}
175
176#[cfg(target_has_atomic = "16")]
177impl<Context> Decode<Context> for AtomicI16 {
178    fn decode<D: crate::de::Decoder>(decoder: &mut D) -> Result<Self, crate::error::DecodeError> {
179        Ok(Self::new(Decode::decode(decoder)?))
180    }
181}
182#[cfg(target_has_atomic = "16")]
183impl_borrow_decode!(AtomicI16);
184
185#[cfg(target_has_atomic = "32")]
186impl Encode for AtomicI32 {
187    fn encode<E: crate::enc::Encoder>(
188        &self,
189        encoder: &mut E,
190    ) -> Result<(), crate::error::EncodeError> {
191        self.load(Ordering::SeqCst).encode(encoder)
192    }
193}
194
195#[cfg(target_has_atomic = "32")]
196impl<Context> Decode<Context> for AtomicI32 {
197    fn decode<D: crate::de::Decoder>(decoder: &mut D) -> Result<Self, crate::error::DecodeError> {
198        Ok(Self::new(Decode::decode(decoder)?))
199    }
200}
201#[cfg(target_has_atomic = "32")]
202impl_borrow_decode!(AtomicI32);
203
204#[cfg(target_has_atomic = "64")]
205impl Encode for AtomicI64 {
206    fn encode<E: crate::enc::Encoder>(
207        &self,
208        encoder: &mut E,
209    ) -> Result<(), crate::error::EncodeError> {
210        self.load(Ordering::SeqCst).encode(encoder)
211    }
212}
213
214#[cfg(target_has_atomic = "64")]
215impl<Context> Decode<Context> for AtomicI64 {
216    fn decode<D: crate::de::Decoder>(decoder: &mut D) -> Result<Self, crate::error::DecodeError> {
217        Ok(Self::new(Decode::decode(decoder)?))
218    }
219}
220#[cfg(target_has_atomic = "64")]
221impl_borrow_decode!(AtomicI64);
222
223#[cfg(target_has_atomic = "ptr")]
224impl Encode for AtomicIsize {
225    fn encode<E: crate::enc::Encoder>(
226        &self,
227        encoder: &mut E,
228    ) -> Result<(), crate::error::EncodeError> {
229        self.load(Ordering::SeqCst).encode(encoder)
230    }
231}
232
233#[cfg(target_has_atomic = "ptr")]
234impl<Context> Decode<Context> for AtomicIsize {
235    fn decode<D: crate::de::Decoder>(decoder: &mut D) -> Result<Self, crate::error::DecodeError> {
236        Ok(Self::new(Decode::decode(decoder)?))
237    }
238}
239#[cfg(target_has_atomic = "ptr")]
240impl_borrow_decode!(AtomicIsize);