MCPcopy Create free account
hub / github.com/atomicdotdev/atomic / list_vault_entries

Method list_vault_entries

atomic-core/src/pristine/txn/read.rs:688–738  ·  view source on GitHub ↗
(
        &self,
        prefix: &str,
        entry_type_filter: Option<VaultEntryType>,
    )

Source from the content-addressed store, hash-verified

686 }
687
688 fn list_vault_entries(
689 &self,
690 prefix: &str,
691 entry_type_filter: Option<VaultEntryType>,
692 ) -> PristineResult<Vec<VaultEntryMeta>> {
693 let table = match self.txn.open_table(VAULT_ENTRIES) {
694 Ok(table) => table,
695 Err(redb::TableError::TableDoesNotExist(_)) => return Ok(Vec::new()),
696 Err(e) => return Err(PristineError::from(e)),
697 };
698
699 let mut results = Vec::new();
700
701 let iter = if prefix.is_empty() {
702 table.iter()?
703 } else {
704 table.range(prefix..)?
705 };
706
707 for item in iter {
708 let (key, value) = item?;
709 let key_str = key.value();
710
711 // Stop iterating once we pass the prefix range
712 if !prefix.is_empty() && !key_str.starts_with(prefix) {
713 break;
714 }
715
716 let entry: VaultEntry =
717 postcard::from_bytes(value.value()).map_err(|e| PristineError::Serialization {
718 message: format!("failed to deserialize VaultEntry at '{}': {}", key_str, e),
719 })?;
720
721 // Apply type filter
722 if let Some(ref filter) = entry_type_filter {
723 if entry.entry_type != *filter {
724 continue;
725 }
726 }
727
728 results.push(VaultEntryMeta {
729 path: key_str.to_string(),
730 entry_type: entry.entry_type,
731 content_hash: entry.content_hash,
732 content_size: entry.content_bytes.len(),
733 updated_at: entry.updated_at,
734 });
735 }
736
737 Ok(results)
738 }
739
740 fn get_vault_manifest(&self) -> PristineResult<VaultManifest> {
741 let table = match self.txn.open_table(VAULT_MANIFEST) {

Callers 2

vault_listMethod · 0.45

Calls 5

rangeMethod · 0.80
is_emptyMethod · 0.45
iterMethod · 0.45
pushMethod · 0.45
lenMethod · 0.45

Tested by

no test coverage detected