From f1b40724442b45ff904cde81bd250e317391555a Mon Sep 17 00:00:00 2001 From: David Tolnay Date: Wed, 18 May 2016 23:46:06 -0700 Subject: [PATCH] Strip more references --- serde_codegen/src/bound.rs | 8 ++++---- serde_tests/tests/test_gen.rs | 6 ++++++ 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/serde_codegen/src/bound.rs b/serde_codegen/src/bound.rs index c46cc2b0..4f563e9b 100644 --- a/serde_codegen/src/bound.rs +++ b/serde_codegen/src/bound.rs @@ -139,9 +139,9 @@ fn contains_generic(ty: &ast::Ty, generics: &ast::Generics) -> bool { // // impl<'a, T> Serialize for Test<'a, T> // where T: Serialize { ... } -fn strip_reference(ty: &P) -> &P { - match ty.node { - ast::TyKind::Rptr(_, ref mut_ty) => &mut_ty.ty, - _ => ty +fn strip_reference(mut ty: &P) -> &P { + while let ast::TyKind::Rptr(_, ref mut_ty) = ty.node { + ty = &mut_ty.ty; } + ty } diff --git a/serde_tests/tests/test_gen.rs b/serde_tests/tests/test_gen.rs index 805c100d..8410b2c3 100644 --- a/serde_tests/tests/test_gen.rs +++ b/serde_tests/tests/test_gen.rs @@ -49,6 +49,12 @@ enum EnumWith { i: i32 }, } +#[derive(Serialize)] +struct MultipleRef<'a, 'b, 'c, T> where T: 'c, 'c: 'b, 'b: 'a { + t: T, + rrrt: &'a &'b &'c T, +} + ////////////////////////////////////////////////////////////////////////// fn ser_i32(_: &i32, _: &mut S) -> Result<(), S::Error> { panic!() }