1#![warn(rust_2018_idioms)]
3#![warn(unreachable_pub)]
4
5use std::fmt;
6
7use mm1_address::address::Address;
8use mm1_proto::message;
9
10#[message]
11#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
12pub struct RequestHeader<Id> {
13 pub id: Id,
14 pub reply_to: Address,
15}
16
17#[message]
18#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
19pub struct ResponseHeader<Id> {
20 pub id: Id,
21}
22
23#[message]
24#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
25pub struct Request<Rq, Id = ()> {
26 pub header: RequestHeader<Id>,
27 pub payload: Rq,
28}
29
30#[message]
31#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
32pub struct Response<Rs, Id = ()> {
33 pub header: ResponseHeader<Id>,
34 pub payload: Rs,
35}
36
37impl<Id> fmt::Display for RequestHeader<Id>
38where
39 Id: fmt::Debug,
40{
41 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
42 write!(f, "REQUEST({}!{:?})", self.reply_to, self.id)
43 }
44}