gio/auto/
filter_input_stream.rs1use gio_sys;
6use glib::object::Cast;
7use glib::object::IsA;
8use glib::signal::connect_raw;
9use glib::signal::SignalHandlerId;
10use glib::translate::*;
11use glib_sys;
12use std::boxed::Box as Box_;
13use std::fmt;
14use std::mem::transmute;
15use InputStream;
16
17glib_wrapper! {
18 pub struct FilterInputStream(Object<gio_sys::GFilterInputStream, gio_sys::GFilterInputStreamClass, FilterInputStreamClass>) @extends InputStream;
19
20 match fn {
21 get_type => || gio_sys::g_filter_input_stream_get_type(),
22 }
23}
24
25pub const NONE_FILTER_INPUT_STREAM: Option<&FilterInputStream> = None;
26
27pub trait FilterInputStreamExt: 'static {
28 fn get_base_stream(&self) -> Option<InputStream>;
29
30 fn get_close_base_stream(&self) -> bool;
31
32 fn set_close_base_stream(&self, close_base: bool);
33
34 fn connect_property_close_base_stream_notify<F: Fn(&Self) + 'static>(
35 &self,
36 f: F,
37 ) -> SignalHandlerId;
38}
39
40impl<O: IsA<FilterInputStream>> FilterInputStreamExt for O {
41 fn get_base_stream(&self) -> Option<InputStream> {
42 unsafe {
43 from_glib_none(gio_sys::g_filter_input_stream_get_base_stream(
44 self.as_ref().to_glib_none().0,
45 ))
46 }
47 }
48
49 fn get_close_base_stream(&self) -> bool {
50 unsafe {
51 from_glib(gio_sys::g_filter_input_stream_get_close_base_stream(
52 self.as_ref().to_glib_none().0,
53 ))
54 }
55 }
56
57 fn set_close_base_stream(&self, close_base: bool) {
58 unsafe {
59 gio_sys::g_filter_input_stream_set_close_base_stream(
60 self.as_ref().to_glib_none().0,
61 close_base.to_glib(),
62 );
63 }
64 }
65
66 fn connect_property_close_base_stream_notify<F: Fn(&Self) + 'static>(
67 &self,
68 f: F,
69 ) -> SignalHandlerId {
70 unsafe extern "C" fn notify_close_base_stream_trampoline<P, F: Fn(&P) + 'static>(
71 this: *mut gio_sys::GFilterInputStream,
72 _param_spec: glib_sys::gpointer,
73 f: glib_sys::gpointer,
74 ) where
75 P: IsA<FilterInputStream>,
76 {
77 let f: &F = &*(f as *const F);
78 f(&FilterInputStream::from_glib_borrow(this).unsafe_cast())
79 }
80 unsafe {
81 let f: Box_<F> = Box_::new(f);
82 connect_raw(
83 self.as_ptr() as *mut _,
84 b"notify::close-base-stream\0".as_ptr() as *const _,
85 Some(transmute(
86 notify_close_base_stream_trampoline::<Self, F> as usize,
87 )),
88 Box_::into_raw(f),
89 )
90 }
91 }
92}
93
94impl fmt::Display for FilterInputStream {
95 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
96 write!(f, "FilterInputStream")
97 }
98}