pub trait AsRef<T>where
T: ?Sized,{
// Required method
fn as_ref(&self) -> &T;
}Expand description
Used to do a cheap reference-to-reference conversion.
This trait is similar to AsMut which is used for converting between mutable references.
If you need to do a costly conversion it is better to implement From with type
&T or write a custom function.
§Relation to Borrow
AsRef has the same signature as Borrow, but Borrow is different in a few aspects:
- Unlike
AsRef,Borrowhas a blanket impl for anyT, and can be used to accept either a reference or a value. (See also note onAsRef’s reflexibility below.) Borrowalso requires thatHash,EqandOrdfor a borrowed value are equivalent to those of the owned value. For this reason, if you want to borrow only a single field of a struct you can implementAsRef, but notBorrow.
Note: This trait must not fail. If the conversion can fail, use a
dedicated method which returns an Option<T> or a Result<T, E>.
§Generic Implementations
AsRef auto-dereferences if the inner type is a reference or a mutable reference
(e.g.: foo.as_ref() will work the same if foo has type &mut Foo or &&mut Foo).
Note that due to historic reasons, the above currently does not hold generally for all
dereferenceable types, e.g. foo.as_ref() will not work the same as
Box::new(foo).as_ref(). Instead, many smart pointers provide an as_ref implementation which
simply returns a reference to the pointed-to value (but do not perform a cheap
reference-to-reference conversion for that value). However, AsRef::as_ref should not be
used for the sole purpose of dereferencing; instead ‘Deref coercion’ can be used:
let x = Box::new(5i32);
// Avoid this:
// let y: &i32 = x.as_ref();
// Better just write:
let y: &i32 = &x;Types which implement Deref should consider implementing AsRef<T> as follows:
impl<T> AsRef<T> for SomeType
where
T: ?Sized,
<SomeType as Deref>::Target: AsRef<T>,
{
fn as_ref(&self) -> &T {
self.deref().as_ref()
}
}§Reflexivity
Ideally, AsRef would be reflexive, i.e. there would be an impl<T: ?Sized> AsRef<T> for T
with as_ref simply returning its argument unchanged.
Such a blanket implementation is currently not provided due to technical restrictions of
Rust’s type system (it would be overlapping with another existing blanket implementation for
&T where T: AsRef<U> which allows AsRef to auto-dereference, see “Generic Implementations”
above).
A trivial implementation of AsRef<T> for T must be added explicitly for a particular type T
where needed or desired. Note, however, that not all types from std contain such an
implementation, and those cannot be added by external code due to orphan rules.
§Examples
By using trait bounds we can accept arguments of different types as long as they can be
converted to the specified type T.
For example: By creating a generic function that takes an AsRef<str> we express that we
want to accept all references that can be converted to &str as an argument.
Since both String and &str implement AsRef<str> we can accept both as input argument.
fn is_hello<T: AsRef<str>>(s: T) {
assert_eq!("hello", s.as_ref());
}
let s = "hello";
is_hello(s);
let s = "hello".to_string();
is_hello(s);Required Methods§
Implementors§
impl AsRef<ConsensusManagerConfigurationVersions> for VersionedConsensusManagerConfiguration
impl AsRef<ConsensusManagerCurrentProposalStatisticVersions> for VersionedConsensusManagerCurrentProposalStatistic
impl AsRef<ConsensusManagerCurrentValidatorSetVersions> for VersionedConsensusManagerCurrentValidatorSet
impl AsRef<ConsensusManagerProposerMilliTimestampVersions> for VersionedConsensusManagerProposerMilliTimestamp
impl AsRef<ConsensusManagerProposerMinuteTimestampVersions> for VersionedConsensusManagerProposerMinuteTimestamp
impl AsRef<ConsensusManagerRegisteredValidatorByStakeVersions> for VersionedConsensusManagerRegisteredValidatorByStake
impl AsRef<ConsensusManagerStateVersions> for VersionedConsensusManagerState
impl AsRef<ConsensusManagerValidatorRewardsVersions> for VersionedConsensusManagerValidatorRewards
impl AsRef<FungibleResourceManagerDivisibilityVersions> for VersionedFungibleResourceManagerDivisibility
impl AsRef<FungibleResourceManagerTotalSupplyVersions> for VersionedFungibleResourceManagerTotalSupply
impl AsRef<FungibleVaultBalanceVersions> for VersionedFungibleVaultBalance
impl AsRef<FungibleVaultFreezeStatusVersions> for VersionedFungibleVaultFreezeStatus
impl AsRef<FungibleVaultLockedBalanceVersions> for VersionedFungibleVaultLockedBalance
impl AsRef<LedgerTransactionHashesVersions> for VersionedLedgerTransactionHashes
impl AsRef<NonFungibleLocalId> for NonFungibleResourceManagerDataKeyPayload
impl AsRef<NonFungibleLocalId> for NonFungibleVaultNonFungibleKeyPayload
impl AsRef<NonFungibleResourceManagerIdTypeVersions> for VersionedNonFungibleResourceManagerIdType
impl AsRef<NonFungibleResourceManagerMutableFieldsVersions> for VersionedNonFungibleResourceManagerMutableFields
impl AsRef<NonFungibleResourceManagerTotalSupplyVersions> for VersionedNonFungibleResourceManagerTotalSupply
impl AsRef<NonFungibleVaultBalanceVersions> for VersionedNonFungibleVaultBalance
impl AsRef<NonFungibleVaultFreezeStatusVersions> for VersionedNonFungibleVaultFreezeStatus
impl AsRef<NonFungibleVaultLockedResourceVersions> for VersionedNonFungibleVaultLockedResource
impl AsRef<NonFungibleVaultNonFungibleVersions> for VersionedNonFungibleVaultNonFungible
impl AsRef<PackageBlueprintVersionAuthConfigVersions> for VersionedPackageBlueprintVersionAuthConfig
impl AsRef<PackageBlueprintVersionDefinitionVersions> for VersionedPackageBlueprintVersionDefinition
impl AsRef<PackageBlueprintVersionDependenciesVersions> for VersionedPackageBlueprintVersionDependencies
impl AsRef<PackageBlueprintVersionRoyaltyConfigVersions> for VersionedPackageBlueprintVersionRoyaltyConfig
impl AsRef<PackageCodeInstrumentedCodeVersions> for VersionedPackageCodeInstrumentedCode
impl AsRef<PackageCodeOriginalCodeVersions> for VersionedPackageCodeOriginalCode
impl AsRef<PackageCodeVmTypeVersions> for VersionedPackageCodeVmType
impl AsRef<PackageRoyaltyAccumulatorVersions> for VersionedPackageRoyaltyAccumulator
impl AsRef<ProtocolUpdateStatusSummaryVersions> for ProtocolUpdateStatusSummarySubstate
impl AsRef<ResourceOrNonFungible> for AccountAuthorizedDepositorKeyPayload
impl AsRef<ValidatorProtocolUpdateReadinessSignalVersions> for VersionedValidatorProtocolUpdateReadinessSignal
impl AsRef<ValidatorStateVersions> for VersionedValidatorState
impl AsRef<AccountAuthorizedDepositorVersions> for VersionedAccountAuthorizedDepositor
impl AsRef<AccountDepositRuleVersions> for VersionedAccountDepositRule
impl AsRef<AccountResourcePreferenceVersions> for VersionedAccountResourcePreference
impl AsRef<AccountResourceVaultVersions> for VersionedAccountResourceVault
impl AsRef<AccountLockerAccountClaimsVersions> for VersionedAccountLockerAccountClaims
impl AsRef<MetadataEntryVersions> for VersionedMetadataEntry
impl AsRef<RoleAssignmentAccessRuleVersions> for VersionedRoleAssignmentAccessRule
impl AsRef<RoleAssignmentOwnerVersions> for VersionedRoleAssignmentOwner
impl AsRef<ComponentRoyaltyAccumulatorVersions> for VersionedComponentRoyaltyAccumulator
impl AsRef<ComponentRoyaltyMethodAmountVersions> for VersionedComponentRoyaltyMethodAmount
impl AsRef<TreeNodeVersions> for VersionedTreeNode
impl AsRef<TransactionValidationConfigurationVersions> for TransactionValidationConfigurationSubstate
impl AsRef<MultiResourcePoolStateVersions> for VersionedMultiResourcePoolState
impl AsRef<OneResourcePoolStateVersions> for VersionedOneResourcePoolState
impl AsRef<TwoResourcePoolStateVersions> for VersionedTwoResourcePoolState
impl AsRef<AccessControllerStateVersions> for VersionedAccessControllerState
impl AsRef<AccessControllerV2StateVersions> for VersionedAccessControllerV2State
impl AsRef<str> for str
impl AsRef<str> for AliasableString
impl AsRef<str> for InternalString
impl AsRef<str> for String
impl AsRef<u8> for u5
impl AsRef<ByteStr> for str
impl AsRef<ByteStr> for ByteString
impl AsRef<ByteStr> for ByteStr
impl AsRef<CStr> for CString
impl AsRef<CStr> for CStr
impl AsRef<LocalWaker> for Waker
impl AsRef<OsStr> for Component<'_>
impl AsRef<OsStr> for str
impl AsRef<OsStr> for OsStr
impl AsRef<OsStr> for std::ffi::os_str::OsString
impl AsRef<OsStr> for Components<'_>
impl AsRef<OsStr> for std::path::Iter<'_>
impl AsRef<OsStr> for Path
impl AsRef<OsStr> for PathBuf
impl AsRef<OsStr> for TempPath
impl AsRef<OsStr> for String
impl AsRef<Path> for Cow<'_, OsStr>
impl AsRef<Path> for Component<'_>
impl AsRef<Path> for str
impl AsRef<Path> for OsStr
impl AsRef<Path> for std::ffi::os_str::OsString
impl AsRef<Path> for Components<'_>
impl AsRef<Path> for std::path::Iter<'_>
impl AsRef<Path> for Path
impl AsRef<Path> for PathBuf
impl AsRef<Path> for DecInt
impl AsRef<Path> for TempDir
impl AsRef<Path> for TempPath
impl AsRef<Path> for String
impl AsRef<VerifyingKey> for SigningKey
impl AsRef<OsStr> for fslock::unix::OsString
impl AsRef<Global<AccountMarker>> for AccountLockerAccountClaimsKeyPayload
impl AsRef<VersionedAccountAuthorizedDepositor> for AccountAuthorizedDepositorEntryPayload
impl AsRef<VersionedAccountDepositRule> for AccountDepositRuleFieldPayload
impl AsRef<VersionedAccountResourcePreference> for AccountResourcePreferenceEntryPayload
impl AsRef<VersionedAccountResourceVault> for AccountResourceVaultEntryPayload
impl AsRef<VersionedAccountLockerAccountClaims> for AccountLockerAccountClaimsEntryPayload
impl AsRef<VersionedMetadataEntry> for MetadataEntryEntryPayload
impl AsRef<VersionedRoleAssignmentAccessRule> for RoleAssignmentAccessRuleEntryPayload
impl AsRef<VersionedRoleAssignmentOwner> for RoleAssignmentOwnerFieldPayload
impl AsRef<VersionedComponentRoyaltyAccumulator> for ComponentRoyaltyAccumulatorFieldPayload
impl AsRef<VersionedComponentRoyaltyMethodAmount> for ComponentRoyaltyMethodAmountEntryPayload
impl AsRef<Uuid> for Braced
impl AsRef<Uuid> for Hyphenated
impl AsRef<Uuid> for Simple
impl AsRef<Uuid> for Urn
impl AsRef<Uuid> for Uuid
impl AsRef<BStr> for str
impl AsRef<BStr> for [u8]
impl AsRef<Bytes> for str
impl AsRef<Bytes> for [u8]
impl AsRef<VersionedMultiResourcePoolState> for MultiResourcePoolStateFieldPayload
impl AsRef<VersionedOneResourcePoolState> for OneResourcePoolStateFieldPayload
impl AsRef<VersionedTwoResourcePoolState> for TwoResourcePoolStateFieldPayload
impl AsRef<Bls12381G1PublicKey> for Bls12381G1PublicKey
impl AsRef<Bls12381G2Signature> for Bls12381G2Signature
impl AsRef<BlueprintVersionKey> for PackageBlueprintVersionAuthConfigKeyPayload
impl AsRef<BlueprintVersionKey> for PackageBlueprintVersionDefinitionKeyPayload
impl AsRef<BlueprintVersionKey> for PackageBlueprintVersionDependenciesKeyPayload
impl AsRef<BlueprintVersionKey> for PackageBlueprintVersionRoyaltyConfigKeyPayload
impl AsRef<Bucket> for FungibleBucket
impl AsRef<Bucket> for NonFungibleBucket
impl AsRef<CodeHash> for PackageCodeInstrumentedCodeKeyPayload
impl AsRef<CodeHash> for PackageCodeOriginalCodeKeyPayload
impl AsRef<CodeHash> for PackageCodeVmTypeKeyPayload
impl AsRef<ComponentAddress> for ConsensusManagerRegisteredValidatorByStakeKeyPayload
impl AsRef<Ed25519PublicKey> for Ed25519PublicKey
impl AsRef<Ed25519Signature> for Ed25519Signature
impl AsRef<ExecutableTransaction> for ExecutableTransaction
impl AsRef<Hash> for CodeHash
impl AsRef<Hash> for FlashTransactionHash
impl AsRef<Hash> for Hash
impl AsRef<Hash> for LedgerTransactionHash
impl AsRef<Hash> for NotarizedTransactionHash
impl AsRef<Hash> for RoundUpdateTransactionHash
impl AsRef<Hash> for SchemaHash
impl AsRef<Hash> for SignedTransactionIntentHash
impl AsRef<Hash> for SubintentHash
impl AsRef<Hash> for SystemTransactionHash
impl AsRef<Hash> for TransactionIntentHash
impl AsRef<ModuleRoleKey> for RoleAssignmentAccessRuleKeyPayload
impl AsRef<NodeId> for ComponentAddress
impl AsRef<NodeId> for GlobalAddress
impl AsRef<NodeId> for InternalAddress
impl AsRef<NodeId> for NodeId
impl AsRef<NodeId> for PackageAddress
impl AsRef<NodeId> for ResourceAddress
impl AsRef<Proof> for FungibleProof
impl AsRef<Proof> for NonFungibleProof
impl AsRef<RawNotarizedTransaction> for DetailedNotarizedTransactionV2
impl AsRef<RawNotarizedTransaction> for RawNotarizedTransaction
impl AsRef<ResourceAddress> for AccountResourcePreferenceKeyPayload
impl AsRef<ResourceAddress> for AccountResourceVaultKeyPayload
impl AsRef<SchemaHash> for PackageSchemaKeyPayload
impl AsRef<Secp256k1PublicKey> for Secp256k1PublicKey
impl AsRef<Secp256k1Signature> for Secp256k1Signature
impl AsRef<String> for MetadataEntryKeyPayload
impl AsRef<String> for ComponentRoyaltyMethodAmountKeyPayload
impl AsRef<VersionedConsensusManagerConfiguration> for ConsensusManagerConfigurationFieldPayload
impl AsRef<VersionedConsensusManagerCurrentProposalStatistic> for ConsensusManagerCurrentProposalStatisticFieldPayload
impl AsRef<VersionedConsensusManagerCurrentValidatorSet> for ConsensusManagerCurrentValidatorSetFieldPayload
impl AsRef<VersionedConsensusManagerProposerMilliTimestamp> for ConsensusManagerProposerMilliTimestampFieldPayload
impl AsRef<VersionedConsensusManagerProposerMinuteTimestamp> for ConsensusManagerProposerMinuteTimestampFieldPayload
impl AsRef<VersionedConsensusManagerRegisteredValidatorByStake> for ConsensusManagerRegisteredValidatorByStakeEntryPayload
impl AsRef<VersionedConsensusManagerState> for ConsensusManagerStateFieldPayload
impl AsRef<VersionedConsensusManagerValidatorRewards> for ConsensusManagerValidatorRewardsFieldPayload
impl AsRef<VersionedFungibleResourceManagerDivisibility> for FungibleResourceManagerDivisibilityFieldPayload
impl AsRef<VersionedFungibleResourceManagerTotalSupply> for FungibleResourceManagerTotalSupplyFieldPayload
impl AsRef<VersionedFungibleVaultBalance> for FungibleVaultBalanceFieldPayload
impl AsRef<VersionedFungibleVaultFreezeStatus> for FungibleVaultFreezeStatusFieldPayload
impl AsRef<VersionedFungibleVaultLockedBalance> for FungibleVaultLockedBalanceFieldPayload
impl AsRef<VersionedNonFungibleResourceManagerIdType> for NonFungibleResourceManagerIdTypeFieldPayload
impl AsRef<VersionedNonFungibleResourceManagerMutableFields> for NonFungibleResourceManagerMutableFieldsFieldPayload
impl AsRef<VersionedNonFungibleResourceManagerTotalSupply> for NonFungibleResourceManagerTotalSupplyFieldPayload
impl AsRef<VersionedNonFungibleVaultBalance> for NonFungibleVaultBalanceFieldPayload
impl AsRef<VersionedNonFungibleVaultFreezeStatus> for NonFungibleVaultFreezeStatusFieldPayload
impl AsRef<VersionedNonFungibleVaultLockedResource> for NonFungibleVaultLockedResourceFieldPayload
impl AsRef<VersionedNonFungibleVaultNonFungible> for NonFungibleVaultNonFungibleEntryPayload
impl AsRef<VersionedPackageBlueprintVersionAuthConfig> for PackageBlueprintVersionAuthConfigEntryPayload
impl AsRef<VersionedPackageBlueprintVersionDefinition> for PackageBlueprintVersionDefinitionEntryPayload
impl AsRef<VersionedPackageBlueprintVersionDependencies> for PackageBlueprintVersionDependenciesEntryPayload
impl AsRef<VersionedPackageBlueprintVersionRoyaltyConfig> for PackageBlueprintVersionRoyaltyConfigEntryPayload
impl AsRef<VersionedPackageCodeInstrumentedCode> for PackageCodeInstrumentedCodeEntryPayload
impl AsRef<VersionedPackageCodeOriginalCode> for PackageCodeOriginalCodeEntryPayload
impl AsRef<VersionedPackageCodeVmType> for PackageCodeVmTypeEntryPayload
impl AsRef<VersionedPackageRoyaltyAccumulator> for PackageRoyaltyAccumulatorFieldPayload
impl AsRef<VersionedSchema<ScryptoCustomSchema>> for PackageSchemaEntryPayload
impl AsRef<VersionedValidatorProtocolUpdateReadinessSignal> for ValidatorProtocolUpdateReadinessSignalFieldPayload
impl AsRef<VersionedValidatorState> for ValidatorStateFieldPayload
impl AsRef<VersionedAccessControllerState> for AccessControllerStateFieldPayload
impl AsRef<VersionedAccessControllerV2State> for AccessControllerV2StateFieldPayload
impl AsRef<[u8; 32]> for SecretKey
impl AsRef<[u8; 32]> for Message
impl AsRef<[u8; 64]> for ElligatorSwift
impl AsRef<[u8; 64]> for PublicKey
impl AsRef<[u8; 64]> for secp256k1_sys::Signature
impl AsRef<[u8; 64]> for XOnlyPublicKey
impl AsRef<[u8; 64]> for secp256k1::schnorr::Signature
impl AsRef<[u8; 65]> for RecoverableSignature
impl AsRef<[u8; 96]> for Keypair
impl AsRef<[u8]> for str
impl AsRef<[u8]> for ByteString
impl AsRef<[u8]> for ByteStr
impl AsRef<[u8]> for VerifyingKey
impl AsRef<[u8]> for RawManifest
impl AsRef<[u8]> for Literal
impl AsRef<[u8]> for SerializedSignature
impl AsRef<[u8]> for Uuid
impl AsRef<[u8]> for WabtBuf
impl AsRef<[u8]> for BStr
impl AsRef<[u8]> for Bytes
impl AsRef<[u8]> for Bls12381G1PublicKey
impl AsRef<[u8]> for Bls12381G2Signature
impl AsRef<[u8]> for CodeHash
impl AsRef<[u8]> for ComponentAddress
impl AsRef<[u8]> for Ed25519PublicKey
impl AsRef<[u8]> for Ed25519Signature
impl AsRef<[u8]> for FlashTransactionHash
impl AsRef<[u8]> for GlobalAddress
impl AsRef<[u8]> for Hash
impl AsRef<[u8]> for InternalAddress
impl AsRef<[u8]> for LedgerTransactionHash
impl AsRef<[u8]> for NodeId
impl AsRef<[u8]> for NotarizedTransactionHash
impl AsRef<[u8]> for PackageAddress
impl AsRef<[u8]> for RawFlashTransaction
impl AsRef<[u8]> for RawLedgerTransaction
impl AsRef<[u8]> for RawNotarizedTransaction
impl AsRef<[u8]> for RawPartialTransaction
impl AsRef<[u8]> for RawPreviewTransaction
impl AsRef<[u8]> for RawRoundUpdateTransactionV1
impl AsRef<[u8]> for RawSignedPartialTransaction
impl AsRef<[u8]> for RawSignedTransactionIntent
impl AsRef<[u8]> for RawSubintent
impl AsRef<[u8]> for RawSystemTransaction
impl AsRef<[u8]> for RawTransactionIntent
impl AsRef<[u8]> for ResourceAddress
impl AsRef<[u8]> for RoundUpdateTransactionHash
impl AsRef<[u8]> for SchemaHash
impl AsRef<[u8]> for Secp256k1PublicKey
impl AsRef<[u8]> for Secp256k1Signature
impl AsRef<[u8]> for SignedTransactionIntentHash
impl AsRef<[u8]> for String
impl AsRef<[u8]> for SubintentHash
impl AsRef<[u8]> for SystemTransactionHash
impl AsRef<[u8]> for TransactionIntentHash
impl AsRef<dyn Error + Sync + Send> for Error
impl AsRef<dyn Error> for Error
impl<'a> AsRef<str> for scrypto_test::prelude::rust::string::Drain<'a>
impl<'a> AsRef<[u8]> for scrypto_test::prelude::rust::string::Drain<'a>
impl<'a, T, A> AsRef<[T]> for scrypto_test::prelude::vec::Drain<'a, T, A>where
A: Allocator,
impl<'str> AsRef<OsStr> for EitherOsStr<'str>
impl<A> AsRef<[<A as Array>::Item]> for SmallVec<A>where
A: Array,
impl<Data> AsRef<Data> for NonFungibleResourceManagerDataEntryPayload<Data>where
Data: NonFungibleResourceManagerDataContentMarker,
impl<F> AsRef<Path> for NamedTempFile<F>
impl<I> AsRef<I> for Located<I>
impl<I, S> AsRef<I> for Stateful<I, S>
impl<L, R> AsRef<str> for Either<L, R>
impl<L, R> AsRef<CStr> for Either<L, R>
Requires crate feature std.
impl<L, R> AsRef<OsStr> for Either<L, R>
Requires crate feature std.
impl<L, R> AsRef<Path> for Either<L, R>
Requires crate feature std.