use arc_handle::arc_handle;
#[arc_handle]
pub trait Worker {
fn name(&self) -> &str;
fn greet(&self) -> String {
format!("Hello from {}", self.name())
}
}
struct DefaultWorker;
impl WorkerImpl for DefaultWorker {
fn name(&self) -> &str {
"Rob"
}
}
struct CustomWorker;
impl WorkerImpl for CustomWorker {
fn name(&self) -> &str {
"Cust"
}
fn greet(&self) -> String {
format!("Greetings, {} here", self.name())
}
}
fn main() {
let handle = Worker::new(DefaultWorker);
assert_eq!(handle.name(), "Rob");
assert_eq!(handle.greet(), "Hello from Rob");
let handle = Worker::new(CustomWorker);
assert_eq!(handle.name(), "Cust");
assert_eq!(handle.greet(), "Greetings, Cust here");
}