Skip to main content

harn_vm/vm/
introspection.rs

1//! Read-only projections of the VM's installed builtin surface.
2
3use super::{Vm, VmBuiltinMetadata};
4
5impl Vm {
6    /// Return all registered builtin names (sync + async).
7    pub fn builtin_names(&self) -> Vec<String> {
8        let mut names: Vec<String> = self.builtins.keys().cloned().collect();
9        names.extend(self.async_builtins.keys().cloned());
10        names
11    }
12
13    /// Return every installed capability method as a `(capability, method)`
14    /// pair, including those registered at runtime rather than declared
15    /// through `#[harn_builtin]` exposure.
16    pub fn capability_method_names(&self) -> Vec<(harn_builtin_meta::CapabilityId, String)> {
17        self.capability_methods
18            .iter()
19            .flat_map(|(capability, methods)| {
20                methods
21                    .keys()
22                    .map(move |method| (*capability, method.clone()))
23            })
24            .collect()
25    }
26
27    /// Return discoverable metadata for registered builtins.
28    pub fn builtin_metadata(&self) -> Vec<VmBuiltinMetadata> {
29        self.builtin_metadata.values().cloned().collect()
30    }
31
32    /// Return discoverable metadata for a registered builtin name.
33    pub fn builtin_metadata_for(&self, name: &str) -> Option<&VmBuiltinMetadata> {
34        self.builtin_metadata.get(name)
35    }
36}