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}