Expand description
negate
is a simple attribute macro that negates a given function.
-
[negate]
Given a function of the form
is_*
that returns a boolean value, the macro will create ais_not_*
that negates the given function.use negate::negate; #[negate] pub fn is_even(x: i32) -> bool { x % 2 == 0 } // The `is_not_even` function was generated! assert!(is_not_even(5));
For reference, this is how the generated function looks like:
ⓘ/// This is an automatically generated function that denies [`is_even`]. /// Consult the original function for more information. pub fn is_not_even(x: i32) -> bool { !is_even(x) }
-
[negate(name = "...")]
Using the
name
attribute allows you to set the name of the generated function. This also allows the usage of the [negate
] macro with functions that do not start withis_
.
use negate::negate;
use std::collections::HashMap;
pub enum TaskState {
Ready,
Finished,
}
pub struct Reactor {
tasks: HashMap<usize, TaskState>,
}
impl Reactor {
// Generates the `is_finished` function
#[negate(name = "is_finished")]
pub fn is_ready(&self, id: usize) -> bool {
self.tasks.get(&id).map(|state| match state {
TaskState::Ready => true,
_ => false,
}).unwrap_or(false)
}
}
[negate(docs = "...")]
Using the
docs
attribute allows you to customize the doc-string of the generated function
use negate::negate;
#[negate(name = "is_odd", docs = "returns true if the given number is odd")]
fn is_even(x: i32) -> bool {
x % 2 == 0
}
assert!(is_odd(5));