Skip to main content

HoprBlockchainConnector

Struct HoprBlockchainConnector 

Source
pub struct HoprBlockchainConnector<C, B, P, R> {
Show 15 fields payload_generator: P, chain_key: ChainKeypair, client: Arc<C>, graph: Arc<RwLock<DiGraphMap<HoprKeyIdent, ChannelId, RandomState>>>, backend: Arc<B>, connection_handle: Option<AbortHandle>, sequencer: TransactionSequencer<C, R>, events: (Sender<ChainEvent>, InactiveReceiver<ChainEvent>), cfg: BlockchainConnectorConfig, mapper: HoprKeyMapper<B>, chain_to_packet: Cache<Address, Option<OffchainPublicKey>, RandomState>, packet_to_chain: Cache<OffchainPublicKey, Option<Address>, RandomState>, channel_by_id: Cache<ChannelId, Option<ChannelEntry>, RandomState>, channel_by_parties: Cache<ChannelParties, Option<ChannelEntry>, RandomState>, values: Cache<u32, ParsedChainInfo>,
}
Expand description

A connector acting as middleware between the HOPR APIs (see the [hopr_api] crate) and the Blokli Client API (see the [blokli_client] crate).

The connector object cannot be cloned and shall be used inside an Arc if cloning is needed.

Fields§

§payload_generator: P§chain_key: ChainKeypair§client: Arc<C>§graph: Arc<RwLock<DiGraphMap<HoprKeyIdent, ChannelId, RandomState>>>§backend: Arc<B>§connection_handle: Option<AbortHandle>§sequencer: TransactionSequencer<C, R>§events: (Sender<ChainEvent>, InactiveReceiver<ChainEvent>)§cfg: BlockchainConnectorConfig§mapper: HoprKeyMapper<B>§chain_to_packet: Cache<Address, Option<OffchainPublicKey>, RandomState>§packet_to_chain: Cache<OffchainPublicKey, Option<Address>, RandomState>§channel_by_id: Cache<ChannelId, Option<ChannelEntry>, RandomState>§channel_by_parties: Cache<ChannelParties, Option<ChannelEntry>, RandomState>§values: Cache<u32, ParsedChainInfo>

Implementations§

Source§

impl<B, C, P, R> HoprBlockchainConnector<C, B, P, R>
where B: Backend + Send + Sync + 'static,

Source

pub(crate) fn build_account_stream( &self, selector: AccountSelector, ) -> Result<impl Stream<Item = AccountEntry> + Send + 'static, ConnectorError>

Source§

impl<B, C, P, R> HoprBlockchainConnector<C, B, P, R>
where B: Backend + Send + Sync + 'static,

Source

pub(crate) fn build_channel_stream( &self, selector: ChannelSelector, ) -> Result<impl Stream<Item = ChannelEntry> + Send + 'static, ConnectorError>

Source§

impl<B, C, P> HoprBlockchainConnector<C, B, P, P::TxRequest>
where B: Backend + Send + Sync + 'static, C: BlokliTransactionClient + BlokliQueryClient + Send + Sync + 'static, P: PayloadGenerator + Send + Sync + 'static, P::TxRequest: Send + Sync + 'static,

Source§

impl<B, C, P, R> HoprBlockchainConnector<C, R, B, P>
where C: BlokliQueryClient + Send + Sync + 'static,

Source

pub(crate) async fn query_cached_chain_info( &self, ) -> Result<ParsedChainInfo, ConnectorError>

Queries chain info from cache, fetching from Blokli on cold start.

The cache has no TTL - it’s kept fresh by the Blokli subscription handler which updates it whenever ticket parameters change. This prevents the cascading timeout issue where cache expiration during packet processing would trigger blocking Blokli queries.

Source§

impl<B, C, P> HoprBlockchainConnector<C, B, P, P::TxRequest>
where B: Backend + Send + Sync + 'static, C: BlokliSubscriptionClient + BlokliQueryClient + BlokliTransactionClient + Send + Sync + 'static, P: PayloadGenerator + Send + Sync + 'static, P::TxRequest: Send + Sync + 'static,

Source

pub fn new( chain_key: ChainKeypair, cfg: BlockchainConnectorConfig, client: C, backend: B, payload_generator: P, ) -> Self

Creates a new instance.

Source

async fn do_connect( &self, timeout: Duration, ) -> Result<AbortHandle, ConnectorError>

Source

pub async fn connect(&mut self) -> Result<(), ConnectorError>

Connects to the chain using the underlying client, syncs all on-chain data, and subscribes for all future updates.

If the connection does not finish within BlockchainConnectorConfig::connection_timeout the ConnectorError::ConnectionTimeout error is returned.

Most of the operations with the Connector will fail if it is not connected first.

There are some notable exceptions that DO NOT require a prior call to connect:

If you wish to only call operations from the above Chain APIs, consider constructing the HoprBlockchainReader instead.

Source

pub fn client(&self) -> &C

Returns the reference to the underlying client.

Source

pub fn is_connected(&self) -> bool

Checks if the connector is connected to the chain.

Source§

impl<B, C, P> HoprBlockchainConnector<C, B, P, P::TxRequest>

Source

async fn send_tx<'a>( &'a self, tx_req: P::TxRequest, custom_tx_multiplier: Option<u32>, ) -> Result<impl Future<Output = Result<ChainReceipt, ConnectorError>> + Send + 'a, ConnectorError>

Source§

impl<B, C, P, R> HoprBlockchainConnector<C, R, B, P>

Source

pub(crate) fn check_connection_state(&self) -> Result<(), ConnectorError>

Source

pub fn invalidate_caches(&self)

Invalidates all cached on-chain data.

Source§

impl<B, C, P, R> HoprBlockchainConnector<C, B, P, R>
where B: Backend + Send + Sync + 'static, C: Send + Sync, P: Send + Sync, R: Send + Sync,

Source

pub fn as_path_resolver(&self) -> ChainPathResolver<'_, Self>

Returns a [PathAddressResolver] using this connector.

Trait Implementations§

Source§

impl<B, C, P, R> ChainEvents for HoprBlockchainConnector<C, B, P, R>
where B: Backend + Send + Sync + 'static,

Source§

type Error = ConnectorError

Source§

fn subscribe_with_state_sync<I: IntoIterator<Item = StateSyncOptions>>( &self, options: I, ) -> Result<impl Stream<Item = ChainEvent> + Send + 'static, Self::Error>

Subscribe to on-chain events. Read more
§

fn subscribe( &self, ) -> Result<impl Stream<Item = ChainEvent> + Send + 'static, Self::Error>

Convenience method for subscribing to on-chain events without specifying any state sync options. Read more
Source§

impl<B, C, P, R> ChainKeyOperations for HoprBlockchainConnector<C, B, P, R>
where B: Backend + Send + Sync + 'static, C: Send + Sync, P: Send + Sync, R: Send + Sync,

Source§

type Error = ConnectorError

Source§

type Mapper = HoprKeyMapper<B>

Source§

fn chain_key_to_packet_key<'life0, 'life1, 'async_trait>( &'life0 self, chain: &'life1 Address, ) -> Pin<Box<dyn Future<Output = Result<Option<OffchainPublicKey>, Self::Error>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Translates Address into OffchainPublicKey.
Source§

fn packet_key_to_chain_key<'life0, 'life1, 'async_trait>( &'life0 self, packet: &'life1 OffchainPublicKey, ) -> Pin<Box<dyn Future<Output = Result<Option<Address>, Self::Error>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Translates OffchainPublicKey into Address.
Source§

fn key_id_mapper_ref(&self) -> &Self::Mapper

Returns the KeyIdMapping for offchain key IDs as a reference.
Source§

impl<B, C, P, R> ChainReadAccountOperations for HoprBlockchainConnector<C, B, P, R>
where B: Backend + Send + Sync + 'static, C: BlokliQueryClient + BlokliSubscriptionClient + Send + Sync + 'static, P: Send + Sync + 'static, R: Send + Sync,

Source§

type Error = ConnectorError

Source§

fn stream_accounts<'a, 'async_trait>( &'a self, selector: AccountSelector, ) -> Pin<Box<dyn Future<Output = Result<BoxStream<'a, AccountEntry>, Self::Error>> + Send + 'async_trait>>
where Self: 'async_trait, 'a: 'async_trait,

Returns on-chain node accounts with the given AccountSelector.
Source§

fn count_accounts<'life0, 'async_trait>( &'life0 self, selector: AccountSelector, ) -> Pin<Box<dyn Future<Output = Result<usize, Self::Error>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Counts the accounts with the given AccountSelector. Read more
Source§

fn await_key_binding<'life0, 'life1, 'async_trait>( &'life0 self, offchain_key: &'life1 OffchainPublicKey, timeout: Duration, ) -> Pin<Box<dyn Future<Output = Result<AccountEntry, Self::Error>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Waits for the account with the key-binding on the offchain_key to appear on-chain or the timeout expires.
Source§

impl<B, C, P, R> ChainReadChannelOperations for HoprBlockchainConnector<C, B, P, R>
where B: Backend + Send + Sync + 'static, C: Send + Sync, P: Send + Sync, R: Send + Sync,

Source§

type Error = ConnectorError

Source§

fn me(&self) -> &Address

Returns on-chain Address of the current node.
Source§

fn channel_by_parties<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, src: &'life1 Address, dst: &'life2 Address, ) -> Pin<Box<dyn Future<Output = Result<Option<ChannelEntry>, Self::Error>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait,

Returns a single channel given src and dst.
Source§

fn channel_by_id<'life0, 'life1, 'async_trait>( &'life0 self, channel_id: &'life1 ChannelId, ) -> Pin<Box<dyn Future<Output = Result<Option<ChannelEntry>, Self::Error>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Returns a single channel given channel_id.
Source§

fn stream_channels<'a, 'async_trait>( &'a self, selector: ChannelSelector, ) -> Pin<Box<dyn Future<Output = Result<BoxStream<'a, ChannelEntry>, Self::Error>> + Send + 'async_trait>>
where Self: 'async_trait, 'a: 'async_trait,

Returns a stream of channels given the ChannelSelector.
Source§

impl<B, C, P, R> ChainReadSafeOperations for HoprBlockchainConnector<C, B, P, R>
where B: Backend + Send + Sync + 'static, C: BlokliQueryClient + BlokliSubscriptionClient + Send + Sync + 'static, P: Send + Sync + 'static, R: Send + Sync,

Source§

type Error = ConnectorError

Source§

fn safe_allowance<'life0, 'async_trait, Cy, A>( &'life0 self, safe_address: A, ) -> Pin<Box<dyn Future<Output = Result<Balance<Cy>, Self::Error>> + Send + 'async_trait>>
where Cy: 'async_trait + Currency, A: 'async_trait + Into<Address> + Send, Self: 'async_trait, 'life0: 'async_trait,

Returns the native or token currency Safe allowance.
Source§

fn safe_info<'life0, 'async_trait>( &'life0 self, selector: SafeSelector, ) -> Pin<Box<dyn Future<Output = Result<Option<DeployedSafe>, Self::Error>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Retrieves DeployedSafe information using the given selector. Read more
Source§

fn await_safe_deployment<'life0, 'async_trait>( &'life0 self, selector: SafeSelector, timeout: Duration, ) -> Pin<Box<dyn Future<Output = Result<DeployedSafe, Self::Error>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Waits for a Safe matching the given selector to be deployed up to the given timeout. Read more
Source§

fn predict_module_address<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, nonce: u64, owner: &'life1 Address, safe_address: &'life2 Address, ) -> Pin<Box<dyn Future<Output = Result<Address, Self::Error>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait,

Predicts the Module address based on the given nonce, owner and safe_address of the Safe.
Source§

impl<B, R, C, P> ChainValues for HoprBlockchainConnector<C, B, P, R>
where B: Send + Sync, C: BlokliQueryClient + Send + Sync + 'static, P: Send + Sync, R: Send + Sync,

Source§

type Error = ConnectorError

Source§

fn balance<'life0, 'async_trait, Cy, A>( &'life0 self, address: A, ) -> Pin<Box<dyn Future<Output = Result<Balance<Cy>, Self::Error>> + Send + 'async_trait>>
where Cy: 'async_trait + Currency, A: 'async_trait + Into<Address> + Send, Self: 'async_trait, 'life0: 'async_trait,

Returns the native or token currency balance of the given on-chain account.
Source§

fn domain_separators<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = Result<DomainSeparators, Self::Error>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Retrieves the domain separators of HOPR smart contracts.
Source§

fn minimum_incoming_ticket_win_prob<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = Result<WinningProbability, Self::Error>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Retrieves the network-set minimum incoming ticket winning probability.
Source§

fn minimum_ticket_price<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = Result<HoprBalance, Self::Error>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Retrieves the network-set minimum ticket price.
Source§

fn key_binding_fee<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = Result<HoprBalance, Self::Error>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Retrieves the current key binding fee used for new key-binding announcements.
Source§

fn channel_closure_notice_period<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = Result<Duration, Self::Error>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Gets the grace period for channel closure finalization.
Source§

fn chain_info<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = Result<ChainInfo, Self::Error>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Gets the information about the HOPR network on-chain deployment.
§

fn outgoing_ticket_values<'life0, 'async_trait>( &'life0 self, cfg_out_wp: Option<WinningProbability>, cfg_out_price: Option<Balance<WxHOPR>>, ) -> Pin<Box<dyn Future<Output = Result<(WinningProbability, Balance<WxHOPR>), Self::Error>> + Send + 'async_trait>>
where 'life0: 'async_trait, Self: Sync + 'async_trait,

Convenience function to determine the winning probability and ticket price for outgoing tickets.
Source§

impl<B, C, P> ChainWriteAccountOperations for HoprBlockchainConnector<C, B, P, P::TxRequest>
where B: Send + Sync, C: BlokliTransactionClient + BlokliQueryClient + Send + Sync + 'static, P: PayloadGenerator + Send + Sync + 'static, P::TxRequest: Send + Sync + 'static,

Source§

type Error = ConnectorError

Source§

fn announce<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, multiaddrs: &'life1 [Multiaddr], key: &'life2 OffchainKeypair, ) -> Pin<Box<dyn Future<Output = Result<BoxFuture<'_, Result<ChainReceipt, Self::Error>>, AnnouncementError<Self::Error>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait,

Announces transport key and list of multi addresses.
Source§

fn withdraw<'life0, 'life1, 'async_trait, Cy>( &'life0 self, balance: Balance<Cy>, recipient: &'life1 Address, ) -> Pin<Box<dyn Future<Output = Result<BoxFuture<'_, Result<ChainReceipt, Self::Error>>, Self::Error>> + Send + 'async_trait>>
where Cy: 'async_trait + Currency + Send, Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Withdraws native or token currency from the Safe or node account (depends on the used [PayloadGenerator]).
Source§

fn register_safe<'life0, 'life1, 'async_trait>( &'life0 self, safe_address: &'life1 Address, ) -> Pin<Box<dyn Future<Output = Result<BoxFuture<'_, Result<ChainReceipt, Self::Error>>, SafeRegistrationError<Self::Error>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Registers Safe address with the current node.
Source§

impl<B, C, P> ChainWriteChannelOperations for HoprBlockchainConnector<C, B, P, P::TxRequest>
where B: Backend + Send + Sync + 'static, C: BlokliQueryClient + BlokliTransactionClient + Send + Sync + 'static, P: PayloadGenerator + Send + Sync + 'static, P::TxRequest: Send + Sync + 'static,

Source§

type Error = ConnectorError

Source§

fn open_channel<'a, 'async_trait>( &'a self, dst: &'a Address, amount: HoprBalance, ) -> Pin<Box<dyn Future<Output = Result<BoxFuture<'a, Result<ChainReceipt, Self::Error>>, Self::Error>> + Send + 'async_trait>>
where Self: 'async_trait, 'a: 'async_trait,

Opens a channel with dst and amount.
Source§

fn fund_channel<'a, 'async_trait>( &'a self, channel_id: &'a ChannelId, amount: HoprBalance, ) -> Pin<Box<dyn Future<Output = Result<BoxFuture<'a, Result<ChainReceipt, Self::Error>>, Self::Error>> + Send + 'async_trait>>
where Self: 'async_trait, 'a: 'async_trait,

Funds an existing channel.
Source§

fn close_channel<'a, 'async_trait>( &'a self, channel_id: &'a ChannelId, ) -> Pin<Box<dyn Future<Output = Result<BoxFuture<'a, Result<ChainReceipt, Self::Error>>, Self::Error>> + Send + 'async_trait>>
where Self: 'async_trait, 'a: 'async_trait,

Closes an existing channel.
Source§

impl<B, C, P> ChainWriteSafeOperations for HoprBlockchainConnector<C, B, P, P::TxRequest>
where B: Send + Sync + 'static, C: BlokliQueryClient + BlokliTransactionClient + Send + Sync + 'static, P: PayloadGenerator + Send + Sync + 'static, P::TxRequest: Send + Sync + 'static,

Source§

type Error = ConnectorError

Source§

fn deploy_safe<'a, 'async_trait>( &'a self, balance: HoprBalance, ) -> Pin<Box<dyn Future<Output = Result<BoxFuture<'a, Result<ChainReceipt, Self::Error>>, Self::Error>> + Send + 'async_trait>>
where Self: 'async_trait, 'a: 'async_trait,

Deploys Safe with the given balance of wxHOPR tokens. Read more
Source§

impl<B, C, P> ChainWriteTicketOperations for HoprBlockchainConnector<C, B, P, P::TxRequest>
where B: Backend + Send + Sync + 'static, C: BlokliTransactionClient + BlokliQueryClient + Send + Sync + 'static, P: PayloadGenerator + Send + Sync + 'static, P::TxRequest: Send + Sync + 'static,

Source§

type Error = ConnectorError

Source§

fn redeem_ticket<'a, 'async_trait>( &'a self, ticket: RedeemableTicket, ) -> Pin<Box<dyn Future<Output = Result<BoxFuture<'a, Result<(VerifiedTicket, ChainReceipt), TicketRedeemError<Self::Error>>>, TicketRedeemError<Self::Error>>> + Send + 'async_trait>>
where Self: 'async_trait, 'a: 'async_trait,

Redeems a single ticket on-chain. Read more
Source§

impl<B, C, P, R> Drop for HoprBlockchainConnector<C, R, B, P>

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more

Auto Trait Implementations§

§

impl<C, B, P, R> Freeze for HoprBlockchainConnector<C, B, P, R>
where P: Freeze,

§

impl<C, B, P, R> !RefUnwindSafe for HoprBlockchainConnector<C, B, P, R>

§

impl<C, B, P, R> Send for HoprBlockchainConnector<C, B, P, R>
where P: Send, C: Sync + Send, B: Sync + Send, R: Send,

§

impl<C, B, P, R> Sync for HoprBlockchainConnector<C, B, P, R>
where P: Sync, C: Sync + Send, B: Sync + Send, R: Send,

§

impl<C, B, P, R> Unpin for HoprBlockchainConnector<C, B, P, R>
where P: Unpin,

§

impl<C, B, P, R> !UnwindSafe for HoprBlockchainConnector<C, B, P, R>

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> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T, E> HoprChainApi for T
where T: ChainReadSafeOperations<Error = E> + ChainWriteAccountOperations<Error = E> + ChainWriteSafeOperations<Error = E> + ChainEvents<Error = E> + ChainReadChannelOperations<Error = E> + ChainKeyOperations<Error = E> + ChainReadAccountOperations<Error = E> + ChainValues<Error = E> + ChainWriteChannelOperations<Error = E> + ChainWriteTicketOperations<Error = E>, E: Error + Send + Sync + 'static,

§

type ChainError = E

§

impl<T, E> HoprStaticChainApi for T
where T: ChainReadSafeOperations<Error = E> + ChainValues<Error = E>, E: Error + Send + Sync + 'static,

§

type ChainError = E

§

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> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
§

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

impl<T> IsFieldType<T> for T