use rustdv_gpi as gpi;
use crate::handle::{HandleBase, HandleChildren, HandleError, SimHandle};
#[derive(Copy, Clone)]
pub struct HierarchyHandle {
pub(super) raw: gpi::HierarchyHandle,
}
impl From<gpi::HierarchyHandle> for HierarchyHandle {
fn from(raw: gpi::HierarchyHandle) -> Self {
HierarchyHandle { raw }
}
}
impl HandleBase for HierarchyHandle {
fn name(&self) -> String {
self.raw.name()
}
fn full_name(&self) -> String {
self.raw.full_name()
}
}
impl HandleChildren for HierarchyHandle {
fn child(&self, name: &str) -> Result<SimHandle, HandleError> {
Ok(SimHandle::wrap(self.raw.child(name)?))
}
fn children(&self) -> Vec<SimHandle> {
self.raw
.children()
.into_iter()
.map(SimHandle::wrap)
.collect()
}
}
pub fn top_module() -> Result<HierarchyHandle, HandleError> {
Ok(HierarchyHandle::from(gpi::top_module()?))
}
impl std::fmt::Debug for HierarchyHandle {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "HierarchyHandle(\"{}\")", self.full_name())
}
}
impl HierarchyHandle {
pub fn null_for_test() -> HierarchyHandle {
HierarchyHandle {
raw: gpi::HierarchyHandle::null_for_test(),
}
}
}