use crate::protocol::eval::ValueGroup; use crate::runtime2::branch::BranchId; use crate::runtime2::ConnectorId; use crate::runtime2::port::PortIdLocal; #[derive(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. pub(crate) struct SyncHeader { pub sending_component_id: ConnectorId, pub highest_component_id: ConnectorId, } /// The header added to data messages pub(crate) struct DataHeader { pub expected_mapping: Vec, 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 pub(crate) struct DataMessageFancy { pub sync_header: SyncHeader, pub data_header: DataHeader, pub content: ValueGroup, } pub(crate) enum SyncContent { } /// A sync message is a message that is intended only for the consensus /// algorithm. 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. pub(crate) struct ControlMessageFancy { pub id: u32, // generic identifier, used to match request to response pub content: ControlContent, } pub(crate) enum ControlContent { PortPeerChanged(PortIdLocal, ConnectorId), CloseChannel(PortIdLocal), Ack, Ping, } /// Combination of data message and control messages. pub(crate) enum MessageFancy { Data(DataMessageFancy), Sync(SyncMessageFancy), Control(ControlMessageFancy), }