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