use super::ConnectorId; #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] pub struct PortIdLocal { pub index: u32, } impl PortIdLocal { pub fn new(id: u32) -> Self { Self{ index: id } } // TODO: Unsure about this, maybe remove, then also remove all struct // instances where I call this pub fn new_invalid() -> Self { Self{ index: u32::MAX } } pub fn is_valid(&self) -> bool { return self.index != u32::MAX; } } #[derive(Debug, Eq, PartialEq)] pub enum PortKind { Putter, Getter, } /// Represents a port inside of the runtime. May be without owner if it is /// created by the application interfacing with the runtime, instead of being /// created by a connector. pub struct Port { pub self_id: PortIdLocal, pub peer_id: PortIdLocal, pub kind: PortKind, pub peer_connector: ConnectorId, // might be temporarily inconsistent while peer port is sent around in non-sync phase. } // TODO: Turn port ID into its own type pub struct Channel { pub putter_id: PortIdLocal, // can put on it, so from the connector's point of view, this is an output pub getter_id: PortIdLocal, // vice versa: can get on it, so an input for the connector }