Trait std::borrow::Borrow
[−]
[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`Tare` are &T`&T(a shared borrow) and&mut T(a mutable borrow). But types likeVecprovide additional kinds of borrows: the borrowed slices&[T]and` and &mut [T]`&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`Borrowtrait: ifT: Borrow, then`, then &U`&Ucan be borrowed from&T. A given type can be borrowed as multiple different types. In particular,Vecand` and Vec<T>: Borrow<[T]>.
Borrow`Borrowis 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
fn main() { 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); }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> Borrow<T> for T where T: ?Sizedimpl<'a, T> Borrow<T> for &'a T where T: ?Sizedimpl<'a, T> Borrow<T> for &'a mut T where T: ?Sizedimpl<T> Borrow<T> for Box<T> where T: ?Sizedimpl<T> Borrow<T> for Rc<T> where T: ?Sizedimpl<T> Borrow<T> for Arc<T> where T: ?Sizedimpl<'a, B> Borrow<B> for Cow<'a, B> where B: ToOwned + ?Sized, B::Owned: 'aimpl<T> Borrow<[T]> for Vec<T>impl Borrow<str> for Stringimpl Borrow<CStr> for CStringimpl Borrow<OsStr> for OsStringimpl Borrow<Path> for PathBuf