#![allow(clippy::expect_used, unused_qualifications, clippy::unused_async, clippy::print_stdout)]
mod common;
use bonsaidb::local::{
config::{Builder, StorageConfiguration},
AsyncDatabase,
};
use bonsaimq::{job_registry, CurrentJob, JobRegister, JobRunner, MessageQueueSchema};
use color_eyre::{eyre::eyre, Result};
async fn greet(mut job: CurrentJob) -> Result<()> {
let name: &'static str = job.context().ok_or_else(|| eyre!("context should be given"))?;
println!("Hello {name}!");
job.complete().await?;
Ok(())
}
job_registry!(JobRegistry, {
Greet: "greet" => greet,
});
#[tokio::main]
async fn main() -> Result<()> {
common::init();
let db_path = "context-example.bonsaidb";
let db = AsyncDatabase::open::<MessageQueueSchema>(StorageConfiguration::new(db_path)).await?;
let job_runner = JobRunner::new(db.clone()).set_context("cats").run::<JobRegistry>();
let job_id = JobRegistry::Greet.builder().spawn(&db).await?;
bonsaimq::await_job(job_id, 100, &db).await?;
job_runner.abort(); tokio::fs::remove_dir_all(db_path).await?;
Ok(())
}
#[test]
#[ntest::timeout(10000)]
fn example_context() {
main().expect("running main");
}