1 unstable release
0.1.0 | Jun 12, 2024 |
---|
#475 in Build Utils
10KB
109 lines
attr-bounds
An attribute macro to stipulate bounds.
The attribute applies bounds to struct
s, enum
s, union
s, trait
s, fn
s, and impl
blocks.
use attr_bounds::bounds;
#[bounds(T: Copy)]
pub struct Wrapper<T>(T);
let var = Wrapper(42);
Usage notes
Basically, the attribute is designed to be used for conditional compilation and otherwise you will not need the attribute.
use attr_bounds::bounds;
#[cfg(feature = "unstable_feature_a")]
pub trait UnstableA {}
#[cfg(feature = "unstable_feature_b")]
pub trait UnstableB {}
#[cfg_attr(feature = "unstable_feature_a", bounds(Self: UnstableA))]
#[cfg_attr(feature = "unstable_feature_b", bounds(Self: UnstableB))]
pub trait Trait {}
#[cfg(feature = "unstable_feature_a")]
impl UnstableA for () {}
#[cfg(feature = "unstable_feature_b")]
impl UnstableB for () {}
impl Trait for () {}
lib.rs
:
An attribute macro to stipulate bounds.
The attribute applies bounds to struct
s, enum
s, union
s, trait
s, fn
s, associated type
s, and impl
blocks.
use attr_bounds::bounds;
#[bounds(T: Copy)]
pub struct Wrapper<T>(T);
let var = Wrapper(42);
use attr_bounds::bounds;
#[bounds(T: Copy)]
pub struct Wrapper<T>(T);
let var = Wrapper(Vec::<i32>::new());
// ^^^^^^^^^^^^^^^^^ the trait `Copy` is not implemented for `Vec<i32>`
Usage notes
Basically, the attribute is designed to be used for conditional compilation and otherwise you will not need the attribute.
use attr_bounds::bounds;
#[cfg(feature = "unstable_feature_a")]
pub trait UnstableA {}
#[cfg(feature = "unstable_feature_b")]
pub trait UnstableB {}
#[cfg_attr(feature = "unstable_feature_a", bounds(Self: UnstableA))]
#[cfg_attr(feature = "unstable_feature_b", bounds(Self: UnstableB))]
pub trait Trait {}
#[cfg(feature = "unstable_feature_a")]
impl UnstableA for () {}
#[cfg(feature = "unstable_feature_b")]
impl UnstableB for () {}
impl Trait for () {}
Dependencies
~240–680KB
~16K SLoC