1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#![doc = include_str!("../README.md")]

mod future;

use crate::future::Future;
pub use crate::future::{Getter, Setter};
use std::sync::{atomic::AtomicBool, Arc};

/// Creates a new future
pub fn new<T>() -> (Setter<T>, Getter<T>) {
    // Create the inner cell
    let future = Arc::new(Future::new());
    let cancelled = Arc::new(AtomicBool::default());

    // Create the setter/getter pair
    let setter = Setter::new(future.clone(), cancelled.clone());
    let getter = Getter::new(future, cancelled);
    (setter, getter)
}