in cas_client/src/local_client.rs [184:210]
fn get_object_range(&self, hash: &MerkleHash, chunk_ranges: Vec<(u32, u32)>) -> Result<Vec<Vec<u8>>> {
// Handle the case where we aren't asked for any real data.
if chunk_ranges.is_empty() {
return Ok(vec![vec![]]);
}
let file_path = self.get_path_for_entry(hash);
let file = File::open(&file_path).map_err(|_| {
error!("Unable to find file in local CAS {:?}", file_path);
CasClientError::XORBNotFound(*hash)
})?;
let mut reader = BufReader::new(file);
let cas = CasObject::deserialize(&mut reader)?;
let mut ret: Vec<Vec<u8>> = Vec::new();
for r in chunk_ranges {
if r.0 >= r.1 {
ret.push(vec![]);
continue;
}
let data = cas.get_bytes_by_chunk_range(&mut reader, r.0, r.1)?;
ret.push(data);
}
Ok(ret)
}