aboutsummaryrefslogtreecommitdiff
path: root/src/util.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/util.rs')
-rw-r--r--src/util.rs29
1 files changed, 27 insertions, 2 deletions
diff --git a/src/util.rs b/src/util.rs
index 5c9ffb8..d96c4f4 100644
--- a/src/util.rs
+++ b/src/util.rs
@@ -1,13 +1,38 @@
macro_rules! trait_alias {
(
$(#[$attr: meta])*
- $visibility: vis $name: ident$(<$($type_param: ident),*>)?$(: $first_bound: tt $(+ $bound: tt)*)?;
+ $visibility: vis $name: ident$(<$($type_param: ident),*>)?
+ $(: $first_bound: tt $(+ $bound: tt)*)?;
) => {
$(#[$attr])*
$visibility trait $name $(<$($type_param),*>)? $(: $first_bound $(+ $bound)*)? {}
- impl<T: $($first_bound $(+ $bound)*)?, $($($type_param),*)?> $name$(<$($type_param),*>)? for T {}
+ impl<
+ T: $($first_bound $(+ $bound)*)?,
+ $($($type_param),*)?
+ > $name$(<$($type_param),*>)? for T {}
};
+
+ // Rule where the trait bounds will only be applied if the specified feature is enabled
+ (
+ bounds_when_feature = $bounds_feature: literal,
+ $(#[$attr: meta])*
+ $visibility: vis $name: ident$(<$($type_param: ident),*>)?
+ $(: $first_bound: tt $(+ $bound: tt)*)?;
+ ) => {
+ #[cfg(feature = $bounds_feature)]
+ trait_alias! {
+ $(#[$attr])*
+ $visibility $name$(<$($type_param),*>)?
+ $(: $first_bound $(+ $bound)*)?;
+ }
+
+ #[cfg(not(feature = $bounds_feature))]
+ trait_alias! {
+ $(#[$attr])*
+ $visibility $name$(<$($type_param),*>)?;
+ }
+ }
}
macro_rules! feature_alternate {