4 releases
0.1.3 | Jan 10, 2024 |
---|---|
0.1.2 | Jan 10, 2024 |
0.1.1 | Jan 10, 2024 |
0.1.0 | Dec 21, 2023 |
#1286 in Rust patterns
35KB
974 lines
anonymous-trait
Anonymous trait implementation with capturing the environment
Example
trait Cat {
fn meow(&self) -> String;
fn set_name(&mut self, new: String);
async fn meow_async(&self) -> String;
}
#[tokio::main]
async fn main() {
let name = "mock";
#[anonymous_trait::anonymous_trait(let mut cat_mock = "default".into())]
impl Cat for String {
fn meow(&self) -> String {
name.to_string()
}
fn set_name(&mut self, new: String) {
*self = new;
}
async fn meow_async(&self) -> String {
"meow".to_string()
}
}
run(&mut cat_mock).await;
}
async fn run(cat: &mut impl Cat) {
println!("meow: {}, expected: mock", cat.meow());
cat.set_name("hi".to_string());
println!("meow_async: {}, expected: meow", cat.meow_async().await);
}
Dependencies
~240–690KB
~16K SLoC