use std::rc::Rc;
use crate::netlist::prelude::*;
#[derive(Debug, Hash, PartialEq, Eq, Clone)]
pub enum TerminalRef {
Pin(Rc<Pin>),
PinInstance(Rc<PinInstance>),
}
impl TerminalRef {
pub fn net(&self) -> Option<Rc<Net>> {
match self {
TerminalRef::Pin(p) => p.internal_net(),
TerminalRef::PinInstance(p) => p.net()
}
}
pub fn terminal_id(&self) -> usize {
match self {
TerminalRef::Pin(p) => p.id(),
TerminalRef::PinInstance(p) => p.id()
}
}
}
impl From<Rc<Pin>> for TerminalRef {
fn from(p: Rc<Pin>) -> Self {
TerminalRef::Pin(p.clone())
}
}
impl From<Rc<PinInstance>> for TerminalRef {
fn from(p: Rc<PinInstance>) -> Self {
TerminalRef::PinInstance(p.clone())
}
}