#![warn(clippy::pedantic, missing_docs)]
#![allow(clippy::module_name_repetitions)]
use async_trait::async_trait;
use ora_common::task::{TaskDataFormat, TaskDefinition, WorkerSelector};
use tokio_util::sync::CancellationToken;
use uuid::Uuid;
pub mod worker;
pub mod store;
#[derive(Debug, Clone)]
pub struct TaskContext {
task_id: Uuid,
cancellation: CancellationToken,
}
impl TaskContext {
#[must_use]
#[inline]
pub const fn task_id(&self) -> Uuid {
self.task_id
}
#[must_use]
pub fn is_cancelled(&self) -> bool {
self.cancellation.is_cancelled()
}
pub async fn cancelled(&self) {
self.cancellation.cancelled().await;
}
}
#[async_trait]
pub trait RawHandler {
fn selector(&self) -> &WorkerSelector;
fn output_format(&self) -> TaskDataFormat;
async fn run(&self, context: TaskContext, task: TaskDefinition) -> eyre::Result<Vec<u8>>;
}
#[doc(hidden)]
pub mod _private {
use tokio_util::sync::CancellationToken;
use uuid::Uuid;
use crate::TaskContext;
#[must_use]
pub fn new_context(task_id: Uuid, cancellation: CancellationToken) -> TaskContext {
TaskContext {
task_id,
cancellation,
}
}
}