use crate::{error::Error, shared::SseSessionRegistry, types::Message};
use dashmap::DashMap;
use std::sync::Arc;
use tokio::sync::{mpsc, oneshot};
pub(crate) type RequestMap = Arc<DashMap<crate::types::RequestId, oneshot::Sender<Message>>>;
#[derive(Clone, Debug)]
pub struct HttpContext {
pub(crate) addr: Arc<str>,
pub(crate) endpoint: Arc<str>,
pub(crate) pending: RequestMap,
pub(crate) sse_registry: Arc<SseSessionRegistry>,
pub(crate) inbound_tx: mpsc::Sender<Result<Message, Error>>,
pub(crate) sse_live_queue_capacity: usize,
pub(crate) sse_log_queue_capacity: usize,
#[cfg(feature = "server-oauth")]
pub(crate) oauth: Option<super::oauth::OAuthResource>,
}
impl HttpContext {
pub fn addr(&self) -> &str {
&self.addr
}
pub fn endpoint(&self) -> &str {
&self.endpoint
}
#[cfg(feature = "server-oauth")]
pub fn oauth_metadata_path(&self) -> Option<&str> {
self.oauth.as_ref().map(|o| &*o.metadata_path)
}
#[cfg(feature = "server-oauth")]
pub fn oauth_metadata_url(&self) -> Option<&str> {
self.oauth.as_ref().map(|o| &*o.metadata_url)
}
#[cfg(feature = "server-oauth")]
pub fn oauth_resource(&self) -> Option<&str> {
self.oauth.as_ref().map(|o| &*o.resource)
}
}