use super::ExecutionContext;
use crate::{BoxFuture, Result};
use std::sync::Arc;
pub trait Guard: Send + Sync + 'static {
fn can_activate(&self, context: ExecutionContext) -> BoxFuture<'static, Result<bool>>;
}
impl<F, Fut> Guard for F
where
F: Fn(ExecutionContext) -> Fut + Send + Sync + 'static,
Fut: std::future::Future<Output = Result<bool>> + Send + 'static,
{
fn can_activate(&self, context: ExecutionContext) -> BoxFuture<'static, Result<bool>> {
Box::pin(self(context))
}
}
impl Guard for Arc<dyn Guard> {
fn can_activate(&self, context: ExecutionContext) -> BoxFuture<'static, Result<bool>> {
self.as_ref().can_activate(context)
}
}