Trait alloc::borrow::Borrow  1.0.0
                   
                       [−]
                   
               [src]
pub trait Borrow<Borrowed> where
    Borrowed: ?Sized, {
    fn borrow(&self) -> &Borrowed;
}A trait for borrowing data.
In general, there may be several ways to "borrow" a piece of data.  The
typical ways of borrowing a type T are &T (a shared borrow) and &mut T
(a mutable borrow). But types like Vec<T> provide additional kinds of
borrows: the borrowed slices &[T] and &mut [T].
When writing generic code, it is often desirable to abstract over all ways
of borrowing data from a given type. That is the role of the Borrow
trait: if T: Borrow<U>, then &U can be borrowed from &T.  A given
type can be borrowed as multiple different types. In particular, Vec<T>: Borrow<Vec<T>> and Vec<T>: Borrow<[T]>.
If you are implementing Borrow and both Self and Borrowed implement
Hash, Eq, and/or Ord, they must produce the same result.
Borrow is very similar to, but different than, AsRef. See
the book for more.
Required Methods
fn borrow(&self) -> &Borrowed
Immutably borrows from an owned value.
Examples
use std::borrow::Borrow; fn check<T: Borrow<str>>(s: T) { assert_eq!("Hello", s.borrow()); } let s = "Hello".to_string(); check(s); let s = "Hello"; check(s);
Implementors
- impl<T: ?Sized> Borrow<T> for Box<T>
- impl<T: ?Sized> Borrow<T> for Arc<T>
- impl<T: ?Sized> Borrow<T> for Rc<T>
- impl<T> Borrow<T> for T where
 T: ?Sized,
- impl<T> Borrow<[T]> for [T; 1]
- impl<T> Borrow<[T]> for [T; 14]
- impl<T> Borrow<[T]> for [T; 2]
- impl<T> Borrow<[T]> for [T; 32]
- impl<T> Borrow<[T]> for [T; 19]
- impl<T> Borrow<[T]> for [T; 12]
- impl<T> Borrow<[T]> for [T; 23]
- impl<T> Borrow<[T]> for [T; 9]
- impl<T> Borrow<[T]> for [T; 27]
- impl<T> Borrow<[T]> for [T; 26]
- impl<'a, T> Borrow<T> for &'a mut T where
 T: ?Sized,
- impl<T> Borrow<[T]> for [T; 15]
- impl<T> Borrow<[T]> for [T; 11]
- impl<T> Borrow<[T]> for [T; 7]
- impl<T> Borrow<[T]> for [T; 3]
- impl<'a, T> Borrow<T> for &'a T where
 T: ?Sized,
- impl<T> Borrow<[T]> for [T; 22]
- impl<T> Borrow<[T]> for [T; 6]
- impl<T> Borrow<[T]> for [T; 10]
- impl<T> Borrow<[T]> for [T; 25]
- impl<T> Borrow<[T]> for [T; 13]
- impl<T> Borrow<[T]> for [T; 0]
- impl<T> Borrow<[T]> for [T; 24]
- impl<T> Borrow<[T]> for [T; 29]
- impl<T> Borrow<[T]> for [T; 16]
- impl<T> Borrow<[T]> for [T; 21]
- impl<T> Borrow<[T]> for [T; 20]
- impl<T> Borrow<[T]> for [T; 30]
- impl<T> Borrow<[T]> for [T; 18]
- impl<T> Borrow<[T]> for [T; 4]
- impl<T> Borrow<[T]> for [T; 17]
- impl<T> Borrow<[T]> for [T; 5]
- impl<T> Borrow<[T]> for [T; 8]
- impl<T> Borrow<[T]> for [T; 31]
- impl<T> Borrow<[T]> for [T; 28]
- impl<'a, B: ?Sized> Borrow<B> for Cow<'a, B> where
 B: ToOwned,
 <B as ToOwned>::Owned: 'a,
- impl<T> Borrow<[T]> for Vec<T>
- impl Borrow<str> for String