use std::any::Any;
use std::sync::Arc;
use nydus_utils::digest::RafsDigest;
use storage::device::v5::BlobV5ChunkInfo;
use storage::device::{BlobChunkFlags, BlobChunkInfo};
#[derive(Clone, Default, Debug)]
pub struct MockChunkInfo {
c_block_id: Arc<RafsDigest>,
c_blob_index: u32,
c_index: u32,
c_file_offset: u64,
c_compress_offset: u64,
c_decompress_offset: u64,
c_compr_size: u32,
c_decompress_size: u32,
c_flags: BlobChunkFlags,
}
impl MockChunkInfo {
pub fn mock(
file_offset: u64,
compress_offset: u64,
compress_size: u32,
decompress_offset: u64,
decompress_size: u32,
) -> Self {
MockChunkInfo {
c_file_offset: file_offset,
c_compress_offset: compress_offset,
c_compr_size: compress_size,
c_decompress_offset: decompress_offset,
c_decompress_size: decompress_size,
..Default::default()
}
}
}
impl BlobChunkInfo for MockChunkInfo {
fn is_compressed(&self) -> bool {
self.c_flags.contains(BlobChunkFlags::COMPRESSED)
}
fn is_hole(&self) -> bool {
self.c_flags.contains(BlobChunkFlags::HOLECHUNK)
}
fn chunk_id(&self) -> &RafsDigest {
&self.c_block_id
}
fn id(&self) -> u32 {
self.c_index
}
fn as_any(&self) -> &dyn Any {
self
}
impl_getter!(blob_index, c_blob_index, u32);
impl_getter!(compress_offset, c_compress_offset, u64);
impl_getter!(compress_size, c_compr_size, u32);
impl_getter!(uncompress_offset, c_decompress_offset, u64);
impl_getter!(uncompress_size, c_decompress_size, u32);
}
impl BlobV5ChunkInfo for MockChunkInfo {
fn index(&self) -> u32 {
self.c_index
}
fn file_offset(&self) -> u64 {
self.c_file_offset
}
fn flags(&self) -> BlobChunkFlags {
self.c_flags
}
fn as_base(&self) -> &dyn BlobChunkInfo {
self
}
}