@@ -227,12 +227,61 @@ impl<E> From<E> for ReadExactError<E> {
227227 }
228228}
229229
230+ #[ cfg( feature = "std" ) ]
231+ impl From < ReadExactError < std:: io:: Error > > for std:: io:: Error {
232+ fn from ( err : ReadExactError < std:: io:: Error > ) -> Self {
233+ match err {
234+ ReadExactError :: UnexpectedEof => {
235+ std:: io:: Error :: new ( std:: io:: ErrorKind :: UnexpectedEof , "UnexpectedEof" . to_owned ( ) )
236+ }
237+ ReadExactError :: Other ( e) => to_std_error ( e) ,
238+ }
239+ }
240+ }
241+
242+ #[ cfg( feature = "std" ) ]
243+ impl From < WriteAllError < std:: io:: Error > > for std:: io:: Error {
244+ fn from ( err : WriteAllError < std:: io:: Error > ) -> Self {
245+ match err {
246+ WriteAllError :: WriteZero => {
247+ std:: io:: Error :: new ( std:: io:: ErrorKind :: WriteZero , "WriteZero" . to_owned ( ) )
248+ }
249+ WriteAllError :: Other ( e) => to_std_error ( e) ,
250+ }
251+ }
252+ }
253+
230254impl < E : fmt:: Debug > fmt:: Display for ReadExactError < E > {
231255 fn fmt ( & self , f : & mut fmt:: Formatter < ' _ > ) -> fmt:: Result {
232256 write ! ( f, "{:?}" , self )
233257 }
234258}
235259
260+ #[ cfg( feature = "std" ) ]
261+ /// Convert a embedded-io error to a std::io::Error
262+ pub fn to_std_error < T : crate :: Error > ( err : T ) -> std:: io:: Error {
263+ let kind = match err. kind ( ) {
264+ crate :: ErrorKind :: NotFound => std:: io:: ErrorKind :: NotFound ,
265+ crate :: ErrorKind :: PermissionDenied => std:: io:: ErrorKind :: PermissionDenied ,
266+ crate :: ErrorKind :: ConnectionRefused => std:: io:: ErrorKind :: ConnectionRefused ,
267+ crate :: ErrorKind :: ConnectionReset => std:: io:: ErrorKind :: ConnectionReset ,
268+ crate :: ErrorKind :: ConnectionAborted => std:: io:: ErrorKind :: ConnectionAborted ,
269+ crate :: ErrorKind :: NotConnected => std:: io:: ErrorKind :: NotConnected ,
270+ crate :: ErrorKind :: AddrInUse => std:: io:: ErrorKind :: AddrInUse ,
271+ crate :: ErrorKind :: AddrNotAvailable => std:: io:: ErrorKind :: AddrNotAvailable ,
272+ crate :: ErrorKind :: BrokenPipe => std:: io:: ErrorKind :: BrokenPipe ,
273+ crate :: ErrorKind :: AlreadyExists => std:: io:: ErrorKind :: AlreadyExists ,
274+ crate :: ErrorKind :: InvalidInput => std:: io:: ErrorKind :: InvalidInput ,
275+ crate :: ErrorKind :: InvalidData => std:: io:: ErrorKind :: InvalidData ,
276+ crate :: ErrorKind :: TimedOut => std:: io:: ErrorKind :: TimedOut ,
277+ crate :: ErrorKind :: Interrupted => std:: io:: ErrorKind :: Interrupted ,
278+ crate :: ErrorKind :: Unsupported => std:: io:: ErrorKind :: Unsupported ,
279+ crate :: ErrorKind :: OutOfMemory => std:: io:: ErrorKind :: OutOfMemory ,
280+ _ => std:: io:: ErrorKind :: Other ,
281+ } ;
282+ std:: io:: Error :: new ( kind, format ! ( "{:?}" , err) )
283+ }
284+
236285#[ cfg( feature = "std" ) ]
237286impl < E : fmt:: Debug > std:: error:: Error for ReadExactError < E > { }
238287
0 commit comments