(
&self,
inode: Inode,
)
| 71 | } |
| 72 | |
| 73 | fn iter_inode_vertices( |
| 74 | &self, |
| 75 | inode: Inode, |
| 76 | ) -> PristineResult< |
| 77 | Box< |
| 78 | dyn Iterator<Item = Result<(GraphNode<NodeId>, SerializedGraphEdge), PristineError>> |
| 79 | + '_, |
| 80 | >, |
| 81 | > { |
| 82 | let table = self.txn.open_multimap_table(INODE_GRAPH)?; |
| 83 | |
| 84 | let inode_id = inode.get(); |
| 85 | let start_key = encode_inode_vertex(inode_id, 0, 0, 0); |
| 86 | let end_key = encode_inode_vertex(inode_id, u64::MAX, u64::MAX, u64::MAX); |
| 87 | |
| 88 | let mut results = Vec::new(); |
| 89 | for result in table.range::<&[u8; 32]>(&start_key..=&end_key)? { |
| 90 | match result { |
| 91 | Ok((key, values)) => { |
| 92 | let (_, change_id, start, end) = decode_inode_vertex(key.value()); |
| 93 | let node = GraphNode { |
| 94 | change: NodeId::new(change_id), |
| 95 | start: ChangePosition::new(start), |
| 96 | end: ChangePosition::new(end), |
| 97 | }; |
| 98 | |
| 99 | for v in values.filter_map(|r| r.ok()) { |
| 100 | let edge = deserialize_edge(v.value()); |
| 101 | results.push(Ok((node, edge))); |
| 102 | } |
| 103 | } |
| 104 | Err(e) => { |
| 105 | results.push(Err(PristineError::Storage(Box::new(e)))); |
| 106 | } |
| 107 | } |
| 108 | } |
| 109 | |
| 110 | Ok(Box::new(results.into_iter())) |
| 111 | } |
| 112 | |
| 113 | fn get_file_index(&self, path: &str) -> PristineResult<Option<FileIndexMetadata>> { |
| 114 | let table = self.txn.open_table(FILE_INDEX)?; |
nothing calls this directly
no test coverage detected