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