eck 0.0.4

A fast, simple file & folder encryption manager, written in Rust
use std::{
    marker::PhantomData,
    sync::{
        Arc, Mutex,
        mpsc::{Receiver, Sender},
    },
    thread::{self, JoinHandle},
};

use crate::{
    errors::EnkryptitError,
    parallelism::{EnkryptitJob, executable::EnkryptitExecutable},
};

pub struct EnkryptitWorker<T: EnkryptitExecutable> {
    _id: usize,
    _thread: JoinHandle<()>,
    _phantom: PhantomData<T>,
}

impl<T: EnkryptitExecutable + Send + 'static> EnkryptitWorker<T> {
    pub fn new(
        id: usize,
        receiver: Arc<Mutex<Receiver<EnkryptitJob<T>>>>,
        sender: Sender<Result<T::Output, EnkryptitError>>,
    ) -> Self {
        let thread = thread::spawn(move || {
            loop {
                let job = match receiver.lock().unwrap().recv() {
                    Ok(job) => job,
                    Err(_) => break,
                };

                let result = job.execute();

                if sender.send(result).is_err() {
                    break;
                }
            }
        });

        Self {
            _id: id,
            _thread: thread,
            _phantom: PhantomData,
        }
    }
}