use error::*;
use std::any::Any;
use std::sync::RwLockReadGuard;
use util::Environment;
pub fn cast_this<'a>(this: &'a RwLockReadGuard<Option<Box<Any + Send + Sync>>>) -> Result<&'a Environment> {
if let Some(some) = this.as_ref() {
if let Some(some) = Any::downcast_ref(some.as_ref()) {
Ok(some)
} else {
Err(ErrorKind::EnvironmentIsIncorrectType.into())
}
} else {
Err(ErrorKind::EnvironmentNeverSet.into())
}
}