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) -> &Borrowed
Immutably 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<T> Borrow<T> for T where T: ?Sized
impl<'a, T> Borrow<T> for &'a T where T: ?Sized
impl<'a, T> Borrow<T> for &'a mut T where T: ?Sized
impl<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<T> Borrow<T> for Box<T> where T: ?Sized
impl<T> Borrow<T> for Arc<T> where T: ?Sized
impl<T> Borrow<T> for Rc<T> where T: ?Sized
impl<'a, B: ?Sized> Borrow<B> for Cow<'a, B> where B: ToOwned, B::Owned: 'a
impl<T> Borrow<[T]> for Vec<T>
impl Borrow<str> for String
© 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/collections/borrow/trait.Borrow.html