| #![deny(clippy::fallible_impl_from)] | |
| // docs example | |
| struct Foo(i32); | |
| impl From<String> for Foo { | |
| //~^ fallible_impl_from | |
| fn from(s: String) -> Self { | |
| Foo(s.parse().unwrap()) | |
| } | |
| } | |
| struct Valid(Vec<u8>); | |
| impl<'a> From<&'a str> for Valid { | |
| fn from(s: &'a str) -> Valid { | |
| Valid(s.to_owned().into_bytes()) | |
| } | |
| } | |
| impl From<usize> for Valid { | |
| fn from(i: usize) -> Valid { | |
| Valid(Vec::with_capacity(i)) | |
| } | |
| } | |
| struct Invalid; | |
| impl From<usize> for Invalid { | |
| //~^ fallible_impl_from | |
| fn from(i: usize) -> Invalid { | |
| if i != 42 { | |
| panic!(); | |
| } | |
| Invalid | |
| } | |
| } | |
| impl From<Option<String>> for Invalid { | |
| //~^ fallible_impl_from | |
| fn from(s: Option<String>) -> Invalid { | |
| let s = s.unwrap(); | |
| if !s.is_empty() { | |
| panic!("42"); | |
| } else if s.parse::<u32>().unwrap() != 42 { | |
| panic!("{:?}", s); | |
| } | |
| Invalid | |
| } | |
| } | |
| trait ProjStrTrait { | |
| type ProjString; | |
| } | |
| impl<T> ProjStrTrait for Box<T> { | |
| type ProjString = String; | |
| } | |
| impl<'a> From<&'a mut <Box<u32> as ProjStrTrait>::ProjString> for Invalid { | |
| //~^ fallible_impl_from | |
| fn from(s: &'a mut <Box<u32> as ProjStrTrait>::ProjString) -> Invalid { | |
| if s.parse::<u32>().ok().unwrap() != 42 { | |
| panic!("{s:?}"); | |
| } | |
| Invalid | |
| } | |
| } | |
| struct Unreachable; | |
| impl From<String> for Unreachable { | |
| fn from(s: String) -> Unreachable { | |
| if s.is_empty() { | |
| return Unreachable; | |
| } | |
| match s.chars().next() { | |
| Some(_) => Unreachable, | |
| None => unreachable!(), // do not lint the unreachable macro | |
| } | |
| } | |
| } | |
| fn main() {} |