src/tools.rs: Add AsAyn Trait
This commit is contained in:
parent
090ac9f79a
commit
2edc341b29
|
@ -15,7 +15,7 @@ use super::api_handler::*;
|
||||||
pub type BoxFut = Box<Future<Item = Response<Body>, Error = failure::Error> + Send>;
|
pub type BoxFut = Box<Future<Item = Response<Body>, Error = failure::Error> + Send>;
|
||||||
|
|
||||||
/// Abstract Interface for API methods to interact with the environment
|
/// 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
|
/// Use this to pass additional result data. It is up to the environment
|
||||||
/// how the data is used.
|
/// how the data is used.
|
||||||
|
|
12
src/tools.rs
12
src/tools.rs
|
@ -13,6 +13,7 @@ use std::path::Path;
|
||||||
use std::io::Read;
|
use std::io::Read;
|
||||||
use std::io::ErrorKind;
|
use std::io::ErrorKind;
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
|
use std::any::Any;
|
||||||
|
|
||||||
use std::os::unix::io::{AsRawFd, FromRawFd, IntoRawFd, RawFd};
|
use std::os::unix::io::{AsRawFd, FromRawFd, IntoRawFd, RawFd};
|
||||||
|
|
||||||
|
@ -711,3 +712,14 @@ pub fn pipe() -> Result<(Fd, Fd), Error> {
|
||||||
let (pin, pout) = nix::unistd::pipe2(nix::fcntl::OFlag::O_CLOEXEC)?;
|
let (pin, pout) = nix::unistd::pipe2(nix::fcntl::OFlag::O_CLOEXEC)?;
|
||||||
Ok((Fd(pin), Fd(pout)))
|
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 }
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue