use crate::registry::Jobs;
use origin_domain::JobId;
use tokio_util::sync::CancellationToken;
#[derive(Debug, Clone)]
pub struct JobContext {
id: JobId,
jobs: Jobs,
cancel: CancellationToken,
}
impl JobContext {
pub(crate) fn new(id: JobId, jobs: Jobs, cancel: CancellationToken) -> Self {
Self { id, jobs, cancel }
}
pub fn id(&self) -> &JobId {
&self.id
}
pub async fn progress(&self, current: u64, total: Option<u64>) {
self.jobs.report_progress(&self.id, current, total).await;
}
pub fn is_cancelled(&self) -> bool {
self.cancel.is_cancelled()
}
pub async fn cancelled(&self) {
self.cancel.cancelled().await;
}
}