Trait sp_std::convert::AsRef 1.0.0[−][src]
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.
AsRef
has the same signature as Borrow
, but Borrow
is different in few aspects:
- Unlike
AsRef
,Borrow
has a blanket impl for anyT
, and can be used to accept either a reference or a value. Borrow
also requires thatHash
,Eq
andOrd
for 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 iffoo
has type&mut Foo
or&&mut Foo
)
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
Implementations on Foreign Types
Implementors
impl<K, V, S> AsRef<BTreeMap<K, V>> for BoundedBTreeMap<K, V, S> where
K: Ord,
impl<K, V, S> AsRef<BTreeMap<K, V>> for BoundedBTreeMap<K, V, S> where
K: Ord,
impl<T, S> AsRef<BTreeSet<T>> for BoundedBTreeSet<T, S> where
T: Ord,
impl<T, S> AsRef<BTreeSet<T>> for BoundedBTreeSet<T, S> where
T: Ord,
impl<T, S> AsRef<Vec<T, Global>> for BoundedVec<T, S>
impl<T, S> AsRef<Vec<T, Global>> for BoundedVec<T, S>
impl<T, S> AsRef<[T]> for BoundedVec<T, S>
impl<T, S> AsRef<[T]> for BoundedVec<T, S>
impl<T, S> AsRef<Vec<T, Global>> for WeakBoundedVec<T, S>
impl<T, S> AsRef<Vec<T, Global>> for WeakBoundedVec<T, S>
impl<T, S> AsRef<[T]> for WeakBoundedVec<T, S>
impl<T, S> AsRef<[T]> for WeakBoundedVec<T, S>
impl AsRef<Public> for Public
impl AsRef<Public> for Public
impl AsRef<[u8]> for Public
impl AsRef<[u8]> for Public
impl AsRef<Signature> for Signature
impl AsRef<Signature> for Signature
impl AsRef<[u8]> for Signature
impl AsRef<[u8]> for Signature
impl AsRef<Pair> for Pair
impl AsRef<Pair> for Pair
impl<E, ERef> AsRef<E> for ViableEpoch<E, ERef> where
ERef: Borrow<E>,
impl<E, ERef> AsRef<E> for ViableEpoch<E, ERef> where
ERef: Borrow<E>,
impl<E: Epoch> AsRef<E> for IncrementedEpoch<E>
impl<E: Epoch> AsRef<E> for IncrementedEpoch<E>
impl AsRef<str> for ProtocolId
impl AsRef<str> for ProtocolId
impl<Hash, Extrinsic> AsRef<Extrinsic> for Transaction<Hash, Extrinsic>
impl<Hash, Extrinsic> AsRef<Extrinsic> for Transaction<Hash, Extrinsic>
impl AsRef<Public> for Public
impl AsRef<Public> for Public
impl AsRef<[u8]> for Public
impl AsRef<[u8]> for Public
impl AsRef<Signature> for Signature
impl AsRef<Signature> for Signature
impl AsRef<[u8]> for Signature
impl AsRef<[u8]> for Signature
impl AsRef<Pair> for Pair
impl AsRef<Pair> for Pair
impl AsRef<Public> for Public
impl AsRef<Public> for Public
impl AsRef<[u8]> for Public
impl AsRef<[u8]> for Public
impl AsRef<Signature> for Signature
impl AsRef<Signature> for Signature
impl AsRef<[u8]> for Signature
impl AsRef<[u8]> for Signature
impl AsRef<Pair> for Pair
impl AsRef<Pair> for Pair
impl AsRef<Public> for Public
impl AsRef<Public> for Public
impl AsRef<[u8]> for Public
impl AsRef<[u8]> for Public
impl AsRef<Signature> for Signature
impl AsRef<Signature> for Signature
impl AsRef<[u8]> for Signature
impl AsRef<[u8]> for Signature
impl AsRef<Pair> for Pair
impl AsRef<Pair> for Pair
impl AsRef<[u8]> for AccountId32
impl AsRef<[u8]> for AccountId32
impl AsRef<[u8; 32]> for AccountId32
impl AsRef<[u8; 32]> for AccountId32
impl AsRef<[u8]> for Dummy
impl AsRef<[u8]> for Dummy
impl AsRef<[u8; 32]> for Public
impl AsRef<[u8; 32]> for Public
impl AsRef<[u8]> for Public
impl AsRef<[u8]> for Public
impl AsRef<[u8; 64]> for Signature
impl AsRef<[u8; 64]> for Signature
impl AsRef<[u8]> for Signature
impl AsRef<[u8]> for Signature
impl AsRef<[u8; 32]> for Public
impl AsRef<[u8; 32]> for Public
impl AsRef<[u8]> for Public
impl AsRef<[u8]> for Public
impl AsRef<[u8; 64]> for Signature
impl AsRef<[u8; 64]> for Signature
impl AsRef<[u8]> for Signature
impl AsRef<[u8]> for Signature
impl AsRef<Keypair> for Pair
impl AsRef<Keypair> for Pair
impl AsRef<[u8]> for Public
impl AsRef<[u8]> for Public
impl AsRef<[u8; 65]> for Signature
impl AsRef<[u8; 65]> for Signature
impl AsRef<[u8]> for Signature
impl AsRef<[u8]> for Signature
impl AsRef<[u8; 32]> for Keyring
impl AsRef<[u8; 32]> for Keyring
impl AsRef<Public> for Keyring
impl AsRef<Public> for Keyring
impl AsRef<[u8; 32]> for Keyring
impl AsRef<[u8; 32]> for Keyring
impl AsRef<Public> for Keyring
impl AsRef<Public> for Keyring
impl AsRef<str> for Method
impl AsRef<str> for Method
impl AsRef<[u8]> for UintAuthorityId
impl AsRef<[u8]> for UintAuthorityId
impl AsRef<[u8]> for RuntimeString
impl AsRef<[u8]> for RuntimeString
impl AsRef<[u8]> for MultiSigner
impl AsRef<[u8]> for MultiSigner
impl AsRef<[u8]> for StorageKey
impl AsRef<[u8]> for StorageKey