1pub mod batch_fetch;
6pub mod deps;
7pub mod error;
8pub mod retry;
9pub mod revalidate;
10pub mod scheduler;
11pub mod summarize;
12pub mod types;
13
14pub use deps::WorkerDeps;
15pub use error::TasksError;
16pub use scheduler::{NewTaskSender, Scheduler};
17pub use types::{
18 BatchFetchParams, BatchFetchResult, CoreEvent, RetryParams, RevalidateParams, TaskId, TaskKind,
19 TaskStatus,
20};
21
22use std::sync::Arc;
23use tokio::task::JoinSet;
24use tokio_util::sync::CancellationToken;
25
26use crate::storage::Db;
27
28pub struct DefaultSpawner {
30 pub deps: WorkerDeps,
31}
32
33impl scheduler::WorkerSpawner for DefaultSpawner {
34 fn spawn(
35 &self,
36 join_set: &mut JoinSet<()>,
37 db: Db,
38 task_id: TaskId,
39 kind: TaskKind,
40 cancel: CancellationToken,
41 ) {
42 match kind {
43 TaskKind::Summarize => {
44 join_set.spawn(summarize::run(db, task_id, cancel));
45 }
46 TaskKind::BatchFetch => {
47 join_set.spawn(batch_fetch::run(self.deps.clone(), db, task_id, cancel));
48 }
49 TaskKind::Retry => {
50 join_set.spawn(retry::run(self.deps.clone(), db, task_id, cancel));
51 }
52 TaskKind::Revalidate => {
53 join_set.spawn(revalidate::run(self.deps.clone(), db, task_id, cancel));
54 }
55 }
56 }
57}
58
59pub fn default_spawner(deps: WorkerDeps) -> Arc<dyn scheduler::WorkerSpawner> {
60 Arc::new(DefaultSpawner { deps })
61}