feat: some filler changes
This commit is contained in:
parent
83c7e6aa64
commit
6ef5dd7e0e
46
src/flat.rs
46
src/flat.rs
|
@ -10,11 +10,23 @@ impl Encode for bool {
|
|||
}
|
||||
}
|
||||
|
||||
struct Filler;
|
||||
enum Filler {
|
||||
FillerStart(Box<Filler>),
|
||||
FillerEnd,
|
||||
}
|
||||
|
||||
impl Filler {
|
||||
pub fn len(&self) -> usize {
|
||||
match self {
|
||||
Filler::FillerStart(f) => f.len() + 1,
|
||||
Filler::FillerEnd => 1,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Encode for Filler {
|
||||
fn encode(&self, e: &mut Encoder) -> Result<(), String> {
|
||||
e.zm_filler();
|
||||
e.filler();
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
@ -104,29 +116,33 @@ impl Encoder {
|
|||
self.used_bits = 0;
|
||||
}
|
||||
|
||||
fn zm_filler(&mut self) {
|
||||
fn filler(&mut self) {
|
||||
self.current_byte |= 1;
|
||||
self.next_word();
|
||||
}
|
||||
}
|
||||
|
||||
pub fn encode<T>(value: T) -> Result<Vec<u8>, String>
|
||||
where
|
||||
T: Encode,
|
||||
{
|
||||
let mut e = Encoder::new();
|
||||
|
||||
e.encode((value, Filler::FillerEnd))?;
|
||||
|
||||
Ok(e.buffer)
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod test {
|
||||
#[test]
|
||||
fn encode_true() {
|
||||
let mut e = super::Encoder::new();
|
||||
fn encode_bool() {
|
||||
let bytes = super::encode(true).unwrap();
|
||||
|
||||
e.encode((true, super::Filler)).unwrap();
|
||||
assert_eq!(bytes, vec![0b10000001]);
|
||||
|
||||
assert_eq!(e.buffer, vec![0b10000001]);
|
||||
}
|
||||
let bytes = super::encode(false).unwrap();
|
||||
|
||||
#[test]
|
||||
fn encode_false() {
|
||||
let mut e = super::Encoder::new();
|
||||
|
||||
e.encode((false, super::Filler)).unwrap();
|
||||
|
||||
assert_eq!(e.buffer, vec![0b00000001]);
|
||||
assert_eq!(bytes, vec![0b00000001]);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue