Skip to main content

TransactionEffects

Enum TransactionEffects 

#[non_exhaustive]
pub enum TransactionEffects { V1(Box<TransactionEffectsV1>), }
Expand description

The output or effects of executing a transaction

§BCS

The BCS serialized form for this type is defined by the following ABNF:

transaction-effects = %d00 transaction-effects-v1   ; V1

Variants (Non-exhaustive)§

This enum is marked as non-exhaustive
Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variants.

Implementations§

§

impl TransactionEffects

pub fn digest(&self) -> Digest

§

impl TransactionEffects

pub fn is_v1(&self) -> bool

Checks if this is a v1 variant.

pub fn as_v1(&self) -> &TransactionEffectsV1

pub fn into_v1(self) -> TransactionEffectsV1

Trait Implementations§

§

impl Arbitrary for TransactionEffects

§

type Parameters = ()

The type of parameters that arbitrary_with accepts for configuration of the generated Strategy. Parameters must implement Default.
§

type Strategy = BoxedStrategy<TransactionEffects>

The type of Strategy used to generate values of type Self.
§

fn arbitrary_with( args_shared: <TransactionEffects as Arbitrary>::Parameters, ) -> <TransactionEffects as Arbitrary>::Strategy

Generates a Strategy for producing arbitrary values of type the implementing type (Self). The strategy is passed the arguments given in args. Read more
§

fn arbitrary() -> Self::Strategy

Generates a Strategy for producing arbitrary values of type the implementing type (Self). Read more
§

impl Clone for TransactionEffects

§

fn clone(&self) -> TransactionEffects

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
§

impl Debug for TransactionEffects

§

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

Formats the value using the given formatter. Read more
§

impl<'de> Deserialize<'de> for TransactionEffects

§

fn deserialize<D>( deserializer: D, ) -> Result<TransactionEffects, <D as Deserializer<'de>>::Error>
where D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Message for TransactionEffects

Source§

const SCOPE: IntentScope = IntentScope::TransactionEffects

Source§

type DigestType = Digest

Source§

fn digest(&self) -> Self::DigestType

Source§

fn scope(&self) -> IntentScope

§

impl PartialEq for TransactionEffects

§

fn eq(&self, other: &TransactionEffects) -> 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.
§

impl Serialize for TransactionEffects

§

fn serialize<S>( &self, serializer: S, ) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>
where S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl TransactionEffectsAPI for TransactionEffects

Source§

fn status(&self) -> &ExecutionStatus

Return the status of the transaction.
Source§

fn into_status(self) -> ExecutionStatus

Consume self and return the owned status of the transaction.
Source§

fn epoch(&self) -> EpochId

Return the epoch in which this transaction was executed.
Source§

fn modified_at_versions(&self) -> Vec<(ObjectId, Version)>

Return the (ObjectId, Version) pair, at their pre-execution version, of every object that existed in the store before this transaction and was modified by it (mutated, wrapped, or deleted).
Source§

fn lamport_version(&self) -> Version

The version assigned to all output objects (apart from packages).
Source§

fn old_object_metadata(&self) -> Vec<(ObjectRef, Owner)>

Metadata of objects prior to modification. This includes any object that exists in the store prior to this transaction and is modified in this transaction. It includes objects that are mutated, wrapped and deleted.
Source§

fn input_shared_objects(&self) -> Vec<InputSharedObject>

Returns the list of sequenced shared objects used in the input. This is needed in effects because in transaction we only have object ID for shared objects. Their version and digest can only be figured out after sequencing. Also provides the use kind to indicate whether the object was mutated or read-only. It does not include per epoch config objects since they do not require sequencing. TODO: Rename this function to indicate sequencing requirement.
Source§

fn created(&self) -> Vec<(ObjectRef, Owner)>

Objects (Move objects and packages) newly created by this transaction, paired with their owner. Excludes objects that were created and then wrapped within the same transaction.
Source§

fn mutated(&self) -> Vec<(ObjectRef, Owner)>

Objects that existed before this transaction and whose contents were updated by it (in-place mutations and system package upgrades), reported at their post-execution (ObjectRef, Owner).
Source§

fn unwrapped(&self) -> Vec<(ObjectRef, Owner)>

Objects that were wrapped inside another object before this transaction and have been promoted back to top-level objects in the store by it.
Source§

fn deleted(&self) -> Vec<ObjectRef>

Objects that existed before this transaction and were deleted by it. References use the post-execution version and the TransactionEffectsDigest::OBJECT_DELETED tombstone digest.
Source§

fn unwrapped_then_deleted(&self) -> Vec<ObjectRef>

Objects that were unwrapped and then deleted within this same transaction (i.e. did not exist as top-level objects either before or after). References use the post-execution version and the TransactionEffectsDigest::OBJECT_DELETED tombstone digest.
Source§

fn wrapped(&self) -> Vec<ObjectRef>

Objects that existed as top-level objects before this transaction and have been wrapped inside another object by it (i.e. no longer visible in the object store as top-level). References use the post-execution version and the TransactionEffectsDigest::OBJECT_WRAPPED tombstone digest.
Source§

fn object_changes(&self) -> Vec<ObjectChange>

Returns a flattened view of every object change recorded in these effects: for each touched object, the input and output version/digest (when present) together with the IDOperation describing whether the ID was created, deleted, or unchanged.
Source§

fn gas_object(&self) -> (ObjectRef, Owner)

Returns the post-execution reference and owner of the gas object.
Source§

fn events_digest(&self) -> Option<&TransactionEventsDigest>

Digest of the events emitted by this transaction, or None if it emitted no events.
Source§

fn dependencies(&self) -> &[TransactionDigest]

Digests of the transactions this one depends on, i.e. transactions that must be executed before this one for its inputs to be available.
Source§

fn transaction_digest(&self) -> &TransactionDigest

Digest of the transaction that produced these effects.
Source§

fn gas_cost_summary(&self) -> &GasCostSummary

Return the gas cost summary of the transaction.
Source§

fn unchanged_shared_objects(&self) -> Vec<(ObjectId, UnchangedSharedKind)>

Returns all root shared objects (i.e. not child object) that are read-only in the transaction.
Source§

fn deleted_mutably_accessed_shared_objects(&self) -> Vec<ObjectId>

IDs of shared objects that were declared as mutable inputs by the transaction but had already been deleted at the time of execution.
Source§

impl TransactionEffectsAPIForTesting for TransactionEffects

Source§

fn status_mut_for_testing(&mut self) -> &mut ExecutionStatus

Returns a mutable reference to the execution status, for tests.
Source§

fn gas_cost_summary_mut_for_testing(&mut self) -> &mut GasCostSummary

Returns a mutable reference to the gas cost summary, for tests.
Source§

fn transaction_digest_mut_for_testing(&mut self) -> &mut TransactionDigest

Returns a mutable reference to the transaction digest, for tests.
Source§

fn dependencies_mut_for_testing(&mut self) -> &mut Vec<TransactionDigest>

Returns a mutable reference to the dependency list, for tests.
Source§

fn unsafe_add_input_shared_object_for_testing( &mut self, kind: InputSharedObject, )

Records kind as an input shared object without validating that it is consistent with the rest of the effects. For tests only.
Source§

fn unsafe_add_deleted_live_object_for_testing(&mut self, object_ref: ObjectRef)

Records an entry that represents the pre-execution version of a still live object, without validating consistency with the rest of the effects. For tests only.
Source§

fn unsafe_add_object_tombstone_for_testing(&mut self, object_ref: ObjectRef)

Records a tombstone entry for a deleted object, without validating consistency with the rest of the effects. For tests only.
Source§

impl TransactionEffectsExt for TransactionEffects

Source§

fn new_from_execution_v1( status: ExecutionStatus, epoch: EpochId, gas_cost_summary: GasCostSummary, shared_objects: Vec<SharedInput>, loaded_per_epoch_config_objects: BTreeSet<ObjectId>, transaction_digest: TransactionDigest, lamport_version: SequenceNumber, changed_objects: BTreeMap<ObjectId, EffectsObjectChange>, gas_object: Option<ObjectId>, events_digest: Option<TransactionEventsDigest>, dependencies: Vec<TransactionDigest>, ) -> Self

Build effects from the results of executing a transaction under the V1 protocol shape.
Source§

fn new_empty_v1(transaction_digest: TransactionDigest) -> Self

Build empty V1 effects for transaction_digest: success status, no object changes, and no gas object. For tests that need a placeholder whose effects content is irrelevant, e.g. system transactions.
Source§

fn execution_digests(&self) -> ExecutionDigests

Returns the (transaction_digest, effects_digest) pair identifying this execution.
Source§

fn all_changed_objects(&self) -> Vec<(ObjectRef, Owner, WriteKind)>

Return an iterator that iterates through all changed objects, including mutated, created and unwrapped objects. In other words, all objects that still exist in the object state after this transaction. It doesn’t include deleted/wrapped objects.
Source§

fn all_removed_objects(&self) -> Vec<(ObjectRef, ObjectRemoveKind)>

Return all objects that existed in the state prior to the transaction but no longer exist in the state after the transaction. It includes deleted and wrapped objects, but does not include unwrapped_then_deleted objects.
Source§

fn all_tombstones(&self) -> Vec<(ObjectId, SequenceNumber)>

Returns all objects that will become a tombstone after this transaction. This includes deleted, unwrapped_then_deleted and wrapped objects.
Source§

fn created_then_wrapped_objects(&self) -> Vec<(ObjectId, SequenceNumber)>

Returns all objects that were created + wrapped in the same transaction.
Source§

fn mutated_excluding_gas(&self) -> Vec<(ObjectRef, Owner)>

Return an iterator of mutated objects, but excluding the gas object.
Source§

fn all_affected_objects(&self) -> Vec<ObjectRef>

Returns all affected objects in this transaction effects. Affected objects include created, mutated, unwrapped, deleted, unwrapped_then_deleted, wrapped and input shared objects.
Source§

fn summary_for_debug(&self) -> TransactionEffectsDebugSummary

Returns a condensed TransactionEffectsDebugSummary suitable for logging and inspection.
Source§

fn estimate_size_upperbound_v1( num_writes: usize, num_modifies: usize, num_deps: usize, ) -> usize

Upper-bound estimate of the serialized size in bytes of effects with the given number of writes, modifies, and dependencies under the V1 protocol shape.
§

impl Eq for TransactionEffects

§

impl StructuralPartialEq for TransactionEffects

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
§

impl<U> As for U

§

fn as_<T>(self) -> T
where T: CastFrom<U>,

Casts self to type T. The semantics of numeric casting with the as operator are followed, so <T as As>::as_::<U> can be used in the same way as T as U for numeric conversions. Read more
§

impl<'a, T, E> AsTaggedExplicit<'a, E> for T
where T: 'a,

§

fn explicit(self, class: Class, tag: u32) -> TaggedParser<'a, Explicit, Self, E>

§

impl<'a, T, E> AsTaggedImplicit<'a, E> for T
where T: 'a,

§

fn implicit( self, class: Class, constructed: bool, tag: u32, ) -> TaggedParser<'a, Implicit, Self, E>

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
§

impl<T> Conv for T

§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
Source§

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

Source§

fn __clone_box(&self, _: Private) -> *mut ()

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.
§

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

§

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

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

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

§

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

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

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

§

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

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

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

§

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

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

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

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

§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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<T> IntoEither for T

Source§

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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

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
§

impl<T> IntoRequest<T> for T

§

fn into_request(self) -> Request<T>

Wrap the input message T in a Request
§

impl<T> IntoRequest<T> for T

§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
§

impl<L> LayerExt<L> for L

§

fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>
where L: Layer<S>,

Applies the layer to a service and wraps it in [Layered].
§

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

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
§

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

§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] only if self and other return Action::Follow. Read more
§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, W> Signable<W> for T
where T: BcsSignable, W: Write,

Source§

fn write(&self, writer: &mut W)

Source§

impl<T> SignableBytes for T
where T: BcsSignable,

§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
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
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. 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.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where T: 'static,

§

impl<T> MaybeSendSync for T