| #![warn(clippy::unsafe_derive_deserialize)] |
| #![allow(unused, clippy::missing_safety_doc)] |
| |
| extern crate serde; |
| |
| use serde::Deserialize; |
| |
| #[derive(Deserialize)] |
| //~^ ERROR: you are deriving `serde::Deserialize` on a type that has methods using `unsafe |
| pub struct A; |
| impl A { |
| pub unsafe fn new(_a: i32, _b: i32) -> Self { |
| Self {} |
| } |
| } |
| |
| #[derive(Deserialize)] |
| //~^ ERROR: you are deriving `serde::Deserialize` on a type that has methods using `unsafe |
| pub struct B; |
| impl B { |
| pub unsafe fn unsafe_method(&self) {} |
| } |
| |
| #[derive(Deserialize)] |
| //~^ ERROR: you are deriving `serde::Deserialize` on a type that has methods using `unsafe |
| pub struct C; |
| impl C { |
| pub fn unsafe_block(&self) { |
| unsafe {} |
| } |
| } |
| |
| #[derive(Deserialize)] |
| //~^ ERROR: you are deriving `serde::Deserialize` on a type that has methods using `unsafe |
| pub struct D; |
| impl D { |
| pub fn inner_unsafe_fn(&self) { |
| unsafe fn inner() {} |
| } |
| } |
| |
| // Does not derive `Deserialize`, should be ignored |
| pub struct E; |
| impl E { |
| pub unsafe fn new(_a: i32, _b: i32) -> Self { |
| Self {} |
| } |
| |
| pub unsafe fn unsafe_method(&self) {} |
| |
| pub fn unsafe_block(&self) { |
| unsafe {} |
| } |
| |
| pub fn inner_unsafe_fn(&self) { |
| unsafe fn inner() {} |
| } |
| } |
| |
| // Does not have methods using `unsafe`, should be ignored |
| #[derive(Deserialize)] |
| pub struct F; |
| |
| // Check that we honor the `allow` attribute on the ADT |
| #[allow(clippy::unsafe_derive_deserialize)] |
| #[derive(Deserialize)] |
| pub struct G; |
| impl G { |
| pub fn unsafe_block(&self) { |
| unsafe {} |
| } |
| } |
| |
| // Check that we honor the `expect` attribute on the ADT |
| #[expect(clippy::unsafe_derive_deserialize)] |
| #[derive(Deserialize)] |
| pub struct H; |
| impl H { |
| pub fn unsafe_block(&self) { |
| unsafe {} |
| } |
| } |
| |
| fn main() {} |