1 unstable release
0.1.0 | Sep 3, 2024 |
---|
#1209 in Procedural macros
31,101 downloads per month
Used in 17 crates
(via fred)
14KB
189 lines
Procedural macros that conditionally change or remove Send
and Sync
bounds.
Examples
Item (function) Modification
extern crate fred_macros;
use fred_macros::rm_send_if;
use std::future::Future;
pub trait T1 {}
pub trait T2 {}
pub trait T3 {
/// Documentation tests.
#[rm_send_if(feature = "glommio")]
fn foo<A, B>(&self, _a: A, _b: B) -> impl Future<Output=()> + Send
where
A: T1 + Send,
B: T2 + Send,
{
async move { () }
}
}
This will expand to:
// ...
pub trait T3 {
/// Documentation tests.
#[cfg(feature = "glommio")]
fn foo<A, B>(&self, _a: A, _b: B) -> impl Future<Output=()>
where
A: T1,
B: T2,
{
async move { () }
}
/// Documentation tests.
#[cfg(not(feature = "glommio"))]
fn foo<A, B>(&self, _a: A, _b: B) -> impl Future<Output=()> + Send
where
A: T1 + Send,
B: T2 + Send,
{
async move { () }
}
}
Trait Modification
extern crate fred_macros;
use fred_macros::rm_send_if;
use std::future::Future;
trait T1 {}
trait T2 {}
/// Test trait documentation.
#[rm_send_if(feature = "glommio")]
pub trait T3: Clone + Send + Sync {
/// Test fn documentation
fn bar<A, B>(&self, _a: A, _b: B) -> impl Future<Output=()> + Send
where
A: T1 + Send,
B: T2 + Send + Sync,
{
async move { () }
}
}
This will expand to:
// ...
#[cfg(feature = "glommio")]
pub trait T3: Clone {
/// Test fn documentation
fn bar<A, B>(&self, _a: A, _b: B) -> impl Future<Output=()>
where
A: T1,
B: T2,
{
async move { () }
}
}
#[cfg(not(feature = "glommio"))]
pub trait T3: Clone + Send + Sync {
/// Test fn documentation
fn bar<A, B>(&self, _a: A, _b: B) -> impl Future<Output=()> + Send
where
A: T1 + Send,
B: T2 + Send + Sync,
{
async move { () }
}
}
Dependencies
~225–670KB
~16K SLoC