1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
//! Types and traits for working with JavaScript exceptions. use std::fmt::{Display, Formatter, Result as FmtResult}; use handle::Handle; use types::Value; use context::Context; /// An error sentinel type used by `NeonResult` (and `JsResult`) to indicate that the JavaScript engine /// has entered into a throwing state. /// /// `Throw` deliberately does not implement `std::error::Error`, because it's generally not a good idea /// to chain JavaScript exceptions with other kinds of Rust errors, since entering into the throwing /// state means that the JavaScript engine is unavailable until the exception is handled. #[derive(Debug)] pub struct Throw; impl Display for Throw { fn fmt(&self, fmt: &mut Formatter) -> FmtResult { fmt.write_str("JavaScript Error") } } /// The result of a computation that might send the JS engine into a throwing state. pub type NeonResult<T> = Result<T, Throw>; /// The result of a computation that produces a JavaScript value and might send the JS engine into a throwing state. pub type JsResult<'b, T> = NeonResult<Handle<'b, T>>; /// An extension trait for `Result` values that can be converted into `JsResult` values by throwing a JavaScript /// exception in the error case. pub trait JsResultExt<'a, V: Value> { fn or_throw<'b, C: Context<'b>>(self, cx: &mut C) -> JsResult<'a, V>; }