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.
fn borrow(&self) -> &BorrowedImmutably borrows from an owned value.
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); impl<'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<T> Borrow<T> for Box<T> where T: ?Sizedimpl<T> Borrow<T> for Arc<T> where T: ?Sizedimpl<T> Borrow<T> for Rc<T> where T: ?Sizedimpl<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 [T; 0]impl<T> Borrow<[T]> for [T; 1]impl<T> Borrow<[T]> for [T; 2]impl<T> Borrow<[T]> for [T; 3]impl<T> Borrow<[T]> for [T; 4]impl<T> Borrow<[T]> for [T; 5]impl<T> Borrow<[T]> for [T; 6]impl<T> Borrow<[T]> for [T; 7]impl<T> Borrow<[T]> for [T; 8]impl<T> Borrow<[T]> for [T; 9]impl<T> Borrow<[T]> for [T; 10]impl<T> Borrow<[T]> for [T; 11]impl<T> Borrow<[T]> for [T; 12]impl<T> Borrow<[T]> for [T; 13]impl<T> Borrow<[T]> for [T; 14]impl<T> Borrow<[T]> for [T; 15]impl<T> Borrow<[T]> for [T; 16]impl<T> Borrow<[T]> for [T; 17]impl<T> Borrow<[T]> for [T; 18]impl<T> Borrow<[T]> for [T; 19]impl<T> Borrow<[T]> for [T; 20]impl<T> Borrow<[T]> for [T; 21]impl<T> Borrow<[T]> for [T; 22]impl<T> Borrow<[T]> for [T; 23]impl<T> Borrow<[T]> for [T; 24]impl<T> Borrow<[T]> for [T; 25]impl<T> Borrow<[T]> for [T; 26]impl<T> Borrow<[T]> for [T; 27]impl<T> Borrow<[T]> for [T; 28]impl<T> Borrow<[T]> for [T; 29]impl<T> Borrow<[T]> for [T; 30]impl<T> Borrow<[T]> for [T; 31]impl<T> Borrow<[T]> for [T; 32]impl Borrow<CStr> for CStringimpl Borrow<OsStr> for OsStringimpl Borrow<Path> for PathBuf
© 2010 The Rust Project Developers
Licensed under the Apache License, Version 2.0 or the MIT license, at your option.
https://doc.rust-lang.org/std/borrow/trait.Borrow.html