aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe-external-packages/src/react/promise/promise_interface.rs
blob: 5836945ab9e339f8a2084cbd65aa4b2688b10562 (plain)
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
34
35
36
37
38
use shirabe_php_shim::PhpMixed;

pub trait PromiseInterface {
    fn then(
        &self,
        on_fulfilled: Option<Box<dyn FnOnce(Option<PhpMixed>) -> Option<PhpMixed>>>,
        on_rejected: Option<Box<dyn FnOnce(Option<PhpMixed>) -> Option<PhpMixed>>>,
    ) -> Box<dyn PromiseInterface>;

    /// PHP closure shape: `fn(mixed): mixed`. Convenience wrapper around `then`
    /// for call sites that don't deal in `Option<PhpMixed>`.
    fn then_with(
        &self,
        _on_fulfilled: Option<Box<dyn FnOnce(PhpMixed) -> PhpMixed>>,
        _on_rejected: Option<Box<dyn FnOnce(PhpMixed) -> PhpMixed>>,
    ) -> Box<dyn PromiseInterface> {
        todo!()
    }

    /// PHP closure shape: `fn(mixed): mixed`, returning a `Box<dyn PromiseInterface>`.
    fn then_boxed(
        &self,
        _on_fulfilled: Option<Box<dyn FnOnce(PhpMixed) -> Box<dyn PromiseInterface>>>,
        _on_rejected: Option<Box<dyn FnOnce(PhpMixed) -> Box<dyn PromiseInterface>>>,
    ) -> Box<dyn PromiseInterface> {
        todo!()
    }

    /// Variant used by composer_repository where accept returns PhpMixed but reject returns
    /// an error/PhpMixed and the result is the same Promise pipeline.
    fn then_with_reject_boxed(
        &self,
        _on_fulfilled: Box<dyn FnOnce(PhpMixed) -> anyhow::Result<PhpMixed>>,
        _on_rejected: Box<dyn FnOnce(anyhow::Error) -> anyhow::Result<PhpMixed>>,
    ) -> Box<dyn PromiseInterface> {
        todo!()
    }
}