use asymmetric;
use options::Options;
pub struct AsymmetricBuilder {
opts: Options,
}
impl AsymmetricBuilder {
pub fn new() -> AsymmetricBuilder {
AsymmetricBuilder { opts: Default::default() }
}
pub fn name(mut self, name: String) -> AsymmetricBuilder {
self.opts.name = Some(name);
self
}
pub fn stack_size(mut self, size: usize) -> AsymmetricBuilder {
self.opts.stack_size = size;
self
}
pub fn spawn<F>(self, f: F) -> asymmetric::Handle
where F: FnOnce(&mut asymmetric::Coroutine, usize) -> usize + 'static
{
asymmetric::Coroutine::spawn_opts(f, self.opts)
}
}
#[cfg(test)]
mod test {
use super::*;
#[test]
fn test_asymmetric_builder_basic() {
let ret = AsymmetricBuilder::new()
.name("Test builder".to_string())
.spawn(move |me, _| me.yield_with(1))
.resume(1);
assert_eq!(1, ret.unwrap());
}
}