use std::io::Error;
use std::io::ErrorKind;
use std::io::Result;
use crate::TranscodeProgress;
use crate::TranscodeStatus;
pub(in crate::transcode::io) fn validate_decode_progress(
progress: TranscodeProgress,
input_index: usize,
available_input: usize,
output_index: usize,
available_output: usize,
) -> Result<TranscodeProgress> {
progress
.validate(input_index, available_input, output_index, available_output)
.map_err(|error| Error::new(ErrorKind::InvalidData, error))?;
Ok(progress)
}
pub(in crate::transcode::io) fn validate_eof_decode_progress(
progress: TranscodeProgress,
input_index: usize,
available_input: usize,
output_index: usize,
available_output: usize,
) -> Result<TranscodeProgress> {
let progress = validate_decode_progress(progress, input_index, available_input, output_index, available_output)?;
if matches!(progress.status(), TranscodeStatus::NeedInput { .. }) {
return Err(Error::new(
ErrorKind::InvalidData,
"decoder violated the EOF contract by requesting more input",
));
}
Ok(progress)
}
pub(in crate::transcode::io) fn validate_encode_progress(
progress: TranscodeProgress,
input_index: usize,
available_input: usize,
output_index: usize,
available_output: usize,
) -> Result<TranscodeProgress> {
progress
.validate(input_index, available_input, output_index, available_output)
.map_err(|error| Error::new(ErrorKind::InvalidData, error))?;
if matches!(progress.status(), TranscodeStatus::NeedInput { .. }) {
return Err(Error::new(
ErrorKind::InvalidData,
"encoder violated the TranscodeEncoder contract by requesting more input",
));
}
Ok(progress)
}