pub struct OnceCellDropStrategy<M: Mode> {
pub inner: Arc<OnceCell<Error>>,
/* private fields */
}Expand description
A try drop strategy which sets an error value once.
This try drop strategy can only handle single errors. If you want to handle multiple errors,
see the BroadcastDropStrategy.
The most common use case of this is when you want to get an error from inside a function which
calls TryDrop.
§Examples
ⓘ
use once_cell::sync::OnceCell;
use std::sync::Arc;
use try_drop::drop_strategies::once_cell::Ignore;
use try_drop::drop_strategies::OnceCellTryDropStrategy;
fn calls_try_drop(may_fail: ThisDropMayFail) {
// do something with `may_fail`
}
let error = Arc::new(OnceCell::new());
let strategy = OnceCellTryDropStrategy::<Ignore>::new(Arc::clone(&error));
let may_fail = ThisDropMayFail::new_with_strategy(strategy);
calls_try_drop(may_fail);
if let Some(error) = Arc::try_unwrap(error)
.expect("arc still referenced by `calls_try_drop`")
.take()
{
println!("an error occurred in `calls_try_drop`: {error}")
}Fields§
§inner: Arc<OnceCell<Error>>The inner error value.
Implementations§
Trait Implementations§
Source§impl<M: Clone + Mode> Clone for OnceCellDropStrategy<M>
impl<M: Clone + Mode> Clone for OnceCellDropStrategy<M>
Source§fn clone(&self) -> OnceCellDropStrategy<M>
fn clone(&self) -> OnceCellDropStrategy<M>
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl<M: Default + Mode> Default for OnceCellDropStrategy<M>
impl<M: Default + Mode> Default for OnceCellDropStrategy<M>
Source§fn default() -> OnceCellDropStrategy<M>
fn default() -> OnceCellDropStrategy<M>
Returns the “default value” for a type. Read more
Source§impl TryDropStrategy for OnceCellDropStrategy<Ignore>
impl TryDropStrategy for OnceCellDropStrategy<Ignore>
Source§fn handle_error(&self, error: Error)
fn handle_error(&self, error: Error)
Handle the drop error.
Auto Trait Implementations§
impl<M> Freeze for OnceCellDropStrategy<M>
impl<M> RefUnwindSafe for OnceCellDropStrategy<M>where
M: RefUnwindSafe,
impl<M> Send for OnceCellDropStrategy<M>where
M: Send,
impl<M> Sync for OnceCellDropStrategy<M>where
M: Sync,
impl<M> Unpin for OnceCellDropStrategy<M>where
M: Unpin,
impl<M> UnwindSafe for OnceCellDropStrategy<M>where
M: UnwindSafe,
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Convert
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Convert
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
Convert
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
Convert
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T> DynFallibleTryDropStrategy for Twhere
T: FallibleTryDropStrategy,
impl<T> DynFallibleTryDropStrategy for Twhere
T: FallibleTryDropStrategy,
Source§impl<TDS> FallibleTryDropStrategy for TDSwhere
TDS: TryDropStrategy,
impl<TDS> FallibleTryDropStrategy for TDSwhere
TDS: TryDropStrategy,
Source§type Error = Infallible
type Error = Infallible
The type of the error that may occur when handling a drop error.
Source§fn try_handle_error(
&self,
error: Error,
) -> Result<(), <TDS as FallibleTryDropStrategy>::Error>
fn try_handle_error( &self, error: Error, ) -> Result<(), <TDS as FallibleTryDropStrategy>::Error>
Try and handle a drop error.