#[derive(Clone)]
pub struct VmHarness {
inner: Arc<HarnessInner>,
kind: HarnessKind,
}
impl VmHarness {
pub fn kind(&self) -> HarnessKind {
self.kind
}
pub fn type_name(&self) -> &'static str {
self.kind.type_name()
}
pub fn inner(&self) -> &Arc<HarnessInner> {
&self.inner
}
pub fn sub_handle(&self, field: &str) -> Option<VmHarness> {
if self.kind != HarnessKind::Root {
return None;
}
let kind = HarnessKind::from_field_name(field)?;
self.sub_handle_kind(kind)
}
pub(crate) fn sub_handle_kind(&self, kind: HarnessKind) -> Option<VmHarness> {
if self.kind != HarnessKind::Root || kind == HarnessKind::Root {
return None;
}
Some(VmHarness {
inner: Arc::clone(&self.inner),
kind,
})
}
}
impl fmt::Debug for VmHarness {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.debug_struct("VmHarness")
.field("kind", &self.kind)
.finish_non_exhaustive()
}
}