Skip to main content

dope_manifold/client/session/policy/
end.rs

1use dope_core::driver::route::{Identity, KeyTag};
2use dope_net::wire::{self, failure, terminal};
3use o3::base::cell::region;
4
5use crate::client::conn;
6
7/// Final typed sink for one established wire's terminal failure.
8pub trait Sink<
9    'w,
10    'd,
11    W: wire::Spec<TerminalFailure = M> + 'w,
12    ID: Identity = KeyTag<0>,
13    M = <W as wire::Spec>::TerminalFailure,
14>
15{
16    fn fail(
17        &self,
18        conn: conn::Id<'d, ID>,
19        cause: terminal::Error<'w, W>,
20        region: &mut region::Token<region::Identity<'d>>,
21    );
22}
23
24impl<'w, 'd, W, P: ?Sized, ID: Identity> Sink<'w, 'd, W, ID, failure::Never> for P
25where
26    W: wire::Spec<TerminalFailure = failure::Never> + 'w,
27{
28    fn fail(
29        &self,
30        _: conn::Id<'d, ID>,
31        cause: terminal::Error<'w, W>,
32        _: &mut region::Token<region::Identity<'d>>,
33    ) {
34        cause.eliminate()
35    }
36}