2022-08-03 08:37:53 +00:00
|
|
|
use fang::async_trait;
|
2022-07-31 13:32:37 +00:00
|
|
|
use fang::asynk::async_queue::AsyncQueueable;
|
2022-08-03 08:37:53 +00:00
|
|
|
use fang::serde::{Deserialize, Serialize};
|
2022-07-31 13:32:37 +00:00
|
|
|
use fang::typetag;
|
|
|
|
use fang::AsyncRunnable;
|
2022-09-18 13:05:26 +00:00
|
|
|
use fang::FangError;
|
2022-07-31 13:32:37 +00:00
|
|
|
use std::time::Duration;
|
|
|
|
|
|
|
|
#[derive(Serialize, Deserialize)]
|
2022-08-03 08:37:53 +00:00
|
|
|
#[serde(crate = "fang::serde")]
|
2022-07-31 13:32:37 +00:00
|
|
|
pub struct MyTask {
|
|
|
|
pub number: u16,
|
|
|
|
}
|
|
|
|
|
|
|
|
impl MyTask {
|
|
|
|
pub fn new(number: u16) -> Self {
|
|
|
|
Self { number }
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-08-04 15:22:53 +00:00
|
|
|
#[derive(Serialize, Deserialize)]
|
|
|
|
#[serde(crate = "fang::serde")]
|
|
|
|
pub struct MyFailingTask {
|
|
|
|
pub number: u16,
|
|
|
|
}
|
|
|
|
|
|
|
|
impl MyFailingTask {
|
|
|
|
pub fn new(number: u16) -> Self {
|
|
|
|
Self { number }
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-07-31 13:32:37 +00:00
|
|
|
#[async_trait]
|
|
|
|
#[typetag::serde]
|
|
|
|
impl AsyncRunnable for MyTask {
|
2022-09-18 13:05:26 +00:00
|
|
|
async fn run(&self, queue: &mut dyn AsyncQueueable) -> Result<(), FangError> {
|
2022-08-04 15:22:53 +00:00
|
|
|
let new_task = MyTask::new(self.number + 1);
|
|
|
|
queue
|
|
|
|
.insert_task(&new_task as &dyn AsyncRunnable)
|
|
|
|
.await
|
|
|
|
.unwrap();
|
|
|
|
|
2022-08-03 08:37:53 +00:00
|
|
|
log::info!("the current number is {}", self.number);
|
2022-07-31 13:32:37 +00:00
|
|
|
tokio::time::sleep(Duration::from_secs(3)).await;
|
|
|
|
|
2022-08-04 15:22:53 +00:00
|
|
|
Ok(())
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
#[async_trait]
|
|
|
|
#[typetag::serde]
|
|
|
|
impl AsyncRunnable for MyFailingTask {
|
2022-09-18 13:05:26 +00:00
|
|
|
async fn run(&self, queue: &mut dyn AsyncQueueable) -> Result<(), FangError> {
|
2022-08-04 15:22:53 +00:00
|
|
|
let new_task = MyFailingTask::new(self.number + 1);
|
2022-07-31 15:15:00 +00:00
|
|
|
queue
|
|
|
|
.insert_task(&new_task as &dyn AsyncRunnable)
|
|
|
|
.await
|
|
|
|
.unwrap();
|
2022-07-31 13:32:37 +00:00
|
|
|
|
2022-08-04 15:22:53 +00:00
|
|
|
log::info!("the current number is {}", self.number);
|
|
|
|
tokio::time::sleep(Duration::from_secs(3)).await;
|
|
|
|
|
|
|
|
let b = true;
|
|
|
|
|
|
|
|
if b {
|
|
|
|
panic!("Hello!");
|
|
|
|
} else {
|
|
|
|
Ok(())
|
|
|
|
}
|
2022-07-31 13:32:37 +00:00
|
|
|
}
|
|
|
|
}
|