std_modrpc/roles/
request_server.rs1#![allow(unused_variables)]
2
3use crate::interface::RequestInterface;
4use crate::proto::{Request, RequestInitState, RequestServerConfig, Response};
5use modrpc::{EventRxBuilder, EventTx, InterfaceRole, RoleSetup};
6
7pub struct RequestServerHooks<Req, Resp> {
8 pub response: EventTx<Response<Resp>>,
9 _phantom: std::marker::PhantomData<(Req, Resp)>,
10}
11
12pub struct RequestServerStubs<Req, Resp> {
13 pub request: EventRxBuilder<Request<Req>>,
14 _phantom: std::marker::PhantomData<(Req, Resp)>,
15}
16
17pub struct RequestServerRole<Req, Resp> {
18 _phantom: std::marker::PhantomData<(Req, Resp)>,
19}
20
21impl<Req: mproto::Owned, Resp: mproto::Owned> InterfaceRole for RequestServerRole<Req, Resp> {
22 type Interface = RequestInterface<Req, Resp>;
23 type Config = RequestServerConfig;
24 type Init = RequestInitState;
25 type Stubs = RequestServerStubs<Req, Resp>;
26 type Hooks = RequestServerHooks<Req, Resp>;
27
28 fn setup_worker(
29 i: &Self::Interface,
30 setup: &mut RoleSetup,
31 config: &Self::Config,
32 init: &Self::Init,
33 ) -> (Self::Stubs, Self::Hooks) {
34
35 (
36 Self::Stubs {
37 request: setup.event_rx(i.request),
38 _phantom: std::marker::PhantomData,
39 },
40 Self::Hooks {
41 response: setup.event_tx(i.response),
42 _phantom: std::marker::PhantomData,
43 },
44 )
45 }
46}
47
48impl<Req, Resp> Clone for RequestServerHooks<Req, Resp> {
49 fn clone(&self) -> Self {
50 Self {
51 response: self.response.clone(),
52 _phantom: std::marker::PhantomData,
53 }
54 }
55}