summaryrefslogtreecommitdiffstats
path: root/vendor/bitflags/src/external.rs
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/bitflags/src/external.rs')
-rw-r--r--vendor/bitflags/src/external.rs110
1 files changed, 56 insertions, 54 deletions
diff --git a/vendor/bitflags/src/external.rs b/vendor/bitflags/src/external.rs
index 6b07ff64d..94bd20004 100644
--- a/vendor/bitflags/src/external.rs
+++ b/vendor/bitflags/src/external.rs
@@ -5,7 +5,13 @@ How do I support a new external library?
Let's say we want to add support for `my_library`.
-First, we define a macro like so:
+First, we create a module under `external`, like `serde` with any specialized code.
+Ideally, any utilities in here should just work off the `Flags` trait and maybe a
+few other assumed bounds.
+
+Next, re-export the library from the `__private` module here.
+
+Next, define a macro like so:
```rust
#[macro_export(local_inner_macros)]
@@ -13,7 +19,7 @@ First, we define a macro like so:
#[cfg(feature = "serde")]
macro_rules! __impl_external_bitflags_my_library {
(
- $InternalBitFlags:ident: $T:ty {
+ $InternalBitFlags:ident: $T:ty, $PublicBitFlags:ident {
$(
$(#[$attr:ident $($args:tt)*])*
$Flag:ident;
@@ -29,7 +35,7 @@ macro_rules! __impl_external_bitflags_my_library {
#[cfg(not(feature = "my_library"))]
macro_rules! __impl_external_bitflags_my_library {
(
- $InternalBitFlags:ident: $T:ty {
+ $InternalBitFlags:ident: $T:ty, $PublicBitFlags:ident {
$(
$(#[$attr:ident $($args:tt)*])*
$Flag:ident;
@@ -49,7 +55,7 @@ Now, we add our macro call to the `__impl_external_bitflags` macro body:
```rust
__impl_external_bitflags_my_library! {
- $InternalBitFlags: $T {
+ $InternalBitFlags: $T, $PublicBitFlags {
$(
$(#[$attr $($args)*])*
$Flag;
@@ -57,34 +63,25 @@ __impl_external_bitflags_my_library! {
}
}
```
-
-What about libraries that _must_ be supported through `#[derive]`?
-
-In these cases, the attributes will need to be added to the `__declare_internal_bitflags` macro when
-the internal type is declared.
*/
-#[cfg(feature = "serde")]
-pub mod serde_support;
-#[cfg(feature = "serde")]
-pub use serde;
+pub(crate) mod __private {
+ #[cfg(feature = "serde")]
+ pub use serde;
-#[cfg(feature = "arbitrary")]
-pub mod arbitrary_support;
-#[cfg(feature = "arbitrary")]
-pub use arbitrary;
+ #[cfg(feature = "arbitrary")]
+ pub use arbitrary;
-#[cfg(feature = "bytemuck")]
-pub mod bytemuck_support;
-#[cfg(feature = "bytemuck")]
-pub use bytemuck;
+ #[cfg(feature = "bytemuck")]
+ pub use bytemuck;
+}
/// Implements traits from external libraries for the internal bitflags type.
#[macro_export(local_inner_macros)]
#[doc(hidden)]
macro_rules! __impl_external_bitflags {
(
- $InternalBitFlags:ident: $T:ty {
+ $InternalBitFlags:ident: $T:ty, $PublicBitFlags:ident {
$(
$(#[$attr:ident $($args:tt)*])*
$Flag:ident;
@@ -96,7 +93,7 @@ macro_rules! __impl_external_bitflags {
// and a no-op when it isn't
__impl_external_bitflags_serde! {
- $InternalBitFlags: $T {
+ $InternalBitFlags: $T, $PublicBitFlags {
$(
$(#[$attr $($args)*])*
$Flag;
@@ -105,7 +102,7 @@ macro_rules! __impl_external_bitflags {
}
__impl_external_bitflags_arbitrary! {
- $InternalBitFlags: $T {
+ $InternalBitFlags: $T, $PublicBitFlags {
$(
$(#[$attr $($args)*])*
$Flag;
@@ -114,7 +111,7 @@ macro_rules! __impl_external_bitflags {
}
__impl_external_bitflags_bytemuck! {
- $InternalBitFlags: $T {
+ $InternalBitFlags: $T, $PublicBitFlags {
$(
$(#[$attr $($args)*])*
$Flag;
@@ -124,13 +121,16 @@ macro_rules! __impl_external_bitflags {
};
}
+#[cfg(feature = "serde")]
+pub mod serde;
+
/// Implement `Serialize` and `Deserialize` for the internal bitflags type.
#[macro_export(local_inner_macros)]
#[doc(hidden)]
#[cfg(feature = "serde")]
macro_rules! __impl_external_bitflags_serde {
(
- $InternalBitFlags:ident: $T:ty {
+ $InternalBitFlags:ident: $T:ty, $PublicBitFlags:ident {
$(
$(#[$attr:ident $($args:tt)*])*
$Flag:ident;
@@ -142,8 +142,8 @@ macro_rules! __impl_external_bitflags_serde {
&self,
serializer: S,
) -> $crate::__private::core::result::Result<S::Ok, S::Error> {
- $crate::__private::serde_support::serialize_bits_default::<$InternalBitFlags, $T, S>(
- &self,
+ $crate::serde::serialize(
+ &$PublicBitFlags::from_bits_retain(self.bits()),
serializer,
)
}
@@ -153,9 +153,9 @@ macro_rules! __impl_external_bitflags_serde {
fn deserialize<D: $crate::__private::serde::Deserializer<'de>>(
deserializer: D,
) -> $crate::__private::core::result::Result<Self, D::Error> {
- $crate::__private::serde_support::deserialize_bits_default::<$InternalBitFlags, $T, D>(
- deserializer,
- )
+ let flags: $PublicBitFlags = $crate::serde::deserialize(deserializer)?;
+
+ Ok(flags.0)
}
}
};
@@ -166,7 +166,7 @@ macro_rules! __impl_external_bitflags_serde {
#[cfg(not(feature = "serde"))]
macro_rules! __impl_external_bitflags_serde {
(
- $InternalBitFlags:ident: $T:ty {
+ $InternalBitFlags:ident: $T:ty, $PublicBitFlags:ident {
$(
$(#[$attr:ident $($args:tt)*])*
$Flag:ident;
@@ -175,13 +175,19 @@ macro_rules! __impl_external_bitflags_serde {
) => {};
}
+#[cfg(feature = "arbitrary")]
+pub mod arbitrary;
+
+#[cfg(feature = "bytemuck")]
+mod bytemuck;
+
/// Implement `Arbitrary` for the internal bitflags type.
#[macro_export(local_inner_macros)]
#[doc(hidden)]
#[cfg(feature = "arbitrary")]
macro_rules! __impl_external_bitflags_arbitrary {
(
- $InternalBitFlags:ident: $T:ty {
+ $InternalBitFlags:ident: $T:ty, $PublicBitFlags:ident {
$(
$(#[$attr:ident $($args:tt)*])*
$Flag:ident;
@@ -192,7 +198,7 @@ macro_rules! __impl_external_bitflags_arbitrary {
fn arbitrary(
u: &mut $crate::__private::arbitrary::Unstructured<'a>,
) -> $crate::__private::arbitrary::Result<Self> {
- Self::from_bits(u.arbitrary()?).ok_or_else(|| $crate::__private::arbitrary::Error::IncorrectFormat)
+ $crate::arbitrary::arbitrary::<$PublicBitFlags>(u).map(|flags| flags.0)
}
}
};
@@ -203,12 +209,12 @@ macro_rules! __impl_external_bitflags_arbitrary {
#[cfg(not(feature = "arbitrary"))]
macro_rules! __impl_external_bitflags_arbitrary {
(
- $InternalBitFlags:ident: $T:ty {
- $(
- $(#[$attr:ident $($args:tt)*])*
- $Flag:ident;
- )*
- }
+ $InternalBitFlags:ident: $T:ty, $PublicBitFlags:ident {
+ $(
+ $(#[$attr:ident $($args:tt)*])*
+ $Flag:ident;
+ )*
+ }
) => {};
}
@@ -218,29 +224,25 @@ macro_rules! __impl_external_bitflags_arbitrary {
#[cfg(feature = "bytemuck")]
macro_rules! __impl_external_bitflags_bytemuck {
(
- $InternalBitFlags:ident: $T:ty {
+ $InternalBitFlags:ident: $T:ty, $PublicBitFlags:ident {
$(
$(#[$attr:ident $($args:tt)*])*
- $Flag:ident;
- )*
+ $Flag:ident;
+ )*
}
) => {
// SAFETY: $InternalBitFlags is guaranteed to have the same ABI as $T,
// and $T implements Pod
- unsafe impl $crate::__private::bytemuck::Pod for $InternalBitFlags
- where
- $T: $crate::__private::bytemuck::Pod,
+ unsafe impl $crate::__private::bytemuck::Pod for $InternalBitFlags where
+ $T: $crate::__private::bytemuck::Pod
{
-
}
// SAFETY: $InternalBitFlags is guaranteed to have the same ABI as $T,
// and $T implements Zeroable
- unsafe impl $crate::__private::bytemuck::Zeroable for $InternalBitFlags
- where
- $T: $crate::__private::bytemuck::Zeroable,
+ unsafe impl $crate::__private::bytemuck::Zeroable for $InternalBitFlags where
+ $T: $crate::__private::bytemuck::Zeroable
{
-
}
};
}
@@ -250,11 +252,11 @@ macro_rules! __impl_external_bitflags_bytemuck {
#[cfg(not(feature = "bytemuck"))]
macro_rules! __impl_external_bitflags_bytemuck {
(
- $InternalBitFlags:ident: $T:ty {
+ $InternalBitFlags:ident: $T:ty, $PublicBitFlags:ident {
$(
$(#[$attr:ident $($args:tt)*])*
- $Flag:ident;
- )*
+ $Flag:ident;
+ )*
}
) => {};
}