#![deny(missing_docs)]
#![doc(html_root_url = "https://docs.rs/bzip2/")]
#[cfg(not(feature = "libbz2-rs-sys"))]
extern crate bzip2_sys as ffi;
#[cfg(feature = "libbz2-rs-sys")]
extern crate libbz2_rs_sys as ffi;
#[cfg(test)]
extern crate partial_io;
#[cfg(test)]
extern crate quickcheck;
#[cfg(test)]
extern crate rand;
pub use mem::{Action, Compress, Decompress, Error, Status};
mod mem;
pub mod bufread;
pub mod read;
pub mod write;
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
pub struct Compression(u32);
impl Compression {
#[track_caller]
pub const fn new(level: u32) -> Compression {
match Self::try_new(level) {
Some(v) => v,
None => panic!("expected a compression level in the range 1..=9"),
}
}
pub const fn try_new(level: u32) -> Option<Compression> {
match level {
1..=9 => Some(Compression(level)),
_ => None,
}
}
#[deprecated(since = "0.5.1", note = "libbz2 does not support compression level 0")]
pub fn none() -> Compression {
Compression(0)
}
pub const fn fast() -> Compression {
Compression(1)
}
pub const fn best() -> Compression {
Compression(9)
}
pub const fn level(&self) -> u32 {
self.0
}
}
impl Default for Compression {
fn default() -> Compression {
Compression(6)
}
}
#[cfg(test)]
mod test {
use super::*;
#[test]
#[should_panic]
fn new_level_0() {
Compression::new(0);
}
#[test]
#[should_panic]
fn new_level_10() {
Compression::new(10);
}
#[test]
fn try_new() {
assert!(Compression::try_new(0).is_none());
assert!(Compression::try_new(10).is_none());
assert_eq!(Compression::try_new(1), Some(Compression::fast()));
assert_eq!(Compression::try_new(6), Some(Compression::default()));
assert_eq!(Compression::try_new(9), Some(Compression::best()));
}
}