pdk_classy/hl/
entrypoint.rs

1// Copyright (c) 2025, Salesforce, Inc.,
2// All rights reserved.
3// For full license text, see the LICENSE.txt file
4
5use crate::proxy_wasm::traits::RootContext;
6
7use crate::{bootstrap::Launcher, handler::IntoHandler, middleware::EventHandlerStack, Entrypoint};
8
9use super::{
10    context::{RequestContext, ResponseContext},
11    on_request, on_response, IntoFlow,
12};
13
14impl<H, T> Entrypoint<RequestContext, T> for H
15where
16    for<'a> H: IntoHandler<RequestContext, T> + Clone + 'a,
17    H::Output: IntoFlow<RequestData = ()>,
18{
19    fn create_root_context(
20        self,
21        event_handlers: EventHandlerStack,
22        context_id: u32,
23    ) -> Box<dyn RootContext> {
24        let entrypoint = move |launcher: Launcher| launcher.launch(on_request(self.clone()));
25        entrypoint.create_root_context(event_handlers, context_id)
26    }
27}
28
29impl<H, I> Entrypoint<ResponseContext<()>, I> for H
30where
31    for<'a> H: IntoHandler<ResponseContext<()>, I, Output = ()> + Clone + 'a,
32{
33    fn create_root_context(
34        self,
35        event_handlers: EventHandlerStack,
36        context_id: u32,
37    ) -> Box<dyn RootContext> {
38        let entrypoint = move |launcher: Launcher| launcher.launch(on_response(self.clone()));
39        entrypoint.create_root_context(event_handlers, context_id)
40    }
41}
42
43#[cfg(test)]
44mod tests {
45    use crate::{
46        client::HttpClient,
47        hl::{RequestState, ResponseState},
48        middleware::EventHandlerStack,
49        Entrypoint,
50    };
51
52    #[test]
53    fn request_entrypoint() {
54        async fn on_request(_: RequestState) {}
55
56        on_request.create_root_context(EventHandlerStack::default(), 100);
57    }
58
59    #[test]
60    fn injected_request_entrypoint() {
61        async fn on_request(_: RequestState, _: HttpClient) {}
62
63        on_request.create_root_context(EventHandlerStack::default(), 100);
64    }
65
66    #[test]
67    fn response_entrypoint() {
68        async fn on_response(_: ResponseState) {}
69
70        on_response.create_root_context(EventHandlerStack::default(), 100);
71    }
72
73    #[test]
74    fn injected_response_entrypoint() {
75        async fn on_response(_: RequestState, _: HttpClient) {}
76
77        on_response.create_root_context(EventHandlerStack::default(), 100);
78    }
79}