1use 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}