pub struct ManagedCResource<T> { /* private fields */ }Expand description
A custom struct for managing C resources with automatic cleanup.
It handles initialisation and clean-up of the resource and ensures that resources
are properly released when they go out of scope. All teardown goes through the
single cleanup closure (if set), which is the FFI close function (e.g.
aeron_close). The Rc dependency graph ensures parents outlive children
structurally — you cannot race aeron_close ahead of a live child handle.
Implementations§
Source§impl<T> ManagedCResource<T>
impl<T> ManagedCResource<T>
Sourcepub fn new(
init: impl FnOnce(*mut *mut T) -> i32,
cleanup: Option<CleanupBox<T>>,
cleanup_struct: bool,
) -> Result<Self, AeronCError>
pub fn new( init: impl FnOnce(*mut *mut T) -> i32, cleanup: Option<CleanupBox<T>>, cleanup_struct: bool, ) -> Result<Self, AeronCError>
Creates a new ManagedCResource with a given initializer and cleanup function.
The initializer is a closure that attempts to initialize the resource.
If initialization fails, the initializer should return an error code.
The cleanup function is used to release the resource when it’s no longer needed.
cleanup_struct where it should clean up the struct in rust
pub fn initialise( init: impl FnOnce(*mut *mut T) -> i32 + Sized, ) -> Result<*mut T, AeronCError>
Sourcepub unsafe fn get_mut(&self) -> &mut T
pub unsafe fn get_mut(&self) -> &mut T
Mutable access to the underlying C struct, minted from &self.
§Safety
No other reference (& or &mut) to the underlying struct may be
alive while the returned &mut is in use.
pub fn add_dependency<D: Any>(&self, dep: D)
pub fn get_dependency<V: Clone + 'static>(&self) -> Option<V>
pub fn is_resource_released(&self) -> bool
pub fn mark_resource_released(&self)
Trait Implementations§
Source§impl<T> Debug for ManagedCResource<T>
impl<T> Debug for ManagedCResource<T>
Source§impl<T> Drop for ManagedCResource<T>
impl<T> Drop for ManagedCResource<T>
Auto Trait Implementations§
impl<T> !Freeze for ManagedCResource<T>
impl<T> !RefUnwindSafe for ManagedCResource<T>
impl<T> !Send for ManagedCResource<T>
impl<T> !Sync for ManagedCResource<T>
impl<T> !UnwindSafe for ManagedCResource<T>
impl<T> Unpin for ManagedCResource<T>
impl<T> UnsafeUnpin for ManagedCResource<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
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>
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>
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