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

Method list_vault_entries

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

Source from the content-addressed store, hash-verified

842 }
843
844 fn list_vault_entries(
845 &self,
846 prefix: &str,
847 entry_type_filter: Option<VaultEntryType>,
848 ) -> PristineResult<Vec<VaultEntryMeta>> {
849 let table = match self.txn.open_table(VAULT_ENTRIES) {
850 Ok(table) => table,
851 Err(redb::TableError::TableDoesNotExist(_)) => return Ok(Vec::new()),
852 Err(e) => return Err(PristineError::from(e)),
853 };
854
855 let mut results = Vec::new();
856
857 let iter = if prefix.is_empty() {
858 table.iter()?
859 } else {
860 table.range(prefix..)?
861 };
862
863 for item in iter {
864 let (key, value) = item?;
865 let key_str = key.value();
866
867 // Stop iterating once we pass the prefix range
868 if !prefix.is_empty() && !key_str.starts_with(prefix) {
869 break;
870 }
871
872 let entry: VaultEntry =
873 postcard::from_bytes(value.value()).map_err(|e| PristineError::Serialization {
874 message: format!("failed to deserialize VaultEntry at '{}': {}", key_str, e),
875 })?;
876
877 // Apply type filter
878 if let Some(ref filter) = entry_type_filter {
879 if entry.entry_type != *filter {
880 continue;
881 }
882 }
883
884 results.push(VaultEntryMeta {
885 path: key_str.to_string(),
886 entry_type: entry.entry_type,
887 content_hash: entry.content_hash,
888 content_size: entry.content_bytes.len(),
889 updated_at: entry.updated_at,
890 });
891 }
892
893 Ok(results)
894 }
895
896 fn get_vault_manifest(&self) -> PristineResult<VaultManifest> {
897 let table = match self.txn.open_table(VAULT_MANIFEST) {

Callers 3

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