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        (
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}