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 {
|
impl Encode for Filler {
|
||||||
fn encode(&self, e: &mut Encoder) -> Result<(), String> {
|
fn encode(&self, e: &mut Encoder) -> Result<(), String> {
|
||||||
e.zm_filler();
|
e.filler();
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
@ -104,29 +116,33 @@ impl Encoder {
|
||||||
self.used_bits = 0;
|
self.used_bits = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
fn zm_filler(&mut self) {
|
fn filler(&mut self) {
|
||||||
self.current_byte |= 1;
|
self.current_byte |= 1;
|
||||||
self.next_word();
|
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)]
|
#[cfg(test)]
|
||||||
mod test {
|
mod test {
|
||||||
#[test]
|
#[test]
|
||||||
fn encode_true() {
|
fn encode_bool() {
|
||||||
let mut e = super::Encoder::new();
|
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]
|
assert_eq!(bytes, vec![0b00000001]);
|
||||||
fn encode_false() {
|
|
||||||
let mut e = super::Encoder::new();
|
|
||||||
|
|
||||||
e.encode((false, super::Filler)).unwrap();
|
|
||||||
|
|
||||||
assert_eq!(e.buffer, vec![0b00000001]);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue