use crate::adapter::opaque;
use crate::container::Descriptor;
use crate::error::Result;
use crate::limits::Limits;
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
#[repr(u8)]
pub enum CandidateKind {
Raw = 0,
Rle = 1,
ByteRans = 2,
}
impl CandidateKind {
pub const fn name(self) -> &'static str {
match self {
CandidateKind::Raw => "RAW",
CandidateKind::Rle => "RLE",
CandidateKind::ByteRans => "BYTE_RANS",
}
}
}
#[derive(Debug, Clone)]
pub struct Candidate {
pub kind: CandidateKind,
pub descriptor: Descriptor,
}
pub fn propose(input: &[u8], limits: Limits) -> Result<Vec<Candidate>> {
let out = vec![Candidate {
kind: CandidateKind::Raw,
descriptor: opaque::propose(input, limits)?,
}];
Ok(out)
}