+9
-23
src/walk.rs
+9
-23
src/walk.rs
···
30
30
if let Some(left_cid) = node.left {
31
31
out.push(Need::Node(left_cid));
32
32
}
33
-
let prefix = if !node.entries.is_empty() {
34
-
String::from_utf8(node.entries[0].keysuffix.to_vec()).unwrap()
35
-
} else {
36
-
"".to_string()
37
-
};
38
33
34
+
let mut prefix = vec![];
39
35
for entry in &node.entries {
40
-
let pre = &prefix[..entry.prefix_len];
41
-
let suf = String::from_utf8(entry.keysuffix.to_vec()).unwrap();
42
-
let rkey = format!("{pre}{suf}");
43
-
// if !rkey.contains('/') {
44
-
// println!("weird for entries: {:?}", node.entries);
45
-
// }
36
+
let mut rkey = vec![];
37
+
// TODO: *definitely* need to index in a non-panicky way
38
+
rkey.extend_from_slice(&prefix[..entry.prefix_len]);
39
+
rkey.extend_from_slice(&entry.keysuffix);
40
+
prefix = rkey.clone();
41
+
46
42
out.push(Need::Record {
47
-
rkey: rkey.into_bytes(),
43
+
rkey: rkey,
48
44
cid: entry.value,
49
45
});
50
-
// let suffix = entry.keysuffix;
51
-
// let mut rkey = String::new();
52
-
// rkey.extend_from_slice(&prefix[..entry.prefix_len]);
53
-
// rkey.extend_from_slice(&suffix);
54
-
// if i == 0 {
55
-
// prefix.extend_from_slice(&suffix);
56
-
// }
57
-
// out.push(Need::Record {
58
-
// rkey,
59
-
// cid: entry.value,
60
-
// });
46
+
61
47
if let Some(child_cid) = entry.tree {
62
48
out.push(Need::Node(child_cid));
63
49
}