Detecting delivery failure using Ret

A Ret callback is guaranteed to always be called eventually, even if it is lost and dropped. So this means that if a call is made to an actor that terminates before the call is serviced, any Ret included in the arguments to that call will be dropped and a None response will be sent back.

So this means that any call where there needs to be an action if the message cannot be handled needs to include a Ret in its arguments, even if it is just a Ret<()> which is called with no arguments on successfully processing the call. The ret_to! macro supports this scenario.

However where it is not important to handle the case where the call is lost, the ret_some_to! macro unwraps the value and ignores the None (dropped) case.