portfu_core 0.1.0

Portfu Core Types and Definitions Library
Documentation
use async_trait::async_trait;
use http::Extensions;
use std::fmt::{Debug, Formatter};
use std::io::Error;
use std::sync::Arc;

#[derive(Debug)]
pub struct Task {
    pub name: String,
    pub task_fn: Arc<dyn TaskFn + Sync + Send>,
}

#[async_trait]
pub trait TaskFn {
    fn name(&self) -> &str;
    async fn run(&self, state: Extensions) -> Result<(), Error>;
}

impl Debug for (dyn TaskFn + Send + Sync + 'static) {
    fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
        f.write_str(self.name())
    }
}

#[async_trait]
impl TaskFn for Task {
    fn name(&self) -> &str {
        self.name.as_str()
    }

    async fn run(&self, state: Extensions) -> Result<(), Error> {
        self.task_fn.run(state).await
    }
}