Trait sp_std::convert::AsRef1.0.0[][src]

pub trait AsRef<T> where
    T: ?Sized
{ 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.

AsRef has the same signature as Borrow, but Borrow is different in few aspects:

  • Unlike AsRef, Borrow has a blanket impl for any T, and can be used to accept either a reference or a value.
  • Borrow also requires that Hash, Eq and Ord 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 implement AsRef, but not Borrow.

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)

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

Performs the conversion.

Implementations on Foreign Types

Implementors

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<Vec<T, Global>> 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<[T]> for WeakBoundedVec<T, S>

impl AsRef<Public> for Public

impl AsRef<[u8]> for Public

impl AsRef<Signature> for Signature

impl AsRef<[u8]> for Signature

impl AsRef<Pair> for Pair

impl<E, ERef> AsRef<E> for ViableEpoch<E, ERef> where
    ERef: Borrow<E>, 

impl<E: Epoch> AsRef<E> for IncrementedEpoch<E>

impl AsRef<str> for ProtocolId

impl<Hash, Extrinsic> AsRef<Extrinsic> for Transaction<Hash, Extrinsic>

impl AsRef<Public> for Public

impl AsRef<[u8]> for Public

impl AsRef<Signature> for Signature

impl AsRef<[u8]> for Signature

impl AsRef<Pair> for Pair

impl AsRef<Public> for Public

impl AsRef<[u8]> for Public

impl AsRef<Signature> for Signature

impl AsRef<[u8]> for Signature

impl AsRef<Pair> for Pair

impl AsRef<Public> for Public

impl AsRef<[u8]> for Public

impl AsRef<Signature> for Signature

impl AsRef<[u8]> for Signature

impl AsRef<Pair> for Pair

impl AsRef<[u8]> for AccountId32

impl AsRef<[u8; 32]> for AccountId32

impl AsRef<[u8]> for Dummy

impl AsRef<[u8; 32]> for Public

impl AsRef<[u8]> for Public

impl AsRef<[u8; 64]> for Signature

impl AsRef<[u8]> for Signature

impl AsRef<[u8; 32]> for Public

impl AsRef<[u8]> for Public

impl AsRef<[u8; 64]> for Signature

impl AsRef<[u8]> for Signature

impl AsRef<Keypair> for Pair

impl AsRef<[u8]> for Public

impl AsRef<[u8; 65]> for Signature

impl AsRef<[u8]> for Signature

impl AsRef<[u8; 32]> for Keyring

impl AsRef<Public> for Keyring

impl AsRef<[u8; 32]> for Keyring

impl AsRef<Public> for Keyring

impl AsRef<str> for Method

impl AsRef<[u8]> for UintAuthorityId

impl AsRef<[u8]> for RuntimeString

impl AsRef<[u8]> for MultiSigner

impl AsRef<[u8]> for StorageKey