pub mod thumbnail;
pub mod ocr;
pub mod describe;
pub mod extract_tags;
use async_trait::async_trait;
use sea_orm::DatabaseConnection;
use std::sync::Arc;
use crate::queue::{JobHandler, JobMessage, JobOutcome};
use crate::storage::LocalStorage;
use crate::Config;
/// Shared worker context passed to every handler.
#[derive(Clone)]
pub struct WorkerContext {
pub db: Arc<DatabaseConnection>,
pub storage: Arc<LocalStorage>,
pub config: Arc<Config>,
pub amqp: Arc<lapin::Connection>,
}
impl WorkerContext {
pub fn storage_abs(&self, relative: &str) -> std::path::PathBuf {
use crate::storage::Storage;
self.storage.absolute_path(relative)
}
}
/// Adapter so per-kind worker functions can plug into the generic JobHandler.
pub struct DispatchHandler {
pub ctx: WorkerContext,
pub run: fn(WorkerContext, JobMessage) -> futures_util::future::BoxFuture<'static, JobOutcome>,
}
#[async_trait]
impl JobHandler for DispatchHandler {
async fn handle(&self, msg: &JobMessage) -> JobOutcome {
(self.run)(self.ctx.clone(), msg.clone()).await
}
}
⭐
Log in to mark this repository.
1.1 KiB · text
History
1ce9641