use super::endian::FileEndian;
use crate::mode::Mode;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum ConversionPath {
ZeroCopy,
EndianOnly,
ConvertOnly,
FullPipeline,
}
#[inline]
pub fn get_conversion_path(
src_mode: Mode,
dst_mode: Mode,
file_endian: FileEndian,
) -> ConversionPath {
let modes_match = src_mode == dst_mode;
let endian_match = file_endian.is_native();
match (modes_match, endian_match) {
(true, true) => ConversionPath::ZeroCopy,
(true, false) => ConversionPath::EndianOnly,
(false, true) => ConversionPath::ConvertOnly,
(false, false) => ConversionPath::FullPipeline,
}
}
#[inline]
pub fn is_zero_copy(src_mode: Mode, dst_mode: Mode, file_endian: FileEndian) -> bool {
src_mode == dst_mode && file_endian.is_native()
}