gio/auto/
buffered_output_stream.rs1use crate::{ffi, FilterOutputStream, OutputStream, Seekable};
6use glib::{
7 prelude::*,
8 signal::{connect_raw, SignalHandlerId},
9 translate::*,
10};
11use std::boxed::Box as Box_;
12
13glib::wrapper! {
14 #[doc(alias = "GBufferedOutputStream")]
15 pub struct BufferedOutputStream(Object<ffi::GBufferedOutputStream, ffi::GBufferedOutputStreamClass>) @extends FilterOutputStream, OutputStream, @implements Seekable;
16
17 match fn {
18 type_ => || ffi::g_buffered_output_stream_get_type(),
19 }
20}
21
22impl BufferedOutputStream {
23 pub const NONE: Option<&'static BufferedOutputStream> = None;
24
25 #[doc(alias = "g_buffered_output_stream_new")]
26 pub fn new(base_stream: &impl IsA<OutputStream>) -> BufferedOutputStream {
27 unsafe {
28 OutputStream::from_glib_full(ffi::g_buffered_output_stream_new(
29 base_stream.as_ref().to_glib_none().0,
30 ))
31 .unsafe_cast()
32 }
33 }
34
35 #[doc(alias = "g_buffered_output_stream_new_sized")]
36 pub fn new_sized(base_stream: &impl IsA<OutputStream>, size: usize) -> BufferedOutputStream {
37 unsafe {
38 OutputStream::from_glib_full(ffi::g_buffered_output_stream_new_sized(
39 base_stream.as_ref().to_glib_none().0,
40 size,
41 ))
42 .unsafe_cast()
43 }
44 }
45
46 pub fn builder() -> BufferedOutputStreamBuilder {
51 BufferedOutputStreamBuilder::new()
52 }
53}
54
55impl Default for BufferedOutputStream {
56 fn default() -> Self {
57 glib::object::Object::new::<Self>()
58 }
59}
60
61#[must_use = "The builder must be built to be used"]
66pub struct BufferedOutputStreamBuilder {
67 builder: glib::object::ObjectBuilder<'static, BufferedOutputStream>,
68}
69
70impl BufferedOutputStreamBuilder {
71 fn new() -> Self {
72 Self {
73 builder: glib::object::Object::builder(),
74 }
75 }
76
77 pub fn auto_grow(self, auto_grow: bool) -> Self {
78 Self {
79 builder: self.builder.property("auto-grow", auto_grow),
80 }
81 }
82
83 pub fn buffer_size(self, buffer_size: u32) -> Self {
84 Self {
85 builder: self.builder.property("buffer-size", buffer_size),
86 }
87 }
88
89 pub fn base_stream(self, base_stream: &impl IsA<OutputStream>) -> Self {
90 Self {
91 builder: self
92 .builder
93 .property("base-stream", base_stream.clone().upcast()),
94 }
95 }
96
97 pub fn close_base_stream(self, close_base_stream: bool) -> Self {
98 Self {
99 builder: self
100 .builder
101 .property("close-base-stream", close_base_stream),
102 }
103 }
104
105 #[must_use = "Building the object from the builder is usually expensive and is not expected to have side effects"]
108 pub fn build(self) -> BufferedOutputStream {
109 self.builder.build()
110 }
111}
112
113pub trait BufferedOutputStreamExt: IsA<BufferedOutputStream> + 'static {
114 #[doc(alias = "g_buffered_output_stream_get_auto_grow")]
115 #[doc(alias = "get_auto_grow")]
116 #[doc(alias = "auto-grow")]
117 fn auto_grows(&self) -> bool {
118 unsafe {
119 from_glib(ffi::g_buffered_output_stream_get_auto_grow(
120 self.as_ref().to_glib_none().0,
121 ))
122 }
123 }
124
125 #[doc(alias = "g_buffered_output_stream_get_buffer_size")]
126 #[doc(alias = "get_buffer_size")]
127 #[doc(alias = "buffer-size")]
128 fn buffer_size(&self) -> usize {
129 unsafe { ffi::g_buffered_output_stream_get_buffer_size(self.as_ref().to_glib_none().0) }
130 }
131
132 #[doc(alias = "g_buffered_output_stream_set_auto_grow")]
133 #[doc(alias = "auto-grow")]
134 fn set_auto_grow(&self, auto_grow: bool) {
135 unsafe {
136 ffi::g_buffered_output_stream_set_auto_grow(
137 self.as_ref().to_glib_none().0,
138 auto_grow.into_glib(),
139 );
140 }
141 }
142
143 #[doc(alias = "g_buffered_output_stream_set_buffer_size")]
144 #[doc(alias = "buffer-size")]
145 fn set_buffer_size(&self, size: usize) {
146 unsafe {
147 ffi::g_buffered_output_stream_set_buffer_size(self.as_ref().to_glib_none().0, size);
148 }
149 }
150
151 #[doc(alias = "auto-grow")]
152 fn connect_auto_grow_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
153 unsafe extern "C" fn notify_auto_grow_trampoline<
154 P: IsA<BufferedOutputStream>,
155 F: Fn(&P) + 'static,
156 >(
157 this: *mut ffi::GBufferedOutputStream,
158 _param_spec: glib::ffi::gpointer,
159 f: glib::ffi::gpointer,
160 ) {
161 let f: &F = &*(f as *const F);
162 f(BufferedOutputStream::from_glib_borrow(this).unsafe_cast_ref())
163 }
164 unsafe {
165 let f: Box_<F> = Box_::new(f);
166 connect_raw(
167 self.as_ptr() as *mut _,
168 c"notify::auto-grow".as_ptr() as *const _,
169 Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
170 notify_auto_grow_trampoline::<Self, F> as *const (),
171 )),
172 Box_::into_raw(f),
173 )
174 }
175 }
176
177 #[doc(alias = "buffer-size")]
178 fn connect_buffer_size_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
179 unsafe extern "C" fn notify_buffer_size_trampoline<
180 P: IsA<BufferedOutputStream>,
181 F: Fn(&P) + 'static,
182 >(
183 this: *mut ffi::GBufferedOutputStream,
184 _param_spec: glib::ffi::gpointer,
185 f: glib::ffi::gpointer,
186 ) {
187 let f: &F = &*(f as *const F);
188 f(BufferedOutputStream::from_glib_borrow(this).unsafe_cast_ref())
189 }
190 unsafe {
191 let f: Box_<F> = Box_::new(f);
192 connect_raw(
193 self.as_ptr() as *mut _,
194 c"notify::buffer-size".as_ptr() as *const _,
195 Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
196 notify_buffer_size_trampoline::<Self, F> as *const (),
197 )),
198 Box_::into_raw(f),
199 )
200 }
201 }
202}
203
204impl<O: IsA<BufferedOutputStream>> BufferedOutputStreamExt for O {}