simboli_thread 0.0.2

Thread Pool Management
Documentation
## Create dependencies and use them
```rust
use std::{thread::sleep, time::Duration};

use simboli_thread::{
    ArrTaskDependenciesTrait, OutputTrait, SimboliThread, TaskTrait, TaskWithDependenciesTrait,
};

enum MyOutput {
    Number(i32),
    String(String),
    None,
}

impl OutputTrait for MyOutput {}

enum MyTask {
    Exec(fn() -> MyOutput),
    ExecWithDependencies(
        fn(dependencies: &'static Vec<simboli_thread::Waiting<MyOutput>>) -> MyOutput,
    ),
}

impl TaskTrait<MyOutput> for MyTask {
    fn exec(&self) -> MyOutput {
        match self {
            MyTask::Exec(f) => f(),
            _ => MyOutput::None,
        }
    }
}

impl TaskWithDependenciesTrait<MyOutput> for MyTask {
    fn exec(&self, dependencies: &'static Vec<simboli_thread::Waiting<MyOutput>>) -> MyOutput {
        match self {
            MyTask::ExecWithDependencies(f) => f(dependencies),
            _ => MyOutput::None,
        }
    }
}

impl ArrTaskDependenciesTrait<MyTask, MyOutput, 2> for [MyTask; 2] {
    fn task_list(self) -> [MyTask; 2] {
        self
    }
}

fn main() {
    let thread_pool = SimboliThread::<MyTask, MyTask, MyOutput, 4, 64>::init();

    let my_dependencies = [
        MyTask::Exec(|| {
            sleep(Duration::from_millis(250));
            println!("task 1 done");
            MyOutput::Number(10)
        }),
        MyTask::Exec(|| {
            sleep(Duration::from_millis(50));
            println!("task 2 done");
            MyOutput::Number(20)
        }),
    ];

    let dependencies = thread_pool.spawn_task_dependencies(my_dependencies);

    // task will be executed after dependencies have been completed
    thread_pool.spawn_task_with_dependencies(
        MyTask::ExecWithDependencies(|dependencies| {
            // access dependencies
            let task_1 = dependencies[0].get().unwrap();
            let task_2 = dependencies[1].get().unwrap();

            println!("task 3 done");
            MyOutput::Number(30)
        }),
        &dependencies,
    );

    thread_pool.join();
}
```