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