diff --git a/serde_codegen/src/bound.rs b/serde_codegen/src/bound.rs index 0f421959..7bd5ddc6 100644 --- a/serde_codegen/src/bound.rs +++ b/serde_codegen/src/bound.rs @@ -79,6 +79,13 @@ pub fn with_bound( } impl visit::Visitor for FindTyParams { fn visit_path(&mut self, path: &ast::Path, _id: ast::NodeId) { + if let Some(seg) = path.segments.last() { + if seg.identifier.name.as_str() == "PhantomData" { + // Hardcoded exception, because PhantomData implements + // Serialize and Deserialize whether or not T implements it. + return; + } + } if !path.global && path.segments.len() == 1 { let id = path.segments[0].identifier.name; if self.all_ty_params.contains(&id) { diff --git a/testing/tests/test_gen.rs b/testing/tests/test_gen.rs index 4cef82a3..0acfdb36 100644 --- a/testing/tests/test_gen.rs +++ b/testing/tests/test_gen.rs @@ -35,6 +35,12 @@ fn test_gen() { } assert::(); + #[derive(Serialize, Deserialize)] + struct PhantomT { + t: PhantomData, + } + assert::>(); + #[derive(Serialize, Deserialize)] struct Bounds { t: T,