async-task-executor 0.1.2

A lightweight Rust library for building extensible asynchronous task executors, designed for handling large-scale multitasking in server environments.
Documentation
use std::error::Error;

use async_std::sync::Arc;
use async_taskex::{Response, SharedData, TaskExecutor, TaskHandler, TaskMessage};
use async_trait::async_trait;

pub struct ExampleData {}

impl SharedData for ExampleData {}

struct ExampleTaskHandler;

#[async_trait]
impl TaskHandler<ExampleData> for ExampleTaskHandler {
    async fn handle(
        &self,
        task_message: TaskMessage,
        _shared_data: Arc<ExampleData>,
    ) -> Result<Response, String> {
        println!(
            "Received - task name({}), message({})",
            task_message.task_name, task_message.payload
        );

        let mut result = task_message.payload.clone();
        result.push_str(" World!");

        Ok(Response {
            success: true,
            result: Some(result),
            error: None,
        })
    }
}

#[async_std::main]
async fn main() -> Result<(), Box<dyn Error>> {
    let shared_data = Arc::new(ExampleData {});
    let task_executor: TaskExecutor<ExampleData> = TaskExecutor::new(shared_data);

    let task_handler = ExampleTaskHandler {};

    task_executor
        .register("task name".to_string(), Arc::new(task_handler))
        .await;

    let response = task_executor
        .execute(TaskMessage {
            task_name: "task name".into(),
            payload: "Hello".into(),
        })
        .await?;

    if response.success {
        println!("Response - {}", response.result.unwrap());
    }

    Ok(())
}