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);