rate_ui/packages/
or_fail.rs1use anyhow::Error;
2
3pub trait Fail {
4 type Target;
5
6 fn or_fail(self, reason: &'static str) -> Result<Self::Target, Error>;
7}
8
9impl<T> Fail for Option<T> {
10 type Target = T;
11
12 fn or_fail(self, reason: &'static str) -> Result<Self::Target, Error> {
13 self.ok_or_else(|| Error::msg(reason))
14 }
15}
16
17pub trait Fasten {
28 type Target;
29 fn fasten(self) -> Result<Self::Target, Error>;
30}
31
32impl<T> Fasten for Result<T, wasm_bindgen::JsValue> {
43 type Target = T;
44
45 fn fasten(self) -> Result<Self::Target, Error> {
46 self.map_err(|err| {
47 let reason = err
48 .as_string()
49 .unwrap_or_else(|| "unknown error inside wasm_bindgen::JsValue".into());
50 Error::msg(reason)
51 })
52 }
53}
54
55impl<T> Fasten for Result<T, js_sys::Object> {
56 type Target = T;
57
58 fn fasten(self) -> Result<Self::Target, Error> {
59 self.map_err(|err| {
60 let reason = err
61 .to_string()
62 .as_string()
63 .unwrap_or_else(|| "unknown error inside js_sys::Object".into());
64 Error::msg(reason)
65 })
66 }
67}