Skip to main content

Cloneable

Struct Cloneable 

Source
pub struct Cloneable;
Expand description

Marker type for cloneable reports and report references.

This marker is used with both Report<C, Cloneable, T> and ReportRef<C, Cloneable>. It indicates shared ownership using reference counting (Arc internally), which allows cheap cloning but prevents mutation.

§Usage with Report

For Report<C, Cloneable, T>, this marker means the report itself implements Clone, allowing you to cheaply clone the entire report (shallow copy via Arc).

§Usage with ReportRef

For ReportRef<C, Cloneable>, the marker enables the clone_arc method, which clones the underlying Arc to produce an owned Report<C, Cloneable, T>. Note that ReportRef itself is always Copy and Clone regardless of the ownership marker - the Cloneable marker specifically enables converting the reference back to an owned report.

§When to Use

Use Cloneable reports when you need to:

  • Share an error report across multiple code paths
  • Store reports in collections that require Clone
  • Return the same error from multiple places without deep copying

§Converting to Cloneable

Convert a Mutable report to Cloneable using into_cloneable:

use rootcause::prelude::*;

let report: Report<String, markers::Mutable> = report!("Error".to_string());

// Convert to cloneable
let cloneable: Report<String, markers::Cloneable> = report.into_cloneable();

// Now can clone cheaply (shallow clone via Arc)
let clone1: Report<String, markers::Cloneable> = cloneable.clone();
let clone2: Report<String, markers::Cloneable> = cloneable.clone();

§Examples

Cloning owned reports:

use rootcause::prelude::*;

fn process_error(error: Report<String, markers::Cloneable>) {
    // Can clone the error to pass to multiple handlers
    let for_logging = error.clone();
    let for_metrics = error.clone();

    println!("Logging: {}", for_logging);
    println!("Metrics: {}", for_metrics);
}

let report: Report<String> = report!("An error occurred".to_string());
process_error(report.into_cloneable());

Using clone_arc on report references:

use rootcause::{ReportRef, prelude::*};

let report: Report<String, markers::Cloneable> = report!("Error".to_string()).into_cloneable();

// Get a reference (ReportRef is Copy, so this is cheap)
let report_ref: ReportRef<String, markers::Cloneable> = report.as_ref();

// Clone the underlying Arc to get an owned Report
let owned: Report<String, markers::Cloneable> = report_ref.clone_arc();

Trait Implementations§

Source§

impl Clone for Cloneable

Source§

fn clone(&self) -> Cloneable

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Cloneable

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for Cloneable

Source§

fn default() -> Cloneable

Returns the “default value” for a type. Read more
Source§

impl Hash for Cloneable

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl Ord for Cloneable

Source§

fn cmp(&self, other: &Cloneable) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · Source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · Source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · Source§

fn clamp(self, min: Self, max: Self) -> Self
where Self: Sized,

Restrict a value to a certain interval. Read more
Source§

impl PartialEq for Cloneable

Source§

fn eq(&self, other: &Cloneable) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl PartialOrd for Cloneable

Source§

fn partial_cmp(&self, other: &Cloneable) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · Source§

fn lt(&self, other: &Rhs) -> bool

Tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · Source§

fn le(&self, other: &Rhs) -> bool

Tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · Source§

fn gt(&self, other: &Rhs) -> bool

Tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · Source§

fn ge(&self, other: &Rhs) -> bool

Tests greater than or equal to (for self and other) and is used by the >= operator. Read more
Source§

impl ReportOwnershipMarker for Cloneable

Source§

type RefMarker = Cloneable

The ownership marker for references to this report type. Read more
Source§

impl Copy for Cloneable

Source§

impl Eq for Cloneable

Source§

impl StructuralPartialEq for Cloneable

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<Q, K> Comparable<K> for Q
where Q: Ord + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn compare(&self, key: &K) -> Ordering

Compare self to key and return their ordering.
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<O> ObjectMarkerFor<Local> for O
where O: 'static,

Source§

impl<O> ObjectMarkerFor<SendSync> for O
where O: 'static + Send + Sync,

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> OpaqueAttachment for T
where T: Send + Sync + 'static,