pub type BoxFut = Box<Future<Item = Response<Body>, Error = failure::Error> + Send>;
/// Abstract Interface for API methods to interact with the environment
-pub trait RpcEnvironment {
+pub trait RpcEnvironment: std::any::Any + crate::tools::AsAny + Send {
/// Use this to pass additional result data. It is up to the environment
/// how the data is used.
use std::io::Read;
use std::io::ErrorKind;
use std::time::Duration;
+use std::any::Any;
use std::os::unix::io::{AsRawFd, FromRawFd, IntoRawFd, RawFd};
let (pin, pout) = nix::unistd::pipe2(nix::fcntl::OFlag::O_CLOEXEC)?;
Ok((Fd(pin), Fd(pout)))
}
+
+/// An easy way to convert types to Any
+///
+/// Mostly useful to downcast trait objects (see RpcEnvironment).
+pub trait AsAny {
+ fn as_any(&self) -> &Any;
+}
+
+impl<T: Any> AsAny for T {
+ fn as_any(&self) -> &Any { self }
+}