use string_interner::symbol::SymbolU32;
use crate::v7400::object::ObjectId;
pub(crate) use self::cache::ConnectionsCache;
mod cache;
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub(crate) struct ConnectionLabelSym(SymbolU32);
impl string_interner::Symbol for ConnectionLabelSym {
fn try_from_usize(v: usize) -> Option<Self> {
SymbolU32::try_from_usize(v).map(Self)
}
fn to_usize(self) -> usize {
self.0.to_usize()
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub(crate) enum ConnectedNodeType {
Object,
Property,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub(crate) struct ConnectionIndex(usize);
impl ConnectionIndex {
pub(crate) fn new(i: usize) -> Self {
Self(i)
}
pub(crate) fn value(self) -> usize {
self.0
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub(crate) struct Connection {
source_id: ObjectId,
source_type: ConnectedNodeType,
destination_id: ObjectId,
destination_type: ConnectedNodeType,
label: Option<ConnectionLabelSym>,
index: ConnectionIndex,
}
impl Connection {
pub(crate) fn new(
source_id: ObjectId,
source_type: ConnectedNodeType,
destination_id: ObjectId,
destination_type: ConnectedNodeType,
label: Option<ConnectionLabelSym>,
index: ConnectionIndex,
) -> Self {
Self {
source_id,
source_type,
destination_id,
destination_type,
label,
index,
}
}
pub(crate) fn source_id(&self) -> ObjectId {
self.source_id
}
pub(crate) fn destination_id(&self) -> ObjectId {
self.destination_id
}
pub(crate) fn label_sym(&self) -> Option<ConnectionLabelSym> {
self.label
}
}