src/tools.rs: Add AsAyn Trait

This commit is contained in:
Dietmar Maurer 2019-05-08 11:05:38 +02:00
parent 090ac9f79a
commit 2edc341b29
2 changed files with 13 additions and 1 deletions

View File

@ -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.

View File

@ -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 }
}