1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
//Implementing our Threadpool

pub struct ThreadPool;

impl ThreadPool {
    ///Creates a new ThreadPool
    ///
    ///Panics if the number of threads is 0.
    ///
    /// # Panics
    ///
    /// The `new` function will panic if the size is zero.
    pub fn new(size: usize) -> ThreadPool {
        assert!(size > 0);
        ThreadPool
    }
    
    //This function executes the closure (F) it receives
    //It is modeled after thread::execute. 
    //<F> since F is a generic 
    pub fn execute<F>(&self, f: F)
    where
        //Trait binds : F is an FnOnce(), it is executed one time.
        //It has the Send trait : used to transfer the closure from on thread to another. (wtf, Rust ?)
        //'static : we don't know how long the thread will execute.
        F: FnOnce() + Send + 'static,
        {
            //...
        }
}