pdk_classy/hl/
entrypoint.rs1use 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}