1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
use crate::{compat::vec::Vec, Message, Route};
use core::fmt::{self, Display, Formatter};
use serde::{Deserialize, Serialize};
/// A generic transport message type.
///
/// This type is exposed in `ockam_core` (and the root `ockam` crate) in
/// order to provide a mechanism for third-party developers to create
/// custom transport channel routers.
///
/// Casual users of Ockam should never have to interact with this type
/// directly.
///
/// # Examples
///
/// See `ockam_transport_tcp::workers::sender::TcpSendWorker` for a usage example.
///
#[derive(Serialize, Deserialize, Debug, Clone, Hash, Ord, PartialOrd, Eq, PartialEq, Message)]
pub struct TransportMessage {
/// The transport protocol version.
pub version: u8,
/// Onward message route.
pub onward_route: Route,
/// Return message route.
///
/// This field must be populated by routers handling this message
/// along the way.
pub return_route: Route,
/// The message payload.
pub payload: Vec<u8>,
}
impl TransportMessage {
/// Create a new v1 transport message with empty return route.
pub fn v1(
onward_route: impl Into<Route>,
return_route: impl Into<Route>,
payload: Vec<u8>,
) -> Self {
Self {
version: 1,
onward_route: onward_route.into(),
return_route: return_route.into(),
payload,
}
}
}
impl Display for TransportMessage {
fn fmt(&self, f: &mut Formatter) -> fmt::Result {
write!(
f,
"Message (onward route: {}, return route: {})",
self.onward_route, self.return_route
)
}
}