Skip to content

Commit

Permalink
Make DekuContainerWrite a default impl
Browse files Browse the repository at this point in the history
- Reduce codegen by making this a default impl
  • Loading branch information
wcampbell0x2a committed Dec 28, 2023
1 parent 26c097a commit f8aacce
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 22 deletions.
21 changes: 1 addition & 20 deletions deku-derive/src/macros/deku_write.rs
Original file line number Diff line number Diff line change
Expand Up @@ -268,26 +268,7 @@ fn emit_enum(input: &DekuData) -> Result<TokenStream, syn::Error> {
}
}

impl #imp DekuContainerWrite for #ident #wher {
fn to_bytes(&self) -> core::result::Result<Vec<u8>, ::#crate_::DekuError> {
let mut out_buf = vec![];
let mut __deku_writer = ::#crate_::writer::Writer::new(&mut out_buf);
::#crate_::DekuWriter::to_writer(self, &mut __deku_writer, ())?;
__deku_writer.finalize()?;
Ok(out_buf)
}

#[allow(unused_variables)]
fn to_bits(&self) -> core::result::Result<::#crate_::bitvec::BitVec<u8, ::#crate_::bitvec::Msb0>, ::#crate_::DekuError> {
let mut out_buf = vec![];
let mut __deku_writer = ::#crate_::writer::Writer::new(&mut out_buf);
::#crate_::DekuWriter::to_writer(self, &mut __deku_writer, ())?;
let mut leftover = __deku_writer.leftover;
let mut bv = ::#crate_::bitvec::BitVec::from_slice(&out_buf);
bv.append(&mut leftover);
Ok(bv)
}
}
impl #imp DekuContainerWrite for #ident #wher {}
})
}

Expand Down
18 changes: 16 additions & 2 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -472,7 +472,13 @@ pub trait DekuContainerWrite: DekuWriter<()> {
/// let bytes = s.to_bytes().unwrap();
/// assert_eq!(bytes, [0x01, 0x02, 0x00, 0x03, 0x00, 0x00, 0x00]);
/// ````
fn to_bytes(&self) -> Result<Vec<u8>, DekuError>;
fn to_bytes(&self) -> Result<Vec<u8>, DekuError> {
let mut out_buf = Vec::new();
let mut __deku_writer = Writer::new(&mut out_buf);
DekuWriter::to_writer(self, &mut __deku_writer, ())?;
__deku_writer.finalize()?;
Ok(out_buf)
}

/// Write struct/enum to BitVec
///
Expand All @@ -495,7 +501,15 @@ pub trait DekuContainerWrite: DekuWriter<()> {
/// let bits = test.to_bits().unwrap();
/// assert_eq!(deku::bitvec::bitvec![1, 1, 1, 1, 0, 0, 0, 1, 1], bits);
/// ```
fn to_bits(&self) -> Result<bitvec::BitVec<u8, bitvec::Msb0>, DekuError>;
fn to_bits(&self) -> Result<bitvec::BitVec<u8, bitvec::Msb0>, DekuError> {
let mut out_buf = Vec::new();
let mut __deku_writer = Writer::new(&mut out_buf);
DekuWriter::to_writer(self, &mut __deku_writer, ())?;
let mut leftover = __deku_writer.leftover;
let mut bv = bitvec::BitVec::from_slice(&out_buf);
bv.append(&mut leftover);
Ok(bv)
}
}

/// "Updater" trait: apply mutations to a type
Expand Down

0 comments on commit f8aacce

Please sign in to comment.