pub struct AimDbInner { /* private fields */ }Expand description
Internal database state
The registry is immutable after build() and holds tens of records, so
it needs exactly two structures: the entries in registration order
(indexed by RecordId) and a key → id map for name resolution. The hot
path (produce/consume) uses pre-resolved handles and never touches the
registry; everything else here is control-plane/introspection.
Implementations§
Source§impl AimDbInner
impl AimDbInner
Sourcepub fn resolve<K: RecordKey>(&self, key: &K) -> Option<RecordId>
pub fn resolve<K: RecordKey>(&self, key: &K) -> Option<RecordId>
Resolve RecordKey to RecordId (control plane - O(1) average)
Sourcepub fn resolve_str(&self, name: &str) -> Option<RecordId>
pub fn resolve_str(&self, name: &str) -> Option<RecordId>
Resolve string to RecordId (convenience for remote access)
O(1) average thanks to Borrow<str> implementation on RecordKey.
Sourcepub fn storage(&self, id: RecordId) -> Option<&dyn AnyRecord>
pub fn storage(&self, id: RecordId) -> Option<&dyn AnyRecord>
Get storage by RecordId (hot path - O(1))
Sourcepub fn key_for(&self, id: RecordId) -> Option<&StringKey>
pub fn key_for(&self, id: RecordId) -> Option<&StringKey>
Get the StringKey for a given RecordId
Sourcepub fn records_of_type<T: 'static>(&self) -> Vec<RecordId>
pub fn records_of_type<T: 'static>(&self) -> Vec<RecordId>
Get all RecordIds for a type (introspection)
Linear scan — the registry is immutable after build(), holds tens of
records, and this is called from introspection paths only.
Sourcepub fn record_count(&self) -> usize
pub fn record_count(&self) -> usize
Get the number of registered records
Sourcepub fn dependency_graph(&self) -> &DependencyGraph
pub fn dependency_graph(&self) -> &DependencyGraph
Get the dependency graph (immutable reference)
The graph is constructed once during build() and never changes.
Contains all record nodes, edges, and topological ordering.
Sourcepub fn get_typed_record_by_key<T>(
&self,
key: impl AsRef<str>,
) -> DbResult<&TypedRecord<T>>
pub fn get_typed_record_by_key<T>( &self, key: impl AsRef<str>, ) -> DbResult<&TypedRecord<T>>
Helper to get a typed record by RecordKey
This encapsulates the common pattern of:
- Resolving key to RecordId
- Validating TypeId matches
- Downcasting to the typed record
Sourcepub fn get_typed_record_by_id<T>(
&self,
id: RecordId,
) -> DbResult<&TypedRecord<T>>
pub fn get_typed_record_by_id<T>( &self, id: RecordId, ) -> DbResult<&TypedRecord<T>>
Helper to get a typed record by RecordId with type validation
Sourcepub fn list_records(&self) -> Vec<RecordMetadata>
pub fn list_records(&self) -> Vec<RecordMetadata>
Collects metadata for all registered records
Returns a vector of RecordMetadata for remote introspection.
Available only when the remote feature is enabled.
Sourcepub fn try_latest_as_json(&self, record_key: &str) -> Option<Value>
pub fn try_latest_as_json(&self, record_key: &str) -> Option<Value>
Sourcepub fn try_latest_as_json_bytes(&self, record_key: &str) -> Option<Vec<u8>>
pub fn try_latest_as_json_bytes(&self, record_key: &str) -> Option<Vec<u8>>
Try to get a record’s latest value as owned JSON bytes.
This is the byte-oriented sibling of
try_latest_as_json. The built-in Serde
codec serializes the typed record directly; compatibility codecs may
inherit a Value-based fallback.
Sourcepub fn set_record_from_json(
&self,
record_key: &str,
json_value: Value,
) -> DbResult<()>
pub fn set_record_from_json( &self, record_key: &str, json_value: Value, ) -> DbResult<()>
Sets a record value from JSON (remote access API)
Deserializes the JSON value and writes it to the record’s buffer.
SAFETY: Enforces the “No Producer Override” rule:
- Only works for records with
producer_count == 0 - Returns error if the record has active producers
§Arguments
record_key- The record key (e.g., “config.app”)json_value- JSON representation of the value
§Returns
Ok(())- Successfully set the valueErr(DbError)- If record not found, has producers, or deserialization fails