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);