arc-handle 1.2.0

Proc macro for generating Arc-based handle wrappers for traits
Documentation
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() {
    // Default body is used when the implementor does not override it.
    let handle = Worker::new(DefaultWorker);
    assert_eq!(handle.name(), "Rob");
    assert_eq!(handle.greet(), "Hello from Rob");

    // The handle dispatches to the implementor's override when present.
    let handle = Worker::new(CustomWorker);
    assert_eq!(handle.name(), "Cust");
    assert_eq!(handle.greet(), "Greetings, Cust here");
}