use std::sync::Arc;
use async_trait::async_trait;
use super::{RealtimeError, SessionAuth, SocketServerHandle};
#[async_trait]
pub trait RealtimeTokenVerifier: Send + Sync + 'static {
async fn verify_token(&self, token: &str) -> Result<SessionAuth, RealtimeError>;
}
#[derive(Clone)]
pub struct SocketAppState {
pub handle: SocketServerHandle,
pub verifier: Arc<dyn RealtimeTokenVerifier>,
}
impl SocketAppState {
pub fn new<V>(handle: SocketServerHandle, verifier: V) -> Self
where
V: RealtimeTokenVerifier,
{
Self {
handle,
verifier: Arc::new(verifier),
}
}
pub fn new_with_shared_verifier(
handle: SocketServerHandle,
verifier: Arc<dyn RealtimeTokenVerifier>,
) -> Self {
Self { handle, verifier }
}
}