#![allow(dead_code)] use std::fmt::{self, Display}; use std::io; use thiserror::Error; macro_rules! unimplemented_display { ($ty:ty) => { impl Display for $ty { fn fmt(&self, _formatter: &mut fmt::Formatter) -> fmt::Result { unimplemented!() } } }; } #[derive(Error, Debug)] struct BracedError { msg: String, pos: usize, } #[derive(Error, Debug)] struct TupleError(String, usize); #[derive(Error, Debug)] struct UnitError; #[derive(Error, Debug)] struct WithSource { #[source] cause: io::Error, } #[derive(Error, Debug)] struct WithAnyhow { #[source] cause: anyhow::Error, } #[derive(Error, Debug)] enum EnumError { Braced { #[source] cause: io::Error, }, Tuple(#[source] io::Error), Unit, } unimplemented_display!(BracedError); unimplemented_display!(TupleError); unimplemented_display!(UnitError); unimplemented_display!(WithSource); unimplemented_display!(WithAnyhow); unimplemented_display!(EnumError);