diff --git a/src/runtime2/port.rs b/src/runtime2/port.rs new file mode 100644 index 0000000000000000000000000000000000000000..df7a7d64c3d949f8f3bbd24aa610e51b9faa170b --- /dev/null +++ b/src/runtime2/port.rs @@ -0,0 +1,53 @@ +#[derive(Clone, Copy, PartialEq, Eq)] +pub(crate) 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; + } +} + +pub enum PortKind { + Putter, + Getter, +} + +pub enum PortOwnership { + Unowned, // i.e. held by a native application + Owned, + InTransit, +} + +/// 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 { + // Once created, these values are immutable + pub self_id: PortIdLocal, + pub peer_id: PortIdLocal, + pub kind: PortKind, + // But this can be changed, but only by the connector that owns it + pub ownership: PortOwnership, + pub owning_connector: u32, + pub peer_connector: u32, // 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: u32, // can put on it, so from the connector's point of view, this is an output + pub getter_id: u32, // vice versa: can get on it, so an input for the connector +} \ No newline at end of file