From eb74f0ccf60a1e8dda1afe9a3be0e8dd4fd96f9f Mon Sep 17 00:00:00 2001 From: Matthijs Hofstra <thiezz@gmail.com> Date: Sat, 20 Jul 2013 03:02:38 +0200 Subject: [PATCH] Added a new method to extra::future (unwrap) + a test --- src/libextra/future.rs | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/libextra/future.rs b/src/libextra/future.rs index 2d3da5bb96d..d8f21b46013 100644 --- a/src/libextra/future.rs +++ b/src/libextra/future.rs @@ -60,6 +60,19 @@ impl<A:Clone> Future<A> { } } +impl<A> Future<A> { + /// Gets the value from this future, forcing evaluation. + pub fn unwrap(self) -> A { + let mut this = self; + this.get_ref(); + let state = replace(&mut this.state, Evaluating); + match state { + Forced(v) => v, + _ => fail!( "Logic error." ), + } + } +} + impl<A> Future<A> { pub fn get_ref<'a>(&'a mut self) -> &'a A { /*! @@ -179,6 +192,12 @@ mod test { assert_eq!(f.get(), ~"fail"); } + #[test] + fn test_interface_unwrap() { + let mut f = from_value(~"fail"); + assert_eq!(f.unwrap(), ~"fail"); + } + #[test] fn test_get_ref_method() { let mut f = from_value(22);