use std::fmt::Debug;
use std::sync::Arc;
use uuid::Uuid;
use super::auth::{AuthContext, AuthDeny};
pub trait WebSocketConnectionPermit: Debug + Send + Sync {
fn id(&self) -> Uuid;
}
#[allow(clippy::result_large_err)]
pub trait WebSocketAdmissionProvider: Debug + Send + Sync {
fn reserve_connection(
&self,
context: &AuthContext,
) -> Result<Option<Arc<dyn WebSocketConnectionPermit>>, AuthDeny>;
fn refresh_connection(
&self,
current_permit: Option<Arc<dyn WebSocketConnectionPermit>>,
context: &AuthContext,
active_subscriptions: &[String],
) -> Result<Option<Arc<dyn WebSocketConnectionPermit>>, AuthDeny>;
fn add_subscription(&self, permit: Uuid, subscription_id: &str) -> Result<bool, AuthDeny>;
fn remove_subscription(&self, permit: Uuid, subscription_id: &str);
fn check_inbound_message(&self, permit: Uuid) -> Result<(), AuthDeny>;
fn check_egress(&self, permit: Uuid, bytes: usize) -> Result<(), AuthDeny>;
fn cleanup(&self) {}
}