1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
// Rust language amplification library providing multiple generic trait // implementations, type wrappers, derive macros and other language enhancements // // Written in 2019-2020 by // Dr. Maxim Orlovsky <orlovsky@pandoracore.com> // Martin Habovstiak <martin.habovstiak@gmail.com> // // To the extent possible under law, the author(s) have dedicated all // copyright and related and neighboring rights to this software to // the public domain worldwide. This software is distributed without // any warranty. // // You should have received a copy of the MIT License // along with this software. // If not, see <https://opensource.org/licenses/MIT>. use ::std::io; use ::std::fmt::{Debug, Display, Formatter, self}; use crate::Wrapper; /// Copyable & cloneable I/O error type represented by the error kind function. /// /// Available only when both `std` and `derive` features are present. /// /// # Example /// ``` /// use amplify::{IoError, Error, Display, From}; /// /// #[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, From, Debug, Display, Error)] /// enum Error { /// #[from(::std::io::Error)] /// #[display(inner)] /// Io(IoError), /// } /// ``` #[derive(Wrapper, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, From, Error)] #[amplify_crate(crate)] pub struct IoError(io::ErrorKind); impl Display for IoError { fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result { let err = io::Error::from(*self.as_inner()); Display::fmt(&err, f) } } impl Debug for IoError { fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result { let err = io::Error::from(*self.as_inner()); Debug::fmt(&err, f) } } impl From<io::Error> for IoError { fn from(err: io::Error) -> Self { IoError::from_inner(err.kind()) } } impl From<IoError> for io::Error { fn from(err: IoError) -> Self { io::Error::from(err.into_inner()) } }