[librsvg: 2/14] c_api: turn into_bool_gerror into a trait so we can do result.into_gerror()
- From: Federico Mena Quintero <federico src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [librsvg: 2/14] c_api: turn into_bool_gerror into a trait so we can do result.into_gerror()
- Date: Tue, 23 Mar 2021 19:57:56 +0000 (UTC)
commit 3f9cbce08da504afe90dc351131761675f1fc60a
Author: Federico Mena Quintero <federico gnome org>
Date: Mon Mar 22 13:33:35 2021 -0600
c_api: turn into_bool_gerror into a trait so we can do result.into_gerror()
src/c_api/handle.rs | 58 ++++++++++++++++++++++++++++++++---------------------
1 file changed, 35 insertions(+), 23 deletions(-)
---
diff --git a/src/c_api/handle.rs b/src/c_api/handle.rs
index 59f1c2e0..ba30814e 100644
--- a/src/c_api/handle.rs
+++ b/src/c_api/handle.rs
@@ -1353,13 +1353,23 @@ pub unsafe extern "C" fn rsvg_handle_internal_set_testing(
rhandle.set_testing(from_glib(testing));
}
-fn into_bool_gerror<E: fmt::Display>(result: Result<(), E>, error: *mut *mut glib_sys::GError) ->
glib_sys::gboolean {
- match result {
- Ok(()) => true.to_glib(),
+trait IntoGError {
+ type GlibResult;
- Err(e) => {
- set_gerror(error, 0, &format!("{}", e));
- false.to_glib()
+ fn into_gerror(self, error: *mut *mut glib_sys::GError) -> Self::GlibResult;
+}
+
+impl<E: fmt::Display> IntoGError for Result<(), E> {
+ type GlibResult = glib_sys::gboolean;
+
+ fn into_gerror(self, error: *mut *mut glib_sys::GError) -> Self::GlibResult {
+ match self {
+ Ok(()) => true.to_glib(),
+
+ Err(e) => {
+ set_gerror(error, 0, &format!("{}", e));
+ false.to_glib()
+ }
}
}
}
@@ -1385,8 +1395,9 @@ pub unsafe extern "C" fn rsvg_handle_read_stream_sync(
let stream = gio::InputStream::from_glib_none(stream);
let cancellable: Option<gio::Cancellable> = from_glib_none(cancellable);
- let res = rhandle.read_stream_sync(&stream, cancellable.as_ref());
- into_bool_gerror(res, error)
+ rhandle
+ .read_stream_sync(&stream, cancellable.as_ref())
+ .into_gerror(error)
}
#[no_mangle]
@@ -1425,8 +1436,7 @@ pub unsafe extern "C" fn rsvg_handle_close(
let rhandle = get_rust_handle(handle);
- let res = rhandle.close();
- into_bool_gerror(res, error)
+ rhandle.close().into_gerror(error)
}
#[no_mangle]
@@ -2031,19 +2041,20 @@ pub unsafe extern "C" fn rsvg_handle_get_geometry_for_element(
let id: Option<String> = from_glib_none(id);
- let res = rhandle.get_geometry_for_element(id.as_deref()).map(|(ink_rect, logical_rect)| {
- if !out_ink_rect.is_null() {
- *out_ink_rect = ink_rect;
- }
-
- if !out_logical_rect.is_null() {
- *out_logical_rect = logical_rect;
- }
+ rhandle
+ .get_geometry_for_element(id.as_deref())
+ .map(|(ink_rect, logical_rect)| {
+ if !out_ink_rect.is_null() {
+ *out_ink_rect = ink_rect;
+ }
- ()
- });
+ if !out_logical_rect.is_null() {
+ *out_logical_rect = logical_rect;
+ }
- into_bool_gerror(res, error)
+ ()
+ })
+ .into_gerror(error)
}
#[no_mangle]
@@ -2067,8 +2078,9 @@ pub unsafe extern "C" fn rsvg_handle_render_element(
let cr = from_glib_none(cr);
let id: Option<String> = from_glib_none(id);
- let res = rhandle.render_element(&cr, id.as_deref(), &(*element_viewport).into());
- into_bool_gerror(res, error)
+ rhandle
+ .render_element(&cr, id.as_deref(), &(*element_viewport).into())
+ .into_gerror(error)
}
#[no_mangle]
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]