Skip to content

Commit 26c00d3

Browse files
committed
Make DekuContainerWrite a default impl
- Reduce codegen by making this a default impl
1 parent 12f40ef commit 26c00d3

File tree

2 files changed

+18
-42
lines changed

2 files changed

+18
-42
lines changed

deku-derive/src/macros/deku_write.rs

+2-40
Original file line numberDiff line numberDiff line change
@@ -64,26 +64,7 @@ fn emit_struct(input: &DekuData) -> Result<TokenStream, syn::Error> {
6464
}
6565
}
6666

67-
impl #imp DekuContainerWrite for #ident #wher {
68-
fn to_bytes(&self) -> core::result::Result<Vec<u8>, ::#crate_::DekuError> {
69-
let mut out_buf = vec![];
70-
let mut __deku_writer = ::#crate_::writer::Writer::new(&mut out_buf);
71-
::#crate_::DekuWriter::to_writer(self, &mut __deku_writer, ())?;
72-
__deku_writer.finalize()?;
73-
Ok(out_buf)
74-
}
75-
76-
#[allow(unused_variables)]
77-
fn to_bits(&self) -> core::result::Result<::#crate_::bitvec::BitVec<u8, ::#crate_::bitvec::Msb0>, ::#crate_::DekuError> {
78-
let mut out_buf = vec![];
79-
let mut __deku_writer = ::#crate_::writer::Writer::new(&mut out_buf);
80-
::#crate_::DekuWriter::to_writer(self, &mut __deku_writer, ())?;
81-
let mut leftover = __deku_writer.leftover;
82-
let mut bv = ::#crate_::bitvec::BitVec::from_slice(&out_buf);
83-
bv.append(&mut leftover);
84-
Ok(bv)
85-
}
86-
}
67+
impl #imp DekuContainerWrite for #ident #wher {}
8768
});
8869
}
8970

@@ -274,26 +255,7 @@ fn emit_enum(input: &DekuData) -> Result<TokenStream, syn::Error> {
274255
}
275256
}
276257

277-
impl #imp DekuContainerWrite for #ident #wher {
278-
fn to_bytes(&self) -> core::result::Result<Vec<u8>, ::#crate_::DekuError> {
279-
let mut out_buf = vec![];
280-
let mut __deku_writer = ::#crate_::writer::Writer::new(&mut out_buf);
281-
::#crate_::DekuWriter::to_writer(self, &mut __deku_writer, ())?;
282-
__deku_writer.finalize()?;
283-
Ok(out_buf)
284-
}
285-
286-
#[allow(unused_variables)]
287-
fn to_bits(&self) -> core::result::Result<::#crate_::bitvec::BitVec<u8, ::#crate_::bitvec::Msb0>, ::#crate_::DekuError> {
288-
let mut out_buf = vec![];
289-
let mut __deku_writer = ::#crate_::writer::Writer::new(&mut out_buf);
290-
::#crate_::DekuWriter::to_writer(self, &mut __deku_writer, ())?;
291-
let mut leftover = __deku_writer.leftover;
292-
let mut bv = ::#crate_::bitvec::BitVec::from_slice(&out_buf);
293-
bv.append(&mut leftover);
294-
Ok(bv)
295-
}
296-
}
258+
impl #imp DekuContainerWrite for #ident #wher {}
297259
})
298260
}
299261

src/lib.rs

+16-2
Original file line numberDiff line numberDiff line change
@@ -472,7 +472,13 @@ pub trait DekuContainerWrite: DekuWriter<()> {
472472
/// let bytes = s.to_bytes().unwrap();
473473
/// assert_eq!(bytes, [0x01, 0x02, 0x00, 0x03, 0x00, 0x00, 0x00]);
474474
/// ````
475-
fn to_bytes(&self) -> Result<Vec<u8>, DekuError>;
475+
fn to_bytes(&self) -> Result<Vec<u8>, DekuError> {
476+
let mut out_buf = Vec::new();
477+
let mut __deku_writer = Writer::new(&mut out_buf);
478+
DekuWriter::to_writer(self, &mut __deku_writer, ())?;
479+
__deku_writer.finalize()?;
480+
Ok(out_buf)
481+
}
476482

477483
/// Write struct/enum to BitVec
478484
///
@@ -495,7 +501,15 @@ pub trait DekuContainerWrite: DekuWriter<()> {
495501
/// let bits = test.to_bits().unwrap();
496502
/// assert_eq!(deku::bitvec::bitvec![1, 1, 1, 1, 0, 0, 0, 1, 1], bits);
497503
/// ```
498-
fn to_bits(&self) -> Result<bitvec::BitVec<u8, bitvec::Msb0>, DekuError>;
504+
fn to_bits(&self) -> Result<bitvec::BitVec<u8, bitvec::Msb0>, DekuError> {
505+
let mut out_buf = Vec::new();
506+
let mut __deku_writer = Writer::new(&mut out_buf);
507+
DekuWriter::to_writer(self, &mut __deku_writer, ())?;
508+
let mut leftover = __deku_writer.leftover;
509+
let mut bv = bitvec::BitVec::from_slice(&out_buf);
510+
bv.append(&mut leftover);
511+
Ok(bv)
512+
}
499513
}
500514

501515
/// "Updater" trait: apply mutations to a type

0 commit comments

Comments
 (0)