1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
/// Indicates that a certain type can be sent as an actor message. /// /// - Must be UnwindSafe because messages should not hold shared mutable data or references. /// If you cheat on this your warranty is void. You shouldn't include Atomics or /// Mutexes/RwLocks either, even though these implement UnwindSafe. /// Mailboxes must be able to recover from panics inside the handler method. /// The trait bound has been removed because it is very inconsistently applied troughout /// the ecosystem which means one would have to wrap every message in AssertUnwindSafe. /// This fails the goal of actually detecting where a problem might be present, making /// the trait more or less useless. /// Also it is more a requirement of the implementation than of the interface, as /// some implementations might chose not to recover from panics. In that case there is no /// risk. `thespis_impl` in any case wraps your handlers in AssertUnwindSafe in order to /// recover and allow actor supervision. So if you use that, be sure to respect the /// directions given above. /// /// - Must be 'static because Messages should not hold references. /// - Must be Send because limitations in the Rust type system mean we would have to double /// out the entire interface to support `Send` vs not `Send` messages. // pub trait Message: 'static + Send { /// The type of response returned when using [Address::call](crate::Address::call). When the message is /// sent through [Address::send](futures-sink::SinkExt::send), no value will be returned. /// /// If you don't need a return value but you want to guarantee that the message has /// been processed you can specify `()` here and use [Address::call](crate::Address::call). // type Return: 'static + Send; }