Struct deferred::deferred_manager::DeferredManager
source · pub struct DeferredManager<S> { /* private fields */ }
Expand description
Deferred execution manager used to store and resume.
Implementations§
source§impl<S> DeferredManager<S>
impl<S> DeferredManager<S>
sourcepub fn new() -> Self
pub fn new() -> Self
Creates new deferred execution manager.
Example
use std::rc::Rc;
use std::cell::Cell;
type RcBool = Rc<Cell<bool>>;
fn foo(v: RcBool) -> Deferred<Value> {
deferred!(value!(v), [
|c| {
let v = c.state().consume::<RcBool>();
v.set(true);
state!(value!(v))
}
])
}
let mut manager = DeferredManager::new();
let status = Rc::new(Cell::new(false));
let id = manager.run(foo(status.clone()));
assert_eq!(manager.has(id), true);
assert_eq!(status.get(), false);
manager.resume_all();
assert_eq!(manager.has(id), false);
assert_eq!(status.get(), true);
sourcepub fn run(&mut self, deferred: Deferred<S>) -> Id
pub fn run(&mut self, deferred: Deferred<S>) -> Id
Register deferred logic for later execution.
Arguments
deferred
- deferred execution unit.
Example
use std::rc::Rc;
use std::cell::Cell;
type RcBool = Rc<Cell<bool>>;
fn foo(v: RcBool) -> Deferred<Value> {
deferred!(value!(v), [
|c| {
let v = c.state().consume::<RcBool>();
v.set(true);
state!(value!(v))
}
])
}
let mut manager = DeferredManager::new();
let status = Rc::new(Cell::new(false));
let id = manager.run(foo(status.clone()));
assert_eq!(manager.has(id), true);
assert_eq!(status.get(), false);
manager.resume_all();
assert_eq!(manager.has(id), false);
assert_eq!(status.get(), true);
sourcepub fn cancel(&mut self, id: Id) -> bool
pub fn cancel(&mut self, id: Id) -> bool
Creates new deferred execution manager.
Arguments
id
- deferred execution id (got from callingrun()
method).
Example
use std::rc::Rc;
use std::cell::Cell;
type RcBool = Rc<Cell<bool>>;
fn foo(v: RcBool) -> Deferred<Value> {
deferred!(value!(v), [
|c| {
let v = c.state().consume::<RcBool>();
v.set(true);
state!(value!(v))
}
])
}
let mut manager = DeferredManager::new();
let status = Rc::new(Cell::new(false));
let id = manager.run(foo(status.clone()));
assert_eq!(manager.has(id), true);
assert_eq!(status.get(), false);
manager.cancel(id);
assert_eq!(manager.has(id), false);
assert_eq!(status.get(), false);
sourcepub fn resume(&mut self, id: Id) -> bool
pub fn resume(&mut self, id: Id) -> bool
Resume specified deferred execution unit by its id.
Arguments
id
- deferred execution id (got from callingrun()
method).
Example
use std::rc::Rc;
use std::cell::Cell;
type RcBool = Rc<Cell<bool>>;
fn foo(v: RcBool) -> Deferred<Value> {
deferred!(value!(v), [
|c| {
let v = c.state().consume::<RcBool>();
v.set(true);
state!(value!(v))
}
])
}
let mut manager = DeferredManager::new();
let status = Rc::new(Cell::new(false));
let id = manager.run(foo(status.clone()));
assert_eq!(manager.has(id), true);
assert_eq!(status.get(), false);
manager.resume(id);
assert_eq!(manager.has(id), false);
assert_eq!(status.get(), true);
sourcepub fn consume(&mut self, id: Id) -> Option<S>
pub fn consume(&mut self, id: Id) -> Option<S>
Consume specified deferred execution unit by its id and return its state.
Arguments
id
- deferred execution id (got from callingrun()
method).
Example
use std::rc::Rc;
use std::cell::Cell;
type RcBool = Rc<Cell<bool>>;
fn foo(v: RcBool) -> Deferred<Value> {
deferred!(value!(v), [
|c| {
let v = c.state().consume::<RcBool>();
v.set(true);
state!(value!(v))
}
])
}
let mut manager = DeferredManager::new();
let status = Rc::new(Cell::new(false));
let id = manager.run(foo(status.clone()));
assert_eq!(manager.has(id), true);
assert_eq!(status.get(), false);
manager.consume(id).unwrap();
assert_eq!(manager.has(id), false);
assert_eq!(status.get(), true);
sourcepub fn has(&self, id: Id) -> bool
pub fn has(&self, id: Id) -> bool
Tells if deferred execution unit with given id currently waits for later execution.
Arguments
id
- deferred execution id (got from callingrun()
method).
Example
use std::rc::Rc;
use std::cell::Cell;
type RcBool = Rc<Cell<bool>>;
fn foo(v: RcBool) -> Deferred<Value> {
deferred!(value!(v), [
|c| {
let v = c.state().consume::<RcBool>();
v.set(true);
state!(value!(v))
}
])
}
let mut manager = DeferredManager::new();
let status = Rc::new(Cell::new(false));
let id = manager.run(foo(status.clone()));
assert_eq!(manager.has(id), true);
manager.resume_all();
assert_eq!(manager.has(id), false);
sourcepub fn resume_all(&mut self)
pub fn resume_all(&mut self)
Resume sall deferred execution units.
Example
use std::rc::Rc;
use std::cell::Cell;
type RcBool = Rc<Cell<bool>>;
fn foo(v: RcBool) -> Deferred<Value> {
deferred!(value!(v), [
|c| {
let v = c.state().consume::<RcBool>();
v.set(true);
state!(value!(v))
}
])
}
let mut manager = DeferredManager::new();
let status = Rc::new(Cell::new(false));
let id = manager.run(foo(status.clone()));
assert_eq!(manager.has(id), true);
assert_eq!(status.get(), false);
manager.resume_all();
assert_eq!(manager.has(id), false);
assert_eq!(status.get(), true);
sourcepub fn consume_all(&mut self) -> Vec<(Id, S)>
pub fn consume_all(&mut self) -> Vec<(Id, S)>
Consume all deferred execution units and return vector of id-state pairs.
Example
use std::rc::Rc;
use std::cell::Cell;
type RcBool = Rc<Cell<bool>>;
fn foo(v: RcBool) -> Deferred<Value> {
deferred!(value!(v), [
|c| {
let v = c.state().consume::<RcBool>();
v.set(true);
state!(value!(v))
}
])
}
let mut manager = DeferredManager::new();
let status = Rc::new(Cell::new(false));
let id = manager.run(foo(status.clone()));
assert_eq!(manager.has(id), true);
assert_eq!(status.get(), false);
manager.consume_all();
assert_eq!(manager.has(id), false);
assert_eq!(status.get(), true);