Struct Stash
pub struct Stash<'a, P, T>(pub P, pub <T as ToGlibPtr<'a, P>>::Storage)
where
P: Copy,
T: ToGlibPtr<'a, P> + ?Sized;Expand description
Helper type that stores temporary values used for translation.
P is the foreign type pointer and the first element of the tuple.
T is the Rust type that is translated.
The second element of the tuple is the temporary storage defined
by the implementation of ToGlibPtr<P> for T
Say you want to pass a *mut GdkWindowAttr to a foreign function. The Stash
will own a GdkWindowAttr and a CString that GdkWindowAttr::title points into.
ⓘ
impl <'a> ToGlibPtr<'a, *mut ffi::GdkWindowAttr> for WindowAttr {
type Storage = (Box<ffi::GdkWindowAttr>, Stash<'a, *const c_char, Option<String>>);
fn to_glib_none(&'a self) -> Stash<*mut ffi::GdkWindowAttr, WindowAttr> {
let title = self.title.to_glib_none();
let mut attrs = Box::new(ffi::GdkWindowAttr {
title: title.0,
// ....
});
Stash(&mut *attrs, (attrs, title))
}
}Tuple Fields§
§0: P§1: <T as ToGlibPtr<'a, P>>::StorageAuto Trait Implementations§
impl<'a, P, T> Freeze for Stash<'a, P, T>
impl<'a, P, T> RefUnwindSafe for Stash<'a, P, T>
impl<'a, P, T> Send for Stash<'a, P, T>
impl<'a, P, T> Sync for Stash<'a, P, T>
impl<'a, P, T> Unpin for Stash<'a, P, T>
impl<'a, P, T> UnwindSafe for Stash<'a, P, T>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more