use std::fmt::{Debug, Display};
use std::future::Future;
use std::sync::Arc;
use crate::proto;
pub trait Facilitator {
type Error: Debug + Display;
fn verify(
&self,
request: &proto::VerifyRequest,
) -> impl Future<Output = Result<proto::VerifyResponse, Self::Error>> + Send;
fn settle(
&self,
request: &proto::SettleRequest,
) -> impl Future<Output = Result<proto::SettleResponse, Self::Error>> + Send;
#[allow(dead_code)] fn supported(
&self,
) -> impl Future<Output = Result<proto::SupportedResponse, Self::Error>> + Send;
}
impl<T: Facilitator> Facilitator for Arc<T> {
type Error = T::Error;
fn verify(
&self,
request: &proto::VerifyRequest,
) -> impl Future<Output = Result<proto::VerifyResponse, Self::Error>> + Send {
self.as_ref().verify(request)
}
fn settle(
&self,
request: &proto::SettleRequest,
) -> impl Future<Output = Result<proto::SettleResponse, Self::Error>> + Send {
self.as_ref().settle(request)
}
fn supported(
&self,
) -> impl Future<Output = Result<proto::SupportedResponse, Self::Error>> + Send {
self.as_ref().supported()
}
}