(
&self,
inode: Inode,
)
| 473 | } |
| 474 | |
| 475 | fn iter_inode_vertices( |
| 476 | &self, |
| 477 | inode: Inode, |
| 478 | ) -> PristineResult< |
| 479 | Box< |
| 480 | dyn Iterator<Item = Result<(GraphNode<NodeId>, SerializedGraphEdge), PristineError>> |
| 481 | + '_, |
| 482 | >, |
| 483 | > { |
| 484 | let table = self.txn.open_multimap_table(INODE_GRAPH)?; |
| 485 | |
| 486 | let inode_id = inode.get(); |
| 487 | let start_key = encode_inode_vertex(inode_id, 0, 0, 0); |
| 488 | let end_key = encode_inode_vertex(inode_id, u64::MAX, u64::MAX, u64::MAX); |
| 489 | |
| 490 | // Collect to avoid lifetime issues |
| 491 | let mut results = Vec::new(); |
| 492 | for result in table.range::<&[u8; 32]>(&start_key..=&end_key)? { |
| 493 | match result { |
| 494 | Ok((key, values)) => { |
| 495 | let (_, change_id, start, end) = decode_inode_vertex(key.value()); |
| 496 | let node = GraphNode { |
| 497 | change: NodeId::new(change_id), |
| 498 | start: ChangePosition::new(start), |
| 499 | end: ChangePosition::new(end), |
| 500 | }; |
| 501 | |
| 502 | for v in values.filter_map(|r| r.ok()) { |
| 503 | let edge = deserialize_edge(v.value()); |
| 504 | results.push(Ok((node, edge))); |
| 505 | } |
| 506 | } |
| 507 | Err(e) => { |
| 508 | results.push(Err(PristineError::Storage(Box::new(e)))); |
| 509 | } |
| 510 | } |
| 511 | } |
| 512 | |
| 513 | Ok(Box::new(results.into_iter())) |
| 514 | } |
| 515 | |
| 516 | fn get_file_index(&self, path: &str) -> PristineResult<Option<FileIndexMetadata>> { |
| 517 | let table = self.txn.open_table(FILE_INDEX)?; |
nothing calls this directly
no test coverage detected