std_modrpc/
interface.rs

1use crate::proto::{MultiStreamItem, PropertyUpdate, Request, Response, StreamItem};
2use modrpc::{InterfaceBuilder, InterfaceEvent, InterfaceSchema};
3
4pub struct PropertyInterface<T> {
5    pub update: InterfaceEvent<PropertyUpdate<T>>,
6}
7
8impl<T> InterfaceSchema for PropertyInterface<T> {
9    fn new(ib: &mut InterfaceBuilder) -> Self {
10        Self {
11            update: ib.event("update"),
12        }
13    }
14}
15
16pub struct RequestInterface<Req, Resp> {
17    pub request: InterfaceEvent<Request<Req>>,
18    pub response: InterfaceEvent<Response<Resp>>,
19}
20
21impl<Req, Resp> InterfaceSchema for RequestInterface<Req, Resp> {
22    fn new(ib: &mut InterfaceBuilder) -> Self {
23        Self {
24            request: ib.event("request"),
25            response: ib.event("response"),
26        }
27    }
28}
29
30pub struct StreamInterface<T> {
31    pub item: InterfaceEvent<StreamItem<T>>,
32}
33
34impl<T> InterfaceSchema for StreamInterface<T> {
35    fn new(ib: &mut InterfaceBuilder) -> Self {
36        Self {
37            item: ib.event("item"),
38        }
39    }
40}
41
42pub struct MultiStreamInterface<T> {
43    pub item: InterfaceEvent<MultiStreamItem<T>>,
44}
45
46impl<T> InterfaceSchema for MultiStreamInterface<T> {
47    fn new(ib: &mut InterfaceBuilder) -> Self {
48        Self {
49            item: ib.event("item"),
50        }
51    }
52}
53
54pub struct ByteStreamInterface {
55    pub blob: InterfaceEvent<()>,
56}
57
58impl InterfaceSchema for ByteStreamInterface {
59    fn new(ib: &mut InterfaceBuilder) -> Self {
60        Self {
61            blob: ib.event("blob"),
62        }
63    }
64}