use std::sync::Arc;
use crate::{
core::capability::{
GraphQuerying, Querying, RegistryScoped, Reporting, RequestScoped, Searching, ServerScoped,
Viewing,
},
request::RequestContext,
server::MykoServerContext,
store::StoreRegistry,
};
#[derive(Clone)]
pub struct ViewContext {
pub req: Arc<RequestContext>,
pub(crate) registry: Arc<StoreRegistry>,
pub(crate) server_ctx: Arc<MykoServerContext>,
}
impl ViewContext {
#[must_use]
pub const fn new(
req: Arc<RequestContext>,
registry: Arc<StoreRegistry>,
server_ctx: Arc<MykoServerContext>,
) -> Self {
Self {
req,
registry,
server_ctx,
}
}
}
impl crate::core::capability::sealed::Sealed for ViewContext {}
impl RequestScoped for ViewContext {
fn __request(&self) -> &Arc<RequestContext> {
&self.req
}
}
impl RegistryScoped for ViewContext {
fn __registry(&self) -> &Arc<StoreRegistry> {
&self.registry
}
}
impl ServerScoped for ViewContext {
fn __server_ctx(&self) -> &Arc<MykoServerContext> {
&self.server_ctx
}
}
impl Querying for ViewContext {}
impl GraphQuerying for ViewContext {}
impl Searching for ViewContext {}
impl Reporting for ViewContext {}
impl Viewing for ViewContext {}
#[derive(Clone)]
pub struct ViewBuildContext {
pub view_context: Arc<ViewContext>,
}
impl ViewBuildContext {
#[must_use]
pub const fn new(view_context: Arc<ViewContext>) -> Self {
Self { view_context }
}
}
impl crate::core::capability::sealed::Sealed for ViewBuildContext {}
impl RequestScoped for ViewBuildContext {
fn __request(&self) -> &Arc<RequestContext> {
&self.view_context.req
}
}
impl RegistryScoped for ViewBuildContext {
fn __registry(&self) -> &Arc<StoreRegistry> {
&self.view_context.registry
}
}
impl ServerScoped for ViewBuildContext {
fn __server_ctx(&self) -> &Arc<MykoServerContext> {
&self.view_context.server_ctx
}
}
impl Querying for ViewBuildContext {}
impl GraphQuerying for ViewBuildContext {}
impl Reporting for ViewBuildContext {}
impl Searching for ViewBuildContext {}
impl Viewing for ViewBuildContext {}