cdc_chunkers/
lib.rs

1use std::fmt::{Display, Formatter};
2
3pub mod leap_based;
4pub mod rabin;
5pub mod seq;
6pub mod supercdc;
7pub mod ultra;
8
9#[derive(Debug)]
10pub struct Chunk {
11    pub pos: usize,
12    pub len: usize,
13}
14
15impl Chunk {
16    fn new(pos: usize, len: usize) -> Self {
17        Chunk { pos, len }
18    }
19}
20
21/// Struct containing size parameters for chunkers:
22/// min, average and max size of chunks.
23#[derive(Copy, Clone, Debug, Eq, PartialEq)]
24pub struct SizeParams {
25    pub min: usize,
26    pub avg: usize,
27    pub max: usize,
28}
29
30impl SizeParams {
31    /// Creates a new instance of `SizeParams` struct.
32    ///
33    /// Panics if not (min <= avg && avg <= max && min <= max).
34    pub fn new(min: usize, avg: usize, max: usize) -> Self {
35        assert!(min <= avg && avg <= max && min <= max);
36
37        Self { min, avg, max }
38    }
39
40    pub fn leap_default() -> Self {
41        leap_based::Chunker::default_sizes()
42    }
43
44    pub fn rabin_default() -> Self {
45        rabin::Chunker::default_sizes()
46    }
47
48    pub fn super_default() -> Self {
49        supercdc::Chunker::default_sizes()
50    }
51
52    pub fn ultra_default() -> Self {
53        ultra::Chunker::default_sizes()
54    }
55
56    pub fn seq_default() -> Self {
57        seq::Chunker::default_sizes()
58    }
59}
60
61impl Display for SizeParams {
62    fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
63        write!(f, "{}-{}-{}", self.min, self.avg, self.max)
64    }
65}