pub trait AsRef<T> where
T: ?Sized, {
fn as_ref(&self) -> &Tⓘ;
}
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>
.
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
)
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);
Loading content...impl<T, const N: usize> AsRef<[T]> for [T; N]
[src]
impl<T> AsRef<[T]> for [T]
[src]
impl<'_, T, U> AsRef<U> for &'_ T where
T: AsRef<U> + ?Sized,
U: ?Sized,
[src]
impl<'_, T, U> AsRef<U> for &'_ mut T where
T: AsRef<U> + ?Sized,
U: ?Sized,
[src]
impl AsRef<[u8]> for str
[src]
impl AsRef<str> for str
[src]
impl AsRef<OsStr> for str
[src]
impl<'_> AsRef<Path> for Components<'_>
[src]
impl AsRef<Path> for Path
[src]
impl AsRef<Path> for String
[src]
impl<'_> AsRef<OsStr> for Iter<'_>
[src]
impl AsRef<OsStr> for OsString
[src]
impl AsRef<OsStr> for OsStr
[src]
impl<'_> AsRef<OsStr> for Component<'_>
[src]
impl<'_> AsRef<Path> for Component<'_>
[src]
impl AsRef<OsStr> for PathBuf
[src]
impl AsRef<Path> for str
[src]
impl<'_> AsRef<Path> for Iter<'_>
[src]
impl AsRef<Path> for PathBuf
[src]
impl AsRef<CStr> for CStr
[src]
impl AsRef<OsStr> for String
[src]
impl AsRef<OsStr> for Path
[src]
impl AsRef<CStr> for CString
[src]
impl<'_> AsRef<OsStr> for Components<'_>
[src]
impl AsRef<Path> for OsString
[src]
impl AsRef<Path> for OsStr
[src]
impl<'_> AsRef<Path> for Cow<'_, OsStr>
[src]
impl<T, A> AsRef<[T]> for Vec<T, A> where
A: Allocator,
[src]
impl<'a, T, A> AsRef<[T]> for Drain<'a, T, A> where
A: Allocator,
[src]
impl<T, A> AsRef<[T]> for IntoIter<T, A> where
A: Allocator,
[src]
impl<T, A> AsRef<T> for Box<T, A> where
T: ?Sized,
A: Allocator,
[src]
impl<T> AsRef<T> for Arc<T> where
T: ?Sized,
[src]
impl<'_, T> AsRef<T> for Cow<'_, T> where
T: ToOwned + ?Sized,
[src]
impl AsRef<[u8]> for String
[src]
impl<T, A> AsRef<Vec<T, A>> for Vec<T, A> where
A: Allocator,
[src]
impl AsRef<str> for String
[src]
impl<T> AsRef<T> for Rc<T> where
T: ?Sized,
[src]
impl<T> AsRef<[T; 27]> for GenericArray<T, UInt<UInt<UInt<UInt<UInt<UTerm, B1>, B1>, B0>, B1>, B1>>
impl<T> AsRef<[T; 15]> for GenericArray<T, UInt<UInt<UInt<UInt<UTerm, B1>, B1>, B1>, B1>>
impl<T> AsRef<[T; 6]> for GenericArray<T, UInt<UInt<UInt<UTerm, B1>, B1>, B0>>
impl<T> AsRef<[T; 11]> for GenericArray<T, UInt<UInt<UInt<UInt<UTerm, B1>, B0>, B1>, B1>>
impl<T> AsRef<[T; 8]> for GenericArray<T, UInt<UInt<UInt<UInt<UTerm, B1>, B0>, B0>, B0>>
impl<T, N> AsRef<[T]> for GenericArray<T, N> where
N: ArrayLength<T>,
impl<T> AsRef<[T; 20]> for GenericArray<T, UInt<UInt<UInt<UInt<UInt<UTerm, B1>, B0>, B1>, B0>, B0>>
impl<T> AsRef<[T; 18]> for GenericArray<T, UInt<UInt<UInt<UInt<UInt<UTerm, B1>, B0>, B0>, B1>, B0>>
impl<T> AsRef<[T; 4]> for GenericArray<T, UInt<UInt<UInt<UTerm, B1>, B0>, B0>>
impl<T> AsRef<[T; 29]> for GenericArray<T, UInt<UInt<UInt<UInt<UInt<UTerm, B1>, B1>, B1>, B0>, B1>>
impl<T> AsRef<[T; 23]> for GenericArray<T, UInt<UInt<UInt<UInt<UInt<UTerm, B1>, B0>, B1>, B1>, B1>>
impl<T> AsRef<[T; 30]> for GenericArray<T, UInt<UInt<UInt<UInt<UInt<UTerm, B1>, B1>, B1>, B1>, B0>>
impl<T> AsRef<[T; 22]> for GenericArray<T, UInt<UInt<UInt<UInt<UInt<UTerm, B1>, B0>, B1>, B1>, B0>>
impl<T> AsRef<[T; 32]> for GenericArray<T, UInt<UInt<UInt<UInt<UInt<UInt<UTerm, B1>, B0>, B0>, B0>, B0>, B0>>
impl<T> AsRef<[T; 10]> for GenericArray<T, UInt<UInt<UInt<UInt<UTerm, B1>, B0>, B1>, B0>>
impl<T> AsRef<[T; 16]> for GenericArray<T, UInt<UInt<UInt<UInt<UInt<UTerm, B1>, B0>, B0>, B0>, B0>>
impl<T> AsRef<[T; 25]> for GenericArray<T, UInt<UInt<UInt<UInt<UInt<UTerm, B1>, B1>, B0>, B0>, B1>>
impl<T> AsRef<[T; 13]> for GenericArray<T, UInt<UInt<UInt<UInt<UTerm, B1>, B1>, B0>, B1>>
impl<T> AsRef<[T; 9]> for GenericArray<T, UInt<UInt<UInt<UInt<UTerm, B1>, B0>, B0>, B1>>
impl<T> AsRef<[T; 17]> for GenericArray<T, UInt<UInt<UInt<UInt<UInt<UTerm, B1>, B0>, B0>, B0>, B1>>
impl<T> AsRef<[T; 24]> for GenericArray<T, UInt<UInt<UInt<UInt<UInt<UTerm, B1>, B1>, B0>, B0>, B0>>
impl<T> AsRef<[T; 12]> for GenericArray<T, UInt<UInt<UInt<UInt<UTerm, B1>, B1>, B0>, B0>>
impl<T> AsRef<[T; 1]> for GenericArray<T, UInt<UTerm, B1>>
impl<T> AsRef<[T; 3]> for GenericArray<T, UInt<UInt<UTerm, B1>, B1>>
impl<T> AsRef<[T; 21]> for GenericArray<T, UInt<UInt<UInt<UInt<UInt<UTerm, B1>, B0>, B1>, B0>, B1>>
impl<T> AsRef<[T; 2]> for GenericArray<T, UInt<UInt<UTerm, B1>, B0>>
impl<T> AsRef<[T; 7]> for GenericArray<T, UInt<UInt<UInt<UTerm, B1>, B1>, B1>>
impl<T> AsRef<[T; 14]> for GenericArray<T, UInt<UInt<UInt<UInt<UTerm, B1>, B1>, B1>, B0>>
impl<T> AsRef<[T; 31]> for GenericArray<T, UInt<UInt<UInt<UInt<UInt<UTerm, B1>, B1>, B1>, B1>, B1>>
impl<T> AsRef<[T; 26]> for GenericArray<T, UInt<UInt<UInt<UInt<UInt<UTerm, B1>, B1>, B0>, B1>, B0>>
impl<T> AsRef<[T; 5]> for GenericArray<T, UInt<UInt<UInt<UTerm, B1>, B0>, B1>>
impl<T> AsRef<[T; 28]> for GenericArray<T, UInt<UInt<UInt<UInt<UInt<UTerm, B1>, B1>, B1>, B0>, B0>>
impl<T> AsRef<[T; 19]> for GenericArray<T, UInt<UInt<UInt<UInt<UInt<UTerm, B1>, B0>, B0>, B1>, B1>>
impl<O, V> AsRef<BitSlice<O, <V as BitView>::Store>> for BitArray<O, V> where
V: BitView,
O: BitOrder,
pub fn as_ref(&self) -> &BitSlice<O, <V as BitView>::Store>
impl<'_, O, T> AsRef<BitSlice<O, T>> for Iter<'_, O, T> where
T: BitStore,
O: BitOrder,
pub fn as_ref(&self) -> &BitSlice<O, T>
impl<T> AsRef<T> for FmtLowerExp<T> where
T: LowerExp,
impl<T> AsRef<T> for FmtLowerHex<T> where
T: LowerHex,
impl<T> AsRef<T> for FmtPointer<T> where
T: Pointer,
impl<T> AsRef<T> for FmtBinary<T> where
T: Binary,
impl<T> AsRef<T> for FmtDisplay<T> where
T: Display,
impl<T> AsRef<T> for FmtOctal<T> where
T: Octal,
impl<T> AsRef<T> for FmtUpperExp<T> where
T: UpperExp,
impl<T> AsRef<T> for FmtUpperHex<T> where
T: UpperHex,
impl<T, N> AsRef<[T]> for GenericArray<T, N> where
N: ArrayLength<T>,
impl<T, N> AsRef<[T]> for GenericArray<T, N> where
N: ArrayLength<T>,
Loading content...impl<'_, T> AsRef<[T]> for signature_core::lib::slice::Iter<'_, T>
1.13.0[src]
impl<'_, T> AsRef<[T]> for IterMut<'_, T>
1.53.0[src]
impl<N> AsRef<[u8]> for signature_core::lib::String<N> where
N: ArrayLength<u8>,
[src]
impl<N> AsRef<str> for signature_core::lib::String<N> where
N: ArrayLength<u8>,
[src]
impl<T, N> AsRef<[T]> for signature_core::lib::Vec<T, N> where
N: ArrayLength<T>,
[src]
impl<T, N> AsRef<Vec<T, N>> for signature_core::lib::Vec<T, N> where
N: ArrayLength<T>,
[src]
Loading content...