//! These modules show an example of code generated by the macro. **IT MUST NOT BE //! USED OUTSIDE THIS CRATE**. //! //! This is the basic error structure. You can see that `ErrorKind` //! has been populated in a variety of ways. All `ErrorKind`s get a //! `Msg` variant for basic errors. When strings are converted to //! `ErrorKind`s they become `ErrorKind::Msg`. The "links" defined in //! the macro are expanded to the `Inner` variant, and the //! "foreign links" to the `Io` variant. //! //! Both types come with a variety of `From` conversions as well: //! `Error` can be created from `ErrorKind`, `&str` and `String`, //! and the `links` and `foreign_links` error types. `ErrorKind` //! can be created from the corresponding `ErrorKind`s of the link //! types, as well as from `&str` and `String`. //! //! `into()` and `From::from` are used heavily to massage types into //! the right shape. Which one to use in any specific case depends on //! the influence of type inference, but there are some patterns that //! arise frequently. /// Another code generated by the macro. pub mod inner { error_chain! {} } error_chain! { links { Inner(inner::Error, inner::ErrorKind) #[doc = "Link to another `ErrorChain`."]; } foreign_links { Io(::std::io::Error) #[doc = "Link to a `std::io::Error` type."]; } errors { #[doc = "A custom error kind."] Custom } }