use async_trait::async_trait;
use anyhow::Result;
#[async_trait]
pub trait QueryHandler<Q: Send>: Send + Sync {
type Output: Send;
async fn handle(&self, query: Q) -> Result<Self::Output>;
}
pub struct QueryBus;
impl QueryBus {
pub fn new() -> Self {
Self
}
pub async fn dispatch<Q, H>(&self, handler: &H, query: Q) -> Result<H::Output>
where
Q: Send,
H: QueryHandler<Q>,
{
handler.handle(query).await
}
}
impl Default for QueryBus {
fn default() -> Self {
Self::new()
}
}
mod access_log_queries;
mod bucket_queries;
mod content_hash_queries;
mod conversion_job_queries;
mod file_comment_queries;
mod file_lock_queries;
mod file_share_queries;
mod file_version_queries;
mod processing_job_queries;
mod stored_file_queries;
mod thumbnail_queries;
mod upload_session_queries;
mod user_quota_queries;
pub use access_log_queries::*;
pub use bucket_queries::*;
pub use content_hash_queries::*;
pub use conversion_job_queries::*;
pub use file_comment_queries::*;
pub use file_lock_queries::*;
pub use file_share_queries::*;
pub use file_version_queries::*;
pub use processing_job_queries::*;
pub use stored_file_queries::*;
pub use thumbnail_queries::*;
pub use upload_session_queries::*;
pub use user_quota_queries::*;