bitflags/
external.rs
1pub(crate) mod __private {
69 #[cfg(feature = "serde")]
70 pub use serde;
71
72 #[cfg(feature = "arbitrary")]
73 pub use arbitrary;
74
75 #[cfg(feature = "bytemuck")]
76 pub use bytemuck;
77}
78
79#[macro_export]
81#[doc(hidden)]
82macro_rules! __impl_external_bitflags {
83 (
84 $InternalBitFlags:ident: $T:ty, $PublicBitFlags:ident {
85 $(
86 $(#[$inner:ident $($args:tt)*])*
87 const $Flag:tt;
88 )*
89 }
90 ) => {
91 $crate::__impl_external_bitflags_serde! {
96 $InternalBitFlags: $T, $PublicBitFlags {
97 $(
98 $(#[$inner $($args)*])*
99 const $Flag;
100 )*
101 }
102 }
103
104 $crate::__impl_external_bitflags_arbitrary! {
105 $InternalBitFlags: $T, $PublicBitFlags {
106 $(
107 $(#[$inner $($args)*])*
108 const $Flag;
109 )*
110 }
111 }
112
113 $crate::__impl_external_bitflags_bytemuck! {
114 $InternalBitFlags: $T, $PublicBitFlags {
115 $(
116 $(#[$inner $($args)*])*
117 const $Flag;
118 )*
119 }
120 }
121 };
122}
123
124#[cfg(feature = "serde")]
125pub mod serde;
126
127#[macro_export]
129#[doc(hidden)]
130#[cfg(feature = "serde")]
131macro_rules! __impl_external_bitflags_serde {
132 (
133 $InternalBitFlags:ident: $T:ty, $PublicBitFlags:ident {
134 $(
135 $(#[$inner:ident $($args:tt)*])*
136 const $Flag:tt;
137 )*
138 }
139 ) => {
140 impl $crate::__private::serde::Serialize for $InternalBitFlags {
141 fn serialize<S: $crate::__private::serde::Serializer>(
142 &self,
143 serializer: S,
144 ) -> $crate::__private::core::result::Result<S::Ok, S::Error> {
145 $crate::serde::serialize(
146 &$PublicBitFlags::from_bits_retain(self.bits()),
147 serializer,
148 )
149 }
150 }
151
152 impl<'de> $crate::__private::serde::Deserialize<'de> for $InternalBitFlags {
153 fn deserialize<D: $crate::__private::serde::Deserializer<'de>>(
154 deserializer: D,
155 ) -> $crate::__private::core::result::Result<Self, D::Error> {
156 let flags: $PublicBitFlags = $crate::serde::deserialize(deserializer)?;
157
158 Ok(flags.0)
159 }
160 }
161 };
162}
163
164#[macro_export]
165#[doc(hidden)]
166#[cfg(not(feature = "serde"))]
167macro_rules! __impl_external_bitflags_serde {
168 (
169 $InternalBitFlags:ident: $T:ty, $PublicBitFlags:ident {
170 $(
171 $(#[$inner:ident $($args:tt)*])*
172 const $Flag:tt;
173 )*
174 }
175 ) => {};
176}
177
178#[cfg(feature = "arbitrary")]
179pub mod arbitrary;
180
181#[cfg(feature = "bytemuck")]
182mod bytemuck;
183
184#[macro_export]
186#[doc(hidden)]
187#[cfg(feature = "arbitrary")]
188macro_rules! __impl_external_bitflags_arbitrary {
189 (
190 $InternalBitFlags:ident: $T:ty, $PublicBitFlags:ident {
191 $(
192 $(#[$inner:ident $($args:tt)*])*
193 const $Flag:tt;
194 )*
195 }
196 ) => {
197 impl<'a> $crate::__private::arbitrary::Arbitrary<'a> for $InternalBitFlags {
198 fn arbitrary(
199 u: &mut $crate::__private::arbitrary::Unstructured<'a>,
200 ) -> $crate::__private::arbitrary::Result<Self> {
201 $crate::arbitrary::arbitrary::<$PublicBitFlags>(u).map(|flags| flags.0)
202 }
203 }
204 };
205}
206
207#[macro_export]
208#[doc(hidden)]
209#[cfg(not(feature = "arbitrary"))]
210macro_rules! __impl_external_bitflags_arbitrary {
211 (
212 $InternalBitFlags:ident: $T:ty, $PublicBitFlags:ident {
213 $(
214 $(#[$inner:ident $($args:tt)*])*
215 const $Flag:tt;
216 )*
217 }
218 ) => {};
219}
220
221#[macro_export]
223#[doc(hidden)]
224#[cfg(feature = "bytemuck")]
225macro_rules! __impl_external_bitflags_bytemuck {
226 (
227 $InternalBitFlags:ident: $T:ty, $PublicBitFlags:ident {
228 $(
229 $(#[$inner:ident $($args:tt)*])*
230 const $Flag:tt;
231 )*
232 }
233 ) => {
234 unsafe impl $crate::__private::bytemuck::Pod for $InternalBitFlags where
237 $T: $crate::__private::bytemuck::Pod
238 {
239 }
240
241 unsafe impl $crate::__private::bytemuck::Zeroable for $InternalBitFlags where
244 $T: $crate::__private::bytemuck::Zeroable
245 {
246 }
247 };
248}
249
250#[macro_export]
251#[doc(hidden)]
252#[cfg(not(feature = "bytemuck"))]
253macro_rules! __impl_external_bitflags_bytemuck {
254 (
255 $InternalBitFlags:ident: $T:ty, $PublicBitFlags:ident {
256 $(
257 $(#[$inner:ident $($args:tt)*])*
258 const $Flag:tt;
259 )*
260 }
261 ) => {};
262}