Skip to main content

rustdv_sim/handle/
aggregate.rs

1//! Typed member access for structs and unions.
2
3use rustdv_gpi as gpi;
4
5use crate::handle::{HandleBase, HandleChildren, HandleError, SimHandle};
6
7/// An unpacked struct or union accessed through typed members.
8#[derive(Copy, Clone)]
9pub struct AggregateHandle {
10    pub(super) raw: gpi::AggregateHandle,
11}
12
13impl From<gpi::AggregateHandle> for AggregateHandle {
14    fn from(raw: gpi::AggregateHandle) -> Self {
15        AggregateHandle { raw }
16    }
17}
18
19impl HandleChildren for AggregateHandle {
20    fn child(&self, name: &str) -> Result<SimHandle, HandleError> {
21        Ok(SimHandle::wrap(self.raw.child(name)?))
22    }
23
24    fn children(&self) -> Vec<SimHandle> {
25        self.raw
26            .children()
27            .into_iter()
28            .map(SimHandle::wrap)
29            .collect()
30    }
31}
32
33impl HandleBase for AggregateHandle {
34    fn name(&self) -> String {
35        self.raw.name()
36    }
37
38    fn full_name(&self) -> String {
39        self.raw.full_name()
40    }
41}