mirror of https://git.sr.ht/~stygianentity/bincode
Made the derive macros automatically implement the required traits on generic arguments (#454)
This commit is contained in:
parent
a5255465bd
commit
7690da5203
|
|
@ -16,4 +16,4 @@ description = "Implementation of #[derive(Encode, Decode)] for bincode"
|
|||
proc-macro = true
|
||||
|
||||
[dependencies]
|
||||
virtue = "0.0.2"
|
||||
virtue = "0.0.3"
|
||||
|
|
|
|||
|
|
@ -21,6 +21,11 @@ impl DeriveEnum {
|
|||
pub fn generate_encode(self, generator: &mut Generator) -> Result<()> {
|
||||
generator
|
||||
.impl_for("bincode::enc::Encode")?
|
||||
.modify_generic_constraints(|generics, where_constraints| {
|
||||
for g in generics.iter_generics() {
|
||||
where_constraints.push_constraint(g, "bincode::enc::Encode").unwrap();
|
||||
}
|
||||
})
|
||||
.generate_fn("encode")
|
||||
.with_generic("E", ["bincode::enc::Encoder"])
|
||||
.with_self_arg(FnSelfArg::RefSelf)
|
||||
|
|
@ -180,6 +185,11 @@ impl DeriveEnum {
|
|||
|
||||
generator
|
||||
.impl_for("bincode::Decode")?
|
||||
.modify_generic_constraints(|generics, where_constraints| {
|
||||
for g in generics.iter_generics() {
|
||||
where_constraints.push_constraint(g, "bincode::enc::Decode").unwrap();
|
||||
}
|
||||
})
|
||||
.generate_fn("decode")
|
||||
.with_generic("D", ["bincode::de::Decoder"])
|
||||
.with_arg("mut decoder", "D")
|
||||
|
|
@ -247,6 +257,11 @@ impl DeriveEnum {
|
|||
let enum_name = generator.target_name().to_string();
|
||||
|
||||
generator.impl_for_with_lifetimes("bincode::de::BorrowDecode", &["__de"])?
|
||||
.modify_generic_constraints(|generics, where_constraints| {
|
||||
for g in generics.iter_generics() {
|
||||
where_constraints.push_constraint(g, "bincode::enc::BorrowDecode").unwrap();
|
||||
}
|
||||
})
|
||||
.generate_fn("borrow_decode")
|
||||
.with_generic("D", ["bincode::de::BorrowDecoder<'__de>"])
|
||||
.with_arg("mut decoder", "D")
|
||||
|
|
|
|||
|
|
@ -12,8 +12,12 @@ impl DeriveStruct {
|
|||
let DeriveStruct { fields } = self;
|
||||
|
||||
generator
|
||||
.impl_for("bincode::enc::Encode")
|
||||
.unwrap()
|
||||
.impl_for("bincode::enc::Encode")?
|
||||
.modify_generic_constraints(|generics, where_constraints| {
|
||||
for g in generics.iter_generics() {
|
||||
where_constraints.push_constraint(g, "bincode::enc::Encode").unwrap();
|
||||
}
|
||||
})
|
||||
.generate_fn("encode")
|
||||
.with_generic("E", ["bincode::enc::Encoder"])
|
||||
.with_self_arg(virtue::generate::FnSelfArg::RefSelf)
|
||||
|
|
@ -46,8 +50,12 @@ impl DeriveStruct {
|
|||
let DeriveStruct { fields } = self;
|
||||
|
||||
generator
|
||||
.impl_for("bincode::Decode")
|
||||
.unwrap()
|
||||
.impl_for("bincode::Decode")?
|
||||
.modify_generic_constraints(|generics, where_constraints| {
|
||||
for g in generics.iter_generics() {
|
||||
where_constraints.push_constraint(g, "bincode::de::Decode").unwrap();
|
||||
}
|
||||
})
|
||||
.generate_fn("decode")
|
||||
.with_generic("D", ["bincode::de::Decoder"])
|
||||
.with_arg("mut decoder", "D")
|
||||
|
|
@ -93,8 +101,12 @@ impl DeriveStruct {
|
|||
let DeriveStruct { fields } = self;
|
||||
|
||||
generator
|
||||
.impl_for_with_lifetimes("bincode::de::BorrowDecode", &["__de"])
|
||||
.unwrap()
|
||||
.impl_for_with_lifetimes("bincode::de::BorrowDecode", &["__de"])?
|
||||
.modify_generic_constraints(|generics, where_constraints| {
|
||||
for g in generics.iter_generics() {
|
||||
where_constraints.push_constraint(g, "bincode::de::BorrowDecode").unwrap();
|
||||
}
|
||||
})
|
||||
.generate_fn("borrow_decode")
|
||||
.with_generic("D", ["bincode::de::BorrowDecoder<'__de>"])
|
||||
.with_arg("mut decoder", "D")
|
||||
|
|
|
|||
|
|
@ -1,17 +1,15 @@
|
|||
#![cfg(feature = "derive")]
|
||||
|
||||
use bincode::config::Configuration;
|
||||
use bincode::{de::Decode, enc::Encode};
|
||||
|
||||
#[derive(bincode::Encode, PartialEq, Debug)]
|
||||
pub(crate) struct Test<T: Encode> {
|
||||
pub(crate) struct Test<T> {
|
||||
a: T,
|
||||
b: u32,
|
||||
c: u8,
|
||||
}
|
||||
|
||||
#[derive(bincode::Decode, PartialEq, Debug, Eq)]
|
||||
pub struct Test2<T: Decode> {
|
||||
pub struct Test2<T> {
|
||||
a: T,
|
||||
b: u32,
|
||||
c: u32,
|
||||
|
|
|
|||
Loading…
Reference in New Issue