| 21 | } |
| 22 | |
| 23 | fn get_contents<F>( |
| 24 | &self, |
| 25 | hash_fn: F, |
| 26 | span: GraphNode<NodeId>, |
| 27 | buf: &mut [u8], |
| 28 | ) -> Result<usize, Self::Error> |
| 29 | where |
| 30 | F: Fn(NodeId) -> Option<Hash>, |
| 31 | { |
| 32 | // Handle ROOT span |
| 33 | if span == GraphNode::ROOT { |
| 34 | return Ok(0); |
| 35 | } |
| 36 | |
| 37 | // Get the hash for this span's change |
| 38 | let hash = match hash_fn(span.change) { |
| 39 | Some(h) => h, |
| 40 | None => { |
| 41 | return Err(ChangeStoreError::NotFound { |
| 42 | hash: format!("NodeId({:?})", span.change), |
| 43 | }); |
| 44 | } |
| 45 | }; |
| 46 | |
| 47 | let start = span.start.get() as usize; |
| 48 | let end = span.end.get() as usize; |
| 49 | |
| 50 | self.copy_content_span(&hash, start, end, buf) |
| 51 | } |
| 52 | |
| 53 | fn get_contents_ext( |
| 54 | &self, |