pub struct ExtensibleDataSource<D, U> {
data_source: D,
user_data: U,
}
Expand description
Wrapper to add extensibility to an existing data source.
ExtensibleDataSource
adds app-specific data to any existing data source. It implements all
the data source traits defined in this crate as long as the underlying data source does so,
which means it can be used as state for instantiating the APIs defined in this crate. At the
same time, it provides access to an application-defined state type, which means it can also be
used to implement application-specific endpoints.
ExtensibleDataSource
implements AsRef<U>
and AsMut<U>
for some user-defined type U
, so
your API extensions can always access application-specific state from ExtensibleDataSource
.
We can use this to complete the UTXO example by extending our data source
with an index to look up transactions by the UTXOs they contain:
type UtxoIndex = HashMap<u64, (usize, TransactionIndex<AppTypes>, usize)>;
#[async_trait]
impl<UnderlyingDataSource> UtxoDataSource for
ExtensibleDataSource<UnderlyingDataSource, UtxoIndex>
where
UnderlyingDataSource: AvailabilityDataSource<AppTypes> + Send + Sync,
{
async fn find_utxo(&self, utxo: u64) -> Option<(usize, TransactionIndex<AppTypes>, usize)> {
self.as_ref().get(&utxo).cloned()
}
}
Fields§
§data_source: D
§user_data: U
Implementations§
Source§impl<D, U> ExtensibleDataSource<D, U>
impl<D, U> ExtensibleDataSource<D, U>
Trait Implementations§
Source§impl<D, U> AsMut<U> for ExtensibleDataSource<D, U>
impl<D, U> AsMut<U> for ExtensibleDataSource<D, U>
Source§impl<D, U> AsRef<U> for ExtensibleDataSource<D, U>
impl<D, U> AsRef<U> for ExtensibleDataSource<D, U>
Source§impl<D, U, Types> AvailabilityDataSource<Types> for ExtensibleDataSource<D, U>where
D: AvailabilityDataSource<Types> + Send + Sync,
U: Send + Sync,
Types: NodeType,
Header<Types>: QueryableHeader<Types>,
Payload<Types>: QueryablePayload<Types>,
impl<D, U, Types> AvailabilityDataSource<Types> for ExtensibleDataSource<D, U>where
D: AvailabilityDataSource<Types> + Send + Sync,
U: Send + Sync,
Types: NodeType,
Header<Types>: QueryableHeader<Types>,
Payload<Types>: QueryablePayload<Types>,
fn get_leaf<'life0, 'async_trait, ID>( &'life0 self, id: ID, ) -> Pin<Box<dyn Future<Output = Fetch<LeafQueryData<Types>>> + Send + 'async_trait>>
fn get_header<'life0, 'async_trait, ID>( &'life0 self, id: ID, ) -> Pin<Box<dyn Future<Output = Fetch<Header<Types>>> + Send + 'async_trait>>
fn get_block<'life0, 'async_trait, ID>( &'life0 self, id: ID, ) -> Pin<Box<dyn Future<Output = Fetch<BlockQueryData<Types>>> + Send + 'async_trait>>
fn get_payload<'life0, 'async_trait, ID>( &'life0 self, id: ID, ) -> Pin<Box<dyn Future<Output = Fetch<PayloadQueryData<Types>>> + Send + 'async_trait>>
fn get_payload_metadata<'life0, 'async_trait, ID>( &'life0 self, id: ID, ) -> Pin<Box<dyn Future<Output = Fetch<PayloadMetadata<Types>>> + Send + 'async_trait>>
fn get_vid_common<'life0, 'async_trait, ID>( &'life0 self, id: ID, ) -> Pin<Box<dyn Future<Output = Fetch<VidCommonQueryData<Types>>> + Send + 'async_trait>>
fn get_vid_common_metadata<'life0, 'async_trait, ID>( &'life0 self, id: ID, ) -> Pin<Box<dyn Future<Output = Fetch<VidCommonMetadata<Types>>> + Send + 'async_trait>>
fn get_leaf_range<'life0, 'async_trait, R>(
&'life0 self,
range: R,
) -> Pin<Box<dyn Future<Output = FetchStream<LeafQueryData<Types>>> + Send + 'async_trait>>where
R: RangeBounds<usize> + Send + 'static + 'async_trait,
Self: 'async_trait,
'life0: 'async_trait,
fn get_block_range<'life0, 'async_trait, R>(
&'life0 self,
range: R,
) -> Pin<Box<dyn Future<Output = FetchStream<BlockQueryData<Types>>> + Send + 'async_trait>>where
R: RangeBounds<usize> + Send + 'static + 'async_trait,
Self: 'async_trait,
'life0: 'async_trait,
fn get_header_range<'life0, 'async_trait, R>(
&'life0 self,
range: R,
) -> Pin<Box<dyn Future<Output = FetchStream<Header<Types>>> + Send + 'async_trait>>where
R: RangeBounds<usize> + Send + 'static + 'async_trait,
Self: 'async_trait,
'life0: 'async_trait,
fn get_payload_range<'life0, 'async_trait, R>(
&'life0 self,
range: R,
) -> Pin<Box<dyn Future<Output = FetchStream<PayloadQueryData<Types>>> + Send + 'async_trait>>where
R: RangeBounds<usize> + Send + 'static + 'async_trait,
Self: 'async_trait,
'life0: 'async_trait,
fn get_payload_metadata_range<'life0, 'async_trait, R>(
&'life0 self,
range: R,
) -> Pin<Box<dyn Future<Output = FetchStream<PayloadMetadata<Types>>> + Send + 'async_trait>>where
R: RangeBounds<usize> + Send + 'static + 'async_trait,
Self: 'async_trait,
'life0: 'async_trait,
fn get_vid_common_range<'life0, 'async_trait, R>(
&'life0 self,
range: R,
) -> Pin<Box<dyn Future<Output = FetchStream<VidCommonQueryData<Types>>> + Send + 'async_trait>>where
R: RangeBounds<usize> + Send + 'static + 'async_trait,
Self: 'async_trait,
'life0: 'async_trait,
fn get_vid_common_metadata_range<'life0, 'async_trait, R>(
&'life0 self,
range: R,
) -> Pin<Box<dyn Future<Output = FetchStream<VidCommonMetadata<Types>>> + Send + 'async_trait>>where
R: RangeBounds<usize> + Send + 'static + 'async_trait,
Self: 'async_trait,
'life0: 'async_trait,
fn get_leaf_range_rev<'life0, 'async_trait>(
&'life0 self,
start: Bound<usize>,
end: usize,
) -> Pin<Box<dyn Future<Output = FetchStream<LeafQueryData<Types>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn get_block_range_rev<'life0, 'async_trait>(
&'life0 self,
start: Bound<usize>,
end: usize,
) -> Pin<Box<dyn Future<Output = FetchStream<BlockQueryData<Types>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn get_payload_range_rev<'life0, 'async_trait>(
&'life0 self,
start: Bound<usize>,
end: usize,
) -> Pin<Box<dyn Future<Output = FetchStream<PayloadQueryData<Types>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn get_payload_metadata_range_rev<'life0, 'async_trait>(
&'life0 self,
start: Bound<usize>,
end: usize,
) -> Pin<Box<dyn Future<Output = FetchStream<PayloadMetadata<Types>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn get_vid_common_range_rev<'life0, 'async_trait>(
&'life0 self,
start: Bound<usize>,
end: usize,
) -> Pin<Box<dyn Future<Output = FetchStream<VidCommonQueryData<Types>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn get_vid_common_metadata_range_rev<'life0, 'async_trait>(
&'life0 self,
start: Bound<usize>,
end: usize,
) -> Pin<Box<dyn Future<Output = FetchStream<VidCommonMetadata<Types>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn get_transaction<'life0, 'async_trait>(
&'life0 self,
hash: TransactionHash<Types>,
) -> Pin<Box<dyn Future<Output = Fetch<TransactionQueryData<Types>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn get_transaction<'life0, 'async_trait>(
&'life0 self,
hash: TransactionHash<Types>,
) -> Pin<Box<dyn Future<Output = Fetch<TransactionQueryData<Types>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
hash
.fn get_state_cert<'life0, 'async_trait>(
&'life0 self,
epoch: u64,
) -> Pin<Box<dyn Future<Output = Fetch<StateCertQueryData<Types>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn subscribe_blocks<'life0, 'async_trait>(
&'life0 self,
from: usize,
) -> Pin<Box<dyn Future<Output = BoxStream<'static, BlockQueryData<Types>>> + Send + 'async_trait>>where
Self: Sync + 'async_trait,
'life0: 'async_trait,
fn subscribe_payloads<'life0, 'async_trait>(
&'life0 self,
from: usize,
) -> Pin<Box<dyn Future<Output = BoxStream<'static, PayloadQueryData<Types>>> + Send + 'async_trait>>where
Self: Sync + 'async_trait,
'life0: 'async_trait,
fn subscribe_payload_metadata<'life0, 'async_trait>(
&'life0 self,
from: usize,
) -> Pin<Box<dyn Future<Output = BoxStream<'static, PayloadMetadata<Types>>> + Send + 'async_trait>>where
Self: Sync + 'async_trait,
'life0: 'async_trait,
fn subscribe_leaves<'life0, 'async_trait>(
&'life0 self,
from: usize,
) -> Pin<Box<dyn Future<Output = BoxStream<'static, LeafQueryData<Types>>> + Send + 'async_trait>>where
Self: Sync + 'async_trait,
'life0: 'async_trait,
fn subscribe_headers<'life0, 'async_trait>(
&'life0 self,
from: usize,
) -> Pin<Box<dyn Future<Output = BoxStream<'static, Header<Types>>> + Send + 'async_trait>>where
Self: Sync + 'async_trait,
'life0: 'async_trait,
fn subscribe_vid_common<'life0, 'async_trait>(
&'life0 self,
from: usize,
) -> Pin<Box<dyn Future<Output = BoxStream<'static, VidCommonQueryData<Types>>> + Send + 'async_trait>>where
Self: Sync + 'async_trait,
'life0: 'async_trait,
fn subscribe_vid_common_metadata<'life0, 'async_trait>(
&'life0 self,
from: usize,
) -> Pin<Box<dyn Future<Output = BoxStream<'static, VidCommonMetadata<Types>>> + Send + 'async_trait>>where
Self: Sync + 'async_trait,
'life0: 'async_trait,
Source§impl<D: Clone, U: Clone> Clone for ExtensibleDataSource<D, U>
impl<D: Clone, U: Clone> Clone for ExtensibleDataSource<D, U>
Source§fn clone(&self) -> ExtensibleDataSource<D, U>
fn clone(&self) -> ExtensibleDataSource<D, U>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl<D, U, Types> ExplorerDataSource<Types> for ExtensibleDataSource<D, U>where
D: ExplorerDataSource<Types> + Sync,
U: Send + Sync,
Types: NodeType,
Payload<Types>: QueryablePayload<Types>,
Header<Types>: ExplorerHeader<Types> + QueryableHeader<Types>,
Transaction<Types>: ExplorerTransaction<Types>,
impl<D, U, Types> ExplorerDataSource<Types> for ExtensibleDataSource<D, U>where
D: ExplorerDataSource<Types> + Sync,
U: Send + Sync,
Types: NodeType,
Payload<Types>: QueryablePayload<Types>,
Header<Types>: ExplorerHeader<Types> + QueryableHeader<Types>,
Transaction<Types>: ExplorerTransaction<Types>,
Source§fn get_block_detail<'life0, 'async_trait>(
&'life0 self,
request: BlockIdentifier<Types>,
) -> Pin<Box<dyn Future<Output = Result<BlockDetail<Types>, GetBlockDetailError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn get_block_detail<'life0, 'async_trait>(
&'life0 self,
request: BlockIdentifier<Types>,
) -> Pin<Box<dyn Future<Output = Result<BlockDetail<Types>, GetBlockDetailError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
get_block_detail
is a method that retrieves the details of a specific
block from the blockchain. The block is identified by the given
BlockIdentifier.Source§fn get_block_summaries<'life0, 'async_trait>(
&'life0 self,
request: GetBlockSummariesRequest<Types>,
) -> Pin<Box<dyn Future<Output = Result<Vec<BlockSummary<Types>>, GetBlockSummariesError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn get_block_summaries<'life0, 'async_trait>(
&'life0 self,
request: GetBlockSummariesRequest<Types>,
) -> Pin<Box<dyn Future<Output = Result<Vec<BlockSummary<Types>>, GetBlockSummariesError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
get_block_summaries
is a method that retrieves a list of block
summaries from the blockchain. The list is generated from the given
GetBlockSummariesRequest.Source§fn get_transaction_detail<'life0, 'async_trait>(
&'life0 self,
request: TransactionIdentifier<Types>,
) -> Pin<Box<dyn Future<Output = Result<TransactionDetailResponse<Types>, GetTransactionDetailError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn get_transaction_detail<'life0, 'async_trait>(
&'life0 self,
request: TransactionIdentifier<Types>,
) -> Pin<Box<dyn Future<Output = Result<TransactionDetailResponse<Types>, GetTransactionDetailError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
get_transaction_detail
is a method that retrieves the details of a
specific transaction from the blockchain. The transaction is identified
by the given TransactionIdentifier.Source§fn get_transaction_summaries<'life0, 'async_trait>(
&'life0 self,
request: GetTransactionSummariesRequest<Types>,
) -> Pin<Box<dyn Future<Output = Result<Vec<TransactionSummary<Types>>, GetTransactionSummariesError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn get_transaction_summaries<'life0, 'async_trait>(
&'life0 self,
request: GetTransactionSummariesRequest<Types>,
) -> Pin<Box<dyn Future<Output = Result<Vec<TransactionSummary<Types>>, GetTransactionSummariesError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
get_transaction_summaries
is a method that retrieves a list of
transaction summaries from the blockchain. The list is generated from
the given GetTransactionSummariesRequest.Source§fn get_explorer_summary<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<ExplorerSummary<Types>, GetExplorerSummaryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn get_explorer_summary<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<ExplorerSummary<Types>, GetExplorerSummaryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
get_explorer_summary
is a method that retrieves a summary overview of
the blockchain. This is useful for displaying information that
indicates the overall status of the block chain.Source§fn get_search_results<'life0, 'async_trait>(
&'life0 self,
query: TaggedBase64,
) -> Pin<Box<dyn Future<Output = Result<SearchResult<Types>, GetSearchResultsError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn get_search_results<'life0, 'async_trait>(
&'life0 self,
query: TaggedBase64,
) -> Pin<Box<dyn Future<Output = Result<SearchResult<Types>, GetSearchResultsError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
get_search_results
is a method that retrieves the results of a search
query against the blockchain. The results are generated from the given
query string.Source§impl<D, U> HasMetrics for ExtensibleDataSource<D, U>where
D: HasMetrics,
impl<D, U> HasMetrics for ExtensibleDataSource<D, U>where
D: HasMetrics,
fn metrics(&self) -> &PrometheusMetrics
Source§impl<D, U, Types, State, const ARITY: usize> MerklizedStateDataSource<Types, State, ARITY> for ExtensibleDataSource<D, U>where
D: MerklizedStateDataSource<Types, State, ARITY> + Sync,
U: Send + Sync,
Types: NodeType,
State: MerklizedState<Types, ARITY>,
impl<D, U, Types, State, const ARITY: usize> MerklizedStateDataSource<Types, State, ARITY> for ExtensibleDataSource<D, U>where
D: MerklizedStateDataSource<Types, State, ARITY> + Sync,
U: Send + Sync,
Types: NodeType,
State: MerklizedState<Types, ARITY>,
Source§impl<D, U> MerklizedStateHeightPersistence for ExtensibleDataSource<D, U>
impl<D, U> MerklizedStateHeightPersistence for ExtensibleDataSource<D, U>
fn get_last_state_height<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = QueryResult<usize>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§impl<D, U, Types> NodeDataSource<Types> for ExtensibleDataSource<D, U>where
D: NodeDataSource<Types> + Send + Sync,
U: Send + Sync,
Types: NodeType,
Header<Types>: QueryableHeader<Types>,
impl<D, U, Types> NodeDataSource<Types> for ExtensibleDataSource<D, U>where
D: NodeDataSource<Types> + Send + Sync,
U: Send + Sync,
Types: NodeType,
Header<Types>: QueryableHeader<Types>,
fn block_height<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = QueryResult<usize>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn count_transactions_in_range<'life0, 'async_trait>(
&'life0 self,
range: impl 'async_trait + RangeBounds<usize> + Send,
namespace: Option<NamespaceId<Types>>,
) -> Pin<Box<dyn Future<Output = QueryResult<usize>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn payload_size_in_range<'life0, 'async_trait>(
&'life0 self,
range: impl 'async_trait + RangeBounds<usize> + Send,
namespace: Option<NamespaceId<Types>>,
) -> Pin<Box<dyn Future<Output = QueryResult<usize>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn sync_status<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = QueryResult<SyncStatus>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn sync_status<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = QueryResult<SyncStatus>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn get_header_window<'life0, 'async_trait>(
&'life0 self,
start: impl 'async_trait + Into<WindowStart<Types>> + Send + Sync,
end: u64,
limit: usize,
) -> Pin<Box<dyn Future<Output = QueryResult<TimeWindowQueryData<Header<Types>>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn count_transactions<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = QueryResult<usize>> + Send + 'async_trait>>where
Self: Sync + 'async_trait,
'life0: 'async_trait,
fn payload_size<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = QueryResult<usize>> + Send + 'async_trait>>where
Self: Sync + 'async_trait,
'life0: 'async_trait,
Source§impl<D, U> PrunedHeightDataSource for ExtensibleDataSource<D, U>
impl<D, U> PrunedHeightDataSource for ExtensibleDataSource<D, U>
Source§impl<D, U> StatusDataSource for ExtensibleDataSource<D, U>
impl<D, U> StatusDataSource for ExtensibleDataSource<D, U>
fn block_height<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = QueryResult<usize>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn consensus_metrics(&self) -> QueryResult<PrometheusMetrics>
fn elapsed_time_since_last_decide<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = QueryResult<u64>> + Send + 'async_trait>>where
Self: Sync + 'async_trait,
'life0: 'async_trait,
fn success_rate<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = QueryResult<f64>> + Send + 'async_trait>>where
Self: Sync + 'async_trait,
'life0: 'async_trait,
Source§impl<D, U, Types> UpdateAvailabilityData<Types> for ExtensibleDataSource<D, U>
impl<D, U, Types> UpdateAvailabilityData<Types> for ExtensibleDataSource<D, U>
Source§impl<D, U, Types, State, const ARITY: usize> UpdateStateData<Types, State, ARITY> for ExtensibleDataSource<D, U>where
D: UpdateStateData<Types, State, ARITY> + Send + Sync,
U: Send + Sync,
State: MerklizedState<Types, ARITY>,
Types: NodeType,
impl<D, U, Types, State, const ARITY: usize> UpdateStateData<Types, State, ARITY> for ExtensibleDataSource<D, U>where
D: UpdateStateData<Types, State, ARITY> + Send + Sync,
U: Send + Sync,
State: MerklizedState<Types, ARITY>,
Types: NodeType,
fn set_last_state_height<'life0, 'async_trait>(
&'life0 mut self,
height: usize,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn insert_merkle_nodes<'life0, 'async_trait>(
&'life0 mut self,
path: MerkleProof<State::Entry, State::Key, State::T, ARITY>,
traversal_path: Vec<usize>,
block_number: u64,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§impl<D, U> VersionedDataSource for ExtensibleDataSource<D, U>
impl<D, U> VersionedDataSource for ExtensibleDataSource<D, U>
Source§type Transaction<'a> = <D as VersionedDataSource>::Transaction<'a>
where
Self: 'a
type Transaction<'a> = <D as VersionedDataSource>::Transaction<'a> where Self: 'a
type ReadOnly<'a> = <D as VersionedDataSource>::ReadOnly<'a> where Self: 'a
Source§async fn write(&self) -> Result<Self::Transaction<'_>>
async fn write(&self) -> Result<Self::Transaction<'_>>
impl<D: Copy, U: Copy> Copy for ExtensibleDataSource<D, U>
Auto Trait Implementations§
impl<D, U> Freeze for ExtensibleDataSource<D, U>
impl<D, U> RefUnwindSafe for ExtensibleDataSource<D, U>where
D: RefUnwindSafe,
U: RefUnwindSafe,
impl<D, U> Send for ExtensibleDataSource<D, U>
impl<D, U> Sync for ExtensibleDataSource<D, U>
impl<D, U> Unpin for ExtensibleDataSource<D, U>
impl<D, U> UnwindSafe for ExtensibleDataSource<D, U>where
D: UnwindSafe,
U: UnwindSafe,
Blanket Implementations§
§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
§type ArchivedMetadata = ()
type ArchivedMetadata = ()
§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
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> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Conv for T
impl<T> Conv for T
§impl<F, W, T, D> Deserialize<With<T, W>, D> for F
impl<F, W, T, D> Deserialize<With<T, W>, D> for F
§fn deserialize(
&self,
deserializer: &mut D,
) -> Result<With<T, W>, <D as Fallible>::Error>
fn deserialize( &self, deserializer: &mut D, ) -> Result<With<T, W>, <D as Fallible>::Error>
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
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
.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.§impl<T> DowncastSync for T
impl<T> DowncastSync for T
§impl<T> FmtForward for T
impl<T> FmtForward for T
§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self
to use its Binary
implementation when Debug
-formatted.§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self
to use its Display
implementation when
Debug
-formatted.§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self
to use its LowerExp
implementation when
Debug
-formatted.§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self
to use its LowerHex
implementation when
Debug
-formatted.§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self
to use its Octal
implementation when Debug
-formatted.§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self
to use its Pointer
implementation when
Debug
-formatted.§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self
to use its UpperExp
implementation when
Debug
-formatted.§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self
to use its UpperHex
implementation when
Debug
-formatted.§fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> 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>
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§impl<T> LayoutRaw for T
impl<T> LayoutRaw for T
§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
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) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
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
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
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
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
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
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self
, then passes self.deref()
into the pipe function.§impl<T> Pointable for T
impl<T> Pointable for T
§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
§impl<T> Tap for T
impl<T> Tap for T
§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B>
of a value. Read more§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B>
of a value. Read more§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R>
view of a value. Read more§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R>
view of a value. Read more§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target
of a value. Read more§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target
of a value. Read more§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap()
only in debug builds, and is erased in release builds.§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut()
only in debug builds, and is erased in release
builds.§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.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
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut()
only in debug builds, and is erased in release
builds.§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.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
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut()
only in debug builds, and is erased in release
builds.§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref()
only in debug builds, and is erased in release
builds.