use std::os::windows::io::{AsRawHandle, FromRawHandle, IntoRawHandle, RawHandle};
use glib::{prelude::*, translate::*};
use crate::InputStream;
glib::wrapper! {
pub struct Win32InputStream(Object<ffi::GWin32InputStream, ffi::GWin32InputStreamClass>) @extends InputStream;
match fn {
type_ => || ffi::g_win32_input_stream_get_type(),
}
}
pub trait Win32InputStreamExt: 'static {
#[doc(alias = "g_win32_input_stream_get_close_handle")]
#[doc(alias = "get_close_handle")]
fn closes_handle(&self) -> bool;
}
impl<O: IsA<Win32InputStream>> Win32InputStreamExt for O {
fn closes_handle(&self) -> bool {
unsafe {
from_glib(ffi::g_win32_input_stream_get_close_handle(
self.as_ref().to_glib_none().0,
))
}
}
}
impl Win32InputStream {
pub const NONE: Option<&'static Win32InputStream> = None;
#[doc(alias = "g_win32_input_stream_new")]
pub unsafe fn take_handle(handle: impl IntoRawHandle) -> Win32InputStream {
let handle = handle.into_raw_handle();
let close_handle = true.into_glib();
InputStream::from_glib_full(ffi::g_win32_input_stream_new(handle, close_handle))
.unsafe_cast()
}
#[doc(alias = "g_win32_input_stream_new")]
pub unsafe fn with_handle<T: AsRawHandle>(handle: T) -> Win32InputStream {
let handle = handle.as_raw_handle();
let close_handle = false.into_glib();
InputStream::from_glib_full(ffi::g_win32_input_stream_new(handle, close_handle))
.unsafe_cast()
}
}
impl AsRawHandle for Win32InputStream {
fn as_raw_handle(&self) -> RawHandle {
unsafe { ffi::g_win32_input_stream_get_handle(self.to_glib_none().0) as _ }
}
}
mod sealed {
pub trait Sealed {}
impl<T: super::IsA<super::Win32InputStream>> Sealed for T {}
}
pub trait Win32InputStreamExtManual: sealed::Sealed + IsA<Win32InputStream> + Sized {
#[doc(alias = "g_win32_input_stream_get_handle")]
#[doc(alias = "get_handle")]
fn handle<T: FromRawHandle>(&self) -> T {
unsafe {
T::from_raw_handle(ffi::g_win32_input_stream_get_handle(
self.as_ref().to_glib_none().0,
))
}
}
#[doc(alias = "g_win32_input_stream_set_close_handle")]
unsafe fn set_close_handle(&self, close_handle: bool) {
ffi::g_win32_input_stream_set_close_handle(
self.as_ref().to_glib_none().0,
close_handle.into_glib(),
);
}
}
impl<O: IsA<Win32InputStream>> Win32InputStreamExtManual for O {}