use crate::tiff::errors::{TiffError, TiffResult};
use super::handler::CompressionHandler;
use super::uncompressed::UncompressedHandler;
use super::deflate::AdobeDeflateHandler;
use super::zstd::ZstdHandler;
pub struct CompressionFactory;
impl CompressionFactory {
pub fn create_handler(compression: u64) -> TiffResult<Box<dyn CompressionHandler>> {
match compression {
1 => Ok(Box::new(UncompressedHandler)),
8 => Ok(Box::new(AdobeDeflateHandler)),
14 => Ok(Box::new(ZstdHandler::new())),
_ => Err(TiffError::UnsupportedCompression(compression))
}
}
pub fn get_handler_by_name(name: &str) -> TiffResult<Box<dyn CompressionHandler>> {
match name.to_lowercase().as_str() {
"uncompressed" | "none" => Ok(Box::new(UncompressedHandler)),
"deflate" | "zip" | "adobe deflate" => Ok(Box::new(AdobeDeflateHandler)),
"zstd" => Ok(Box::new(ZstdHandler::new())),
_ => Err(TiffError::GenericError(format!("Unknown compression type: {}", name)))
}
}
pub fn get_available_handlers() -> Vec<Box<dyn CompressionHandler>> {
vec![
Box::new(UncompressedHandler),
Box::new(AdobeDeflateHandler),
Box::new(ZstdHandler::new())
]
}
}