use async_trait::async_trait;
use crate::{context::AppContext, error::AppError};
#[async_trait]
pub trait CommandBus: Send + Sync {
async fn dispatch<C, R>(&self, ctx: &AppContext, cmd: C) -> Result<R, AppError>
where
C: Send + 'static,
R: Send + 'static;
}