use super::future::{Future, WrappedFuture};
use crate::common::tsafe::TSafe;
use std::sync::{Arc, Mutex};
pub trait Promise<V: Send + Clone, E: Send + Clone> {
fn try_complete(&mut self, result: Result<V, E>) -> bool;
fn complete(&mut self, result: Result<V, E>) -> bool {
if self.try_complete(result) {
true
} else {
panic!("Promise already completed!");
}
}
fn success(&mut self, value: V) -> bool {
self.complete(Ok(value))
}
fn failure(&mut self, cause: E) -> bool {
self.complete(Err(cause))
}
fn future(&self) -> WrappedFuture<V, E>;
}