use crate::protocol::eval::ValueGroup; use crate::runtime2::branch::BranchId; use crate::runtime2::ConnectorId; use crate::runtime2::port::PortIdLocal; // TODO: Remove Debug derive from all types #[derive(Debug, Copy, Clone)] pub(crate) struct PortAnnotation { pub port_id: PortIdLocal, pub registered_id: Option, pub expected_firing: Option, } /// The header added by the synchronization algorithm to all. #[derive(Debug, Clone)] pub(crate) struct SyncHeader { pub sending_component_id: ConnectorId, pub highest_component_id: ConnectorId, } /// The header added to data messages #[derive(Debug, Clone)] pub(crate) struct DataHeader { pub expected_mapping: Vec, pub sending_port: PortIdLocal, pub target_port: PortIdLocal, pub new_mapping: BranchId, } /// A data message is a message that is intended for the receiver's PDL code, /// but will also be handled by the consensus algrorithm #[derive(Debug, Clone)] pub(crate) struct DataMessageFancy { pub sync_header: SyncHeader, pub data_header: DataHeader, pub content: ValueGroup, } #[derive(Debug)] pub(crate) enum SyncContent { } /// A sync message is a message that is intended only for the consensus /// algorithm. #[derive(Debug)] pub(crate) struct SyncMessageFancy { pub sync_header: SyncHeader, pub content: SyncContent, } /// A control message is a message intended for the scheduler that is executing /// a component. #[derive(Debug)] pub(crate) struct ControlMessageFancy { pub id: u32, // generic identifier, used to match request to response pub sending_component_id: ConnectorId, pub content: ControlContent, } #[derive(Debug)] pub(crate) enum ControlContent { PortPeerChanged(PortIdLocal, ConnectorId), CloseChannel(PortIdLocal), Ack, Ping, } /// Combination of data message and control messages. #[derive(Debug)] pub(crate) enum MessageFancy { Data(DataMessageFancy), Sync(SyncMessageFancy), Control(ControlMessageFancy), }