gio/
file_descriptor_based.rs

1// Take a look at the license at the top of the repository in the LICENSE file.
2
3#[cfg(unix)]
4use std::os::unix::io::{AsFd, AsRawFd, BorrowedFd, FromRawFd, RawFd};
5
6use crate::ffi;
7use glib::{prelude::*, translate::*};
8#[cfg(all(not(unix), docsrs))]
9use socket::{AsFd, AsRawFd, BorrowedFd, FromRawFd, IntoRawFd, RawFd};
10
11glib::wrapper! {
12    #[doc(alias = "GFileDescriptorBased")]
13    pub struct FileDescriptorBased(Interface<ffi::GFileDescriptorBased, ffi::GFileDescriptorBasedIface>);
14
15    match fn {
16        type_ => || ffi::g_file_descriptor_based_get_type(),
17    }
18}
19
20impl FileDescriptorBased {
21    pub const NONE: Option<&'static FileDescriptorBased> = None;
22}
23
24impl AsRawFd for FileDescriptorBased {
25    fn as_raw_fd(&self) -> RawFd {
26        unsafe { ffi::g_file_descriptor_based_get_fd(self.to_glib_none().0) as _ }
27    }
28}
29
30impl AsFd for FileDescriptorBased {
31    fn as_fd(&self) -> BorrowedFd<'_> {
32        unsafe { BorrowedFd::borrow_raw(self.as_raw_fd()) }
33    }
34}
35
36pub trait FileDescriptorBasedExtManual: IsA<FileDescriptorBased> + 'static {
37    #[doc(alias = "g_file_descriptor_based_get_fd")]
38    #[doc(alias = "get_fd")]
39    fn fd<T: FromRawFd>(&self) -> T {
40        unsafe {
41            T::from_raw_fd(ffi::g_file_descriptor_based_get_fd(
42                self.as_ref().to_glib_none().0,
43            ))
44        }
45    }
46}
47
48impl<O: IsA<FileDescriptorBased>> FileDescriptorBasedExtManual for O {}