Skip to main content

dope_manifold/client/session/policy/
start.rs

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