use crate::error::Result;
use crate::types::{EncodableFrame, EncodeConfig};
use std::io::Write;
use std::path::Path;
pub trait GifEncoder: Send + Sync {
fn encode(&self, frames: &[EncodableFrame], config: &EncodeConfig) -> Result<Vec<u8>>;
fn encode_to_file(
&self,
frames: &[EncodableFrame],
path: impl AsRef<Path>,
config: &EncodeConfig,
) -> Result<()>;
fn encode_to_writer<W: Write>(
&self,
frames: &[EncodableFrame],
writer: W,
config: &EncodeConfig,
) -> Result<()>;
fn supports_lossy(&self) -> bool;
fn name(&self) -> &'static str;
}
pub trait GifEncoderExt: GifEncoder {
fn encode_default(&self, frames: &[EncodableFrame]) -> Result<Vec<u8>> {
self.encode(frames, &EncodeConfig::default())
}
fn can_encode(&self, config: &EncodeConfig) -> bool {
if config.lossy_quality.is_some() && !self.supports_lossy() {
return false;
}
true
}
}
impl<T: GifEncoder> GifEncoderExt for T {}