1 //
2 // Copyright 2020 Signal Messenger, LLC.
3 // SPDX-License-Identifier: AGPL-3.0-only
4 //
5 
6 use neon::prelude::*;
7 
8 /// The result of a JavaScript promise: a success value or a failure value.
9 pub type JsPromiseResult<'a> = Result<Handle<'a, JsValue>, Handle<'a, JsValue>>;
10 
11 /// A trait to lift the cases of Result into types, to be used as generic arguments.
12 pub(crate) trait JsPromiseResultConstructor {
make(value: Handle<JsValue>) -> JsPromiseResult13     fn make(value: Handle<JsValue>) -> JsPromiseResult;
14 }
15 
16 /// A constructor for [Result::Ok].
17 pub(crate) struct JsFulfilledResult;
18 
19 impl JsPromiseResultConstructor for JsFulfilledResult {
make(value: Handle<JsValue>) -> JsPromiseResult20     fn make(value: Handle<JsValue>) -> JsPromiseResult {
21         Ok(value)
22     }
23 }
24 
25 /// A constructor for [Result::Err].
26 pub(crate) struct JsRejectedResult;
27 
28 impl JsPromiseResultConstructor for JsRejectedResult {
make(value: Handle<JsValue>) -> JsPromiseResult29     fn make(value: Handle<JsValue>) -> JsPromiseResult {
30         Err(value)
31     }
32 }
33