poolter 0.1.0

Thread Pool implementation for Rust using JavaScript Promise like functional syntax
Documentation
#![allow(dead_code)]

extern crate num_cpus;
use std::thread;
use service::{PoolService, Callback};
use std::sync::mpsc::Sender;

pub struct PoolTer {
    service_channels: Vec<Sender<Callback>>,
    channel_index: usize
}

pub struct ExecChan {
    channel: Sender<Callback>
}

impl PoolTer {
    pub fn init() -> PoolTer {
        let mut poolter = PoolTer{
            service_channels: vec![],
            channel_index: 0
        };

        for _ in 0..num_cpus::get() {
            let sv = PoolService::new();
            poolter.service_channels.push(sv.channel());
            thread::spawn(move || {
                sv.listen();
            });
        }

        poolter
    }

    pub fn exec(&mut self, cb: Callback) -> ExecChan {
        if self.channel_index >= self.service_channels.len() {
            self.channel_index = 0;
        }

        let chan = self.service_channels[self.channel_index].clone();
        self.channel_index += 1;
        let _ = chan.send(cb);
        ExecChan {
            channel: chan
        }
    }
}


impl ExecChan {
    pub fn then(&self, cb: Callback) -> ExecChan {
        let _ = self.channel.send(cb);
        ExecChan {
            channel: self.channel.clone()
        }
    }
}