command-executor 0.2.0

Command Executor thread pool
Documentation
use std::thread;
use std::time::Duration;

use command_executor::command::Command;
use command_executor::shutdown_mode::ShutdownMode;
use command_executor::thread_pool_builder::ThreadPoolBuilder;

struct ExampleCommand {
    payload: i32,
}

impl ExampleCommand {
    pub fn new(payload: i32) -> ExampleCommand {
        ExampleCommand {
            payload,
        }
    }
}

impl Command for ExampleCommand {
    fn execute(&self) -> Result<(), anyhow::Error> {
        println!("processing {} in {}", self.payload, thread::current().name().unwrap_or("unnamed"));
        thread::sleep(Duration::from_millis(10));
        Ok(())
    }
}

pub fn main() -> Result<(), anyhow::Error> {
    let mut thread_pool_builder = ThreadPoolBuilder::new();
    let mut tp = thread_pool_builder
        .with_name_str("example")
        .with_tasks(4)
        .with_queue_size(16)
        .with_shutdown_mode(ShutdownMode::CompletePending)
        .build()?;

    for i in 0..16 {
        tp.submit(Box::new(ExampleCommand::new(i)));
    }

    tp.shutdown();
    tp.join()
}