use std::io::{BufReader, Read};
use flate2::read::GzDecoder;
use crate::{error::MuninError, primitives::read_i32_le};
pub const MIN_SUPPORTED_VERSION: i32 = 18;
pub const MAX_KNOWN_VERSION: i32 = 25;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct BinlogHeader {
pub file_format_version: i32,
pub min_reader_version: i32,
}
pub fn open_binlog<R: Read>(
reader: R,
) -> Result<(BinlogHeader, BufReader<GzDecoder<R>>), MuninError> {
let gz = GzDecoder::new(reader);
let mut buffered = BufReader::with_capacity(32768, gz);
let file_format_version = read_i32_le(&mut buffered)?;
if file_format_version < MIN_SUPPORTED_VERSION {
return Err(MuninError::UnsupportedVersion {
file_version: file_format_version,
min_reader_version: 0,
});
}
let min_reader_version = read_i32_le(&mut buffered)?;
let header = BinlogHeader {
file_format_version,
min_reader_version,
};
Ok((header, buffered))
}
#[cfg(test)]
mod tests;