std_modrpc/roles/
request_client.rs

1#![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            Self::Stubs {
37                request: setup.event_rx(i.request),
38                response: setup.event_rx(i.response),
39                _phantom: std::marker::PhantomData,
40            },
41            Self::Hooks {
42                request: setup.event_tx(i.request),
43                _phantom: std::marker::PhantomData,
44            },
45        )
46    }
47}
48
49impl<Req, Resp> Clone for RequestClientHooks<Req, Resp> {
50    fn clone(&self) -> Self {
51        Self {
52            request: self.request.clone(),
53            _phantom: std::marker::PhantomData,
54        }
55    }
56}