|  | #![allow(clippy::extra_unused_type_parameters)] | 
|  |  | 
|  | use std::io; | 
|  | use thiserror::Error; | 
|  |  | 
|  | #[derive(Error, Debug)] | 
|  | #[error("...")] | 
|  | pub struct ErrorStruct { | 
|  | #[from] | 
|  | source: io::Error, | 
|  | } | 
|  |  | 
|  | #[derive(Error, Debug)] | 
|  | #[error("...")] | 
|  | pub struct ErrorStructOptional { | 
|  | #[from] | 
|  | source: Option<io::Error>, | 
|  | } | 
|  |  | 
|  | #[derive(Error, Debug)] | 
|  | #[error("...")] | 
|  | pub struct ErrorTuple(#[from] io::Error); | 
|  |  | 
|  | #[derive(Error, Debug)] | 
|  | #[error("...")] | 
|  | pub struct ErrorTupleOptional(#[from] Option<io::Error>); | 
|  |  | 
|  | #[derive(Error, Debug)] | 
|  | #[error("...")] | 
|  | pub enum ErrorEnum { | 
|  | Test { | 
|  | #[from] | 
|  | source: io::Error, | 
|  | }, | 
|  | } | 
|  |  | 
|  | #[derive(Error, Debug)] | 
|  | #[error("...")] | 
|  | pub enum ErrorEnumOptional { | 
|  | Test { | 
|  | #[from] | 
|  | source: Option<io::Error>, | 
|  | }, | 
|  | } | 
|  |  | 
|  | #[derive(Error, Debug)] | 
|  | #[error("...")] | 
|  | pub enum Many { | 
|  | Any(#[from] anyhow::Error), | 
|  | Io(#[from] io::Error), | 
|  | } | 
|  |  | 
|  | fn assert_impl<T: From<io::Error>>() {} | 
|  |  | 
|  | #[test] | 
|  | fn test_from() { | 
|  | assert_impl::<ErrorStruct>(); | 
|  | assert_impl::<ErrorStructOptional>(); | 
|  | assert_impl::<ErrorTuple>(); | 
|  | assert_impl::<ErrorTupleOptional>(); | 
|  | assert_impl::<ErrorEnum>(); | 
|  | assert_impl::<ErrorEnumOptional>(); | 
|  | assert_impl::<Many>(); | 
|  | } |