use std::sync::Arc;
use tokio::sync::Mutex;
use super::session::{SessionHandle, SubscriptionRegistry};
use crate::bridge::{NotificationCache, Translator, WorkspaceRoots};
use crate::config::{McpConfig, ProjectConfigStatus};
pub struct BridgeContext {
pub translator: Arc<Translator>,
pub notification_cache: Arc<Mutex<NotificationCache>>,
pub workspace_roots: WorkspaceRoots,
pub session: SessionHandle,
pub project_config_status: ProjectConfigStatus,
pub mcp: McpConfig,
}
impl BridgeContext {
#[must_use]
pub fn new(
translator: Arc<Translator>,
notification_cache: Arc<Mutex<NotificationCache>>,
workspace_roots: WorkspaceRoots,
subscription_registry: SubscriptionRegistry,
project_config_status: ProjectConfigStatus,
mcp: McpConfig,
) -> Self {
Self {
translator,
notification_cache,
workspace_roots,
session: SessionHandle::new(subscription_registry),
project_config_status,
mcp,
}
}
}
#[cfg(test)]
mod tests {
use super::*;
use crate::bridge::Translator;
#[test]
fn test_bridge_context_creation() {
let translator = Arc::new(Translator::new());
let notification_cache = Arc::new(Mutex::new(NotificationCache::new()));
let workspace_roots = WorkspaceRoots::default();
let subscription_registry = SubscriptionRegistry::new();
let context = BridgeContext::new(
translator,
notification_cache,
workspace_roots,
subscription_registry,
ProjectConfigStatus::NotIgnored,
McpConfig::default(),
);
assert_eq!(Arc::strong_count(&context.translator), 1);
}
}