aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authortv <tv@krebsco.de>2026-10-31 03:52:02 +0100
committertv <tv@krebsco.de>2026-10-31 03:52:02 +0100
commitee849a9d8806f4fc5b8bde6d22dbe28da9d969d1 (patch)
treeaebc871cfa3e49074c3c019f95d406150c7fe323
parent2aa76d370d960153e0d098bad61918ca92b9fed6 (diff)
consistently use resolve_through
-rw-r--r--src/document/store.rs22
1 files changed, 7 insertions, 15 deletions
diff --git a/src/document/store.rs b/src/document/store.rs
index b698d19..d314a4c 100644
--- a/src/document/store.rs
+++ b/src/document/store.rs
@@ -433,14 +433,10 @@ fn summary(doc: &AutoCommit, resolved: &Resolved, entries: bool) -> Result<JsonV
/// Keys of the merged map at `path`; empty if it doesn't exist or isn't a map.
pub(crate) fn keys_at(doc: &AutoCommit, path: &[String]) -> Result<Vec<String>, StoreError> {
- let mut maps = vec![automerge::ROOT];
- for segment in path {
- maps = match resolve(doc, &maps, segment, None)? {
- Some(Resolved::Maps(next)) => next,
- _ => return Ok(Vec::new()),
- };
- }
- Ok(merged_keys(doc, &maps).into_iter().collect())
+ Ok(match resolve_through(doc, path)? {
+ Some(Resolved::Maps(maps)) => merged_keys(doc, &maps).into_iter().collect(),
+ _ => Vec::new(),
+ })
}
/// Every concurrent value at `path`, newest first; empty if there is none. Where
@@ -450,13 +446,9 @@ pub(crate) fn read_candidates(
path: &[String],
) -> Result<Vec<JsonValue>, StoreError> {
let (leaf, parents) = path.split_last().ok_or(StoreError::NotFound)?;
- let mut maps = vec![automerge::ROOT];
- for segment in parents {
- maps = match resolve(doc, &maps, segment, None)? {
- Some(Resolved::Maps(next)) => next,
- _ => return Ok(Vec::new()),
- };
- }
+ let Some(Resolved::Maps(maps)) = resolve_through(doc, parents)? else {
+ return Ok(Vec::new());
+ };
candidates(doc, &maps, leaf.as_str())?
.into_iter()
.map(|(value, id)| match value {