gio/
error.rs

1// Take a look at the license at the top of the repository in the LICENSE file.
2
3use std::io;
4
5#[cfg(feature = "v2_74")]
6use crate::glib::translate::*;
7#[cfg(feature = "v2_74")]
8use crate::glib::FileError;
9use crate::IOErrorEnum;
10
11impl From<IOErrorEnum> for io::ErrorKind {
12    fn from(kind: IOErrorEnum) -> Self {
13        match kind {
14            IOErrorEnum::NotFound => Self::NotFound,
15            IOErrorEnum::Exists => Self::AlreadyExists,
16            IOErrorEnum::InvalidFilename => Self::InvalidInput,
17            IOErrorEnum::InvalidArgument => Self::InvalidInput,
18            IOErrorEnum::PermissionDenied => Self::PermissionDenied,
19            IOErrorEnum::AddressInUse => Self::AddrInUse,
20            IOErrorEnum::TimedOut => Self::TimedOut,
21            IOErrorEnum::WouldBlock => Self::WouldBlock,
22            IOErrorEnum::InvalidData => Self::InvalidData,
23            IOErrorEnum::ConnectionRefused => Self::ConnectionRefused,
24            IOErrorEnum::BrokenPipe => Self::BrokenPipe,
25            IOErrorEnum::NotConnected => Self::NotConnected,
26            _ => Self::Other,
27        }
28    }
29}
30
31pub(crate) fn to_std_io_result<T>(result: Result<T, glib::Error>) -> io::Result<T> {
32    result.map_err(|g_error| match g_error.kind::<IOErrorEnum>() {
33        Some(io_error_enum) => io::Error::new(io_error_enum.into(), g_error),
34        None => io::Error::new(io::ErrorKind::Other, g_error),
35    })
36}
37
38#[cfg(feature = "v2_74")]
39#[cfg_attr(docsrs, doc(cfg(feature = "v2_74")))]
40impl From<FileError> for IOErrorEnum {
41    #[doc(alias = "g_io_error_from_file_error")]
42    fn from(e: FileError) -> Self {
43        unsafe { from_glib(crate::ffi::g_io_error_from_file_error(e.into_glib())) }
44    }
45}