mirror of
https://github.com/denoland/deno.git
synced 2024-11-25 15:29:32 -05:00
fix(core): better "missing type" GothamState error (#10189)
Include the type name in the error message so you know what to look for.
This commit is contained in:
parent
353e79c796
commit
ad7f6d4510
1 changed files with 20 additions and 9 deletions
|
@ -4,6 +4,7 @@
|
||||||
// Copyright 2017 Gotham Project Developers. MIT license.
|
// Copyright 2017 Gotham Project Developers. MIT license.
|
||||||
|
|
||||||
use log::trace;
|
use log::trace;
|
||||||
|
use std::any::type_name;
|
||||||
use std::any::Any;
|
use std::any::Any;
|
||||||
use std::any::TypeId;
|
use std::any::TypeId;
|
||||||
use std::collections::BTreeMap;
|
use std::collections::BTreeMap;
|
||||||
|
@ -38,9 +39,7 @@ impl GothamState {
|
||||||
|
|
||||||
/// Borrows a value from the `GothamState` storage.
|
/// Borrows a value from the `GothamState` storage.
|
||||||
pub fn borrow<T: 'static>(&self) -> &T {
|
pub fn borrow<T: 'static>(&self) -> &T {
|
||||||
self
|
self.try_borrow().unwrap_or_else(|| missing::<T>())
|
||||||
.try_borrow()
|
|
||||||
.expect("required type is not present in GothamState container")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Tries to mutably borrow a value from the `GothamState` storage.
|
/// Tries to mutably borrow a value from the `GothamState` storage.
|
||||||
|
@ -52,9 +51,7 @@ impl GothamState {
|
||||||
|
|
||||||
/// Mutably borrows a value from the `GothamState` storage.
|
/// Mutably borrows a value from the `GothamState` storage.
|
||||||
pub fn borrow_mut<T: 'static>(&mut self) -> &mut T {
|
pub fn borrow_mut<T: 'static>(&mut self) -> &mut T {
|
||||||
self
|
self.try_borrow_mut().unwrap_or_else(|| missing::<T>())
|
||||||
.try_borrow_mut()
|
|
||||||
.expect("required type is not present in GothamState container")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Tries to move a value out of the `GothamState` storage and return ownership.
|
/// Tries to move a value out of the `GothamState` storage and return ownership.
|
||||||
|
@ -77,12 +74,17 @@ impl GothamState {
|
||||||
///
|
///
|
||||||
/// If a value of type `T` is not present in `GothamState`.
|
/// If a value of type `T` is not present in `GothamState`.
|
||||||
pub fn take<T: 'static>(&mut self) -> T {
|
pub fn take<T: 'static>(&mut self) -> T {
|
||||||
self
|
self.try_take().unwrap_or_else(|| missing::<T>())
|
||||||
.try_take()
|
|
||||||
.expect("required type is not present in GothamState container")
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn missing<T: 'static>() -> ! {
|
||||||
|
panic!(
|
||||||
|
"required type {} is not present in GothamState container",
|
||||||
|
type_name::<T>()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::GothamState;
|
use super::GothamState;
|
||||||
|
@ -179,4 +181,13 @@ mod tests {
|
||||||
assert!(state.try_take::<Alias1>().is_none());
|
assert!(state.try_take::<Alias1>().is_none());
|
||||||
assert!(state.try_take::<Alias2>().is_none());
|
assert!(state.try_take::<Alias2>().is_none());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
#[should_panic(
|
||||||
|
expected = "required type deno_core::gotham_state::tests::MyStruct is not present in GothamState container"
|
||||||
|
)]
|
||||||
|
fn missing() {
|
||||||
|
let state = GothamState::default();
|
||||||
|
let _ = state.borrow::<MyStruct>();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue