rate_ui/packages/
or_fail.rs

1use 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
17/*
18impl<T, E> Fail for Result<T, E> {
19    type Target = T;
20
21    fn or_fail(self, reason: &'static str) -> Result<Self::Target, Error> {
22        self.map_err(|_| Error::msg(reason))
23    }
24}
25*/
26
27pub trait Fasten {
28    type Target;
29    fn fasten(self) -> Result<Self::Target, Error>;
30}
31
32/*
33impl<T, E: ToString> Fasten for Result<T, E> {
34    type Target = T;
35
36    fn fasten(self) -> Result<Self::Target, Error> {
37        self.map_err(|err| Error::msg(err.to_string()))
38    }
39}
40*/
41
42impl<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}