1use mm1_address::address::Address;
2use mm1_address::subnet::NetAddress;
3use mm1_proto::message;
4use mm1_proto_network_management::protocols::LocalTypeKey;
5
6use crate::common::RouteMetric;
7
8#[message(base_path = ::mm1_proto)]
9pub struct SubscribeToRoutesRequest {
10 pub deliver_to: Address,
11}
12
13#[message(base_path = ::mm1_proto)]
14pub struct SubscribeToRoutesResponse {
15 pub routes: Vec<SetRoute>,
16}
17
18#[message(base_path = ::mm1_proto)]
19pub struct Forward {
20 pub local_type_key: LocalTypeKey,
21 #[serde(with = "mm1_common::serde::binary")]
22 pub body: Box<[u8]>,
23}
24
25#[derive(Clone)]
26#[message(base_path = ::mm1_proto)]
27pub struct SetRoute {
28 pub message: LocalTypeKey,
29 pub destination: NetAddress,
30 pub via: Option<Address>,
31 pub metric: Option<RouteMetric>,
32}
33
34impl From<(LocalTypeKey, NetAddress, Option<Address>, RouteMetric)> for SetRoute {
35 fn from(
36 (message, destination, via, metric): (
37 LocalTypeKey,
38 NetAddress,
39 Option<Address>,
40 RouteMetric,
41 ),
42 ) -> Self {
43 Self {
44 message,
45 destination,
46 via,
47 metric: Some(metric),
48 }
49 }
50}