use uuid::Uuid;
use crate::__sealed::Sealed;
use crate::function::{DbConn, ForgeDb};
pub trait HandlerContext: Sealed {
fn db(&self) -> ForgeDb;
fn db_conn(&self) -> DbConn<'_>;
}
pub trait AuthenticatedContext: HandlerContext {
fn user_id(&self) -> crate::error::Result<Uuid>;
fn tenant_id(&self) -> Option<Uuid>;
}
impl HandlerContext for crate::function::QueryContext {
fn db(&self) -> ForgeDb {
self.db()
}
fn db_conn(&self) -> DbConn<'_> {
self.db_conn()
}
}
impl HandlerContext for crate::function::MutationContext {
fn db(&self) -> ForgeDb {
crate::function::ForgeDb::from_pool(self.bypass_pool())
}
fn db_conn(&self) -> DbConn<'_> {
self.db_conn()
}
}
impl HandlerContext for crate::job::JobContext {
fn db(&self) -> ForgeDb {
self.db()
}
fn db_conn(&self) -> DbConn<'_> {
self.db_conn()
}
}
impl HandlerContext for crate::cron::CronContext {
fn db(&self) -> ForgeDb {
self.db()
}
fn db_conn(&self) -> DbConn<'_> {
self.db_conn()
}
}
impl HandlerContext for crate::daemon::DaemonContext {
fn db(&self) -> ForgeDb {
self.db()
}
fn db_conn(&self) -> DbConn<'_> {
self.db_conn()
}
}
impl HandlerContext for crate::webhook::WebhookContext {
fn db(&self) -> ForgeDb {
self.db()
}
fn db_conn(&self) -> DbConn<'_> {
self.db_conn()
}
}
impl HandlerContext for crate::workflow::WorkflowContext {
fn db(&self) -> ForgeDb {
self.db()
}
fn db_conn(&self) -> DbConn<'_> {
self.db_conn()
}
}
impl HandlerContext for crate::mcp::McpToolContext {
fn db(&self) -> ForgeDb {
self.db()
}
fn db_conn(&self) -> DbConn<'_> {
self.db_conn()
}
}
impl AuthenticatedContext for crate::function::QueryContext {
fn user_id(&self) -> crate::error::Result<Uuid> {
self.user_id()
}
fn tenant_id(&self) -> Option<Uuid> {
self.tenant_id()
}
}
impl AuthenticatedContext for crate::function::MutationContext {
fn user_id(&self) -> crate::error::Result<Uuid> {
self.user_id()
}
fn tenant_id(&self) -> Option<Uuid> {
self.tenant_id()
}
}
impl AuthenticatedContext for crate::mcp::McpToolContext {
fn user_id(&self) -> crate::error::Result<Uuid> {
self.user_id()
}
fn tenant_id(&self) -> Option<Uuid> {
self.tenant_id()
}
}
impl Sealed for crate::function::QueryContext {}
impl Sealed for crate::function::MutationContext {}
impl Sealed for crate::job::JobContext {}
impl Sealed for crate::cron::CronContext {}
impl Sealed for crate::daemon::DaemonContext {}
impl Sealed for crate::webhook::WebhookContext {}
impl Sealed for crate::workflow::WorkflowContext {}
impl Sealed for crate::mcp::McpToolContext {}