use alloc::vec::Vec; use crate::crypto::PublicKey; use serde::{Serialize, Deserialize}; /// A tunnel that is used for communication #[derive(Serialize, Clone, Deserialize)] pub struct Tunnel { /// Tunnel's id. /// By the way, this id is `None` until the tunnel is validated in the backward movement pub id: Option, /// Ids, each of them is just for local storage on each node until a final global id is created pub local_ids: Vec, /// Ids of peers (in transport) by which we can send a message - one for backward direction, another for forward pub peer_ids: (u64, u64), /// Time at which this tunnel should be destroyed (UNIX epoch) pub ttd: u64, /// Public keys of nodes in the tunnel pub nodes_in_tunnel: Option>, /// Is this tunnel used for multicast? pub is_multicast: bool, /// If we created this tunnel, then this is the node that it's used to communicate with pub target_node: Option, } /// Tunnel, but only the fields that are ok to share #[derive(Serialize, Clone, Deserialize)] pub struct TunnelPublic { /// Tunnel's id id: Option, /// Ids, each of them is just for local storage on each node until a final global id is created local_ids: Vec, /// Time at which this tunnel should be destroyed (UNIX epoch) ttd: u64, /// Public keys of nodes in the tunnel nodes_in_tunnel: Option>, }