use std::sync::Arc;
use fraiseql_core::security::SecurityContext;
use fraiseql_error::Result;
use crate::{host::live::LiveHostContext, types::EventPayload};
pub trait HostContextFactory: Send + Sync {
fn create(
&self,
security_context: SecurityContext,
event: EventPayload,
) -> Result<Arc<dyn Send + Sync>>;
}
pub struct LiveHostContextFactory {
}
impl LiveHostContextFactory {
#[must_use]
pub const fn new() -> Self {
Self {}
}
}
impl Default for LiveHostContextFactory {
fn default() -> Self {
Self::new()
}
}
impl HostContextFactory for LiveHostContextFactory {
fn create(
&self,
security_context: SecurityContext,
event: EventPayload,
) -> Result<Arc<dyn Send + Sync>> {
let mut ctx = LiveHostContext::new(event, crate::host::live::HostContextConfig::default());
ctx.security_context = security_context;
Ok(Arc::new(ctx))
}
}
#[cfg(test)]
mod tests;