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; Const { ty: usize, val: Unevaluated(DefId { krate: CrateNum(1), node: DefIndex(1:9088) => core/2d38249::array[0]::{{impl}}[322]::{{initializer}}[0] }, Slice([])) }]impl<T> Borrow<[T]> for [T; Const { ty: usize, val: Unevaluated(DefId { krate: CrateNum(1), node: DefIndex(1:8499) => core/2d38249::array[0]::{{impl}}[113]::{{initializer}}[0] }, Slice([])) }]impl<T> Borrow<[T]> for [T; Const { ty: usize, val: Unevaluated(DefId { krate: CrateNum(1), node: DefIndex(1:8468) => core/2d38249::array[0]::{{impl}}[102]::{{initializer}}[0] }, Slice([])) }]impl<T> Borrow<[T]> for [T; Const { ty: usize, val: Unevaluated(DefId { krate: CrateNum(1), node: DefIndex(1:9057) => core/2d38249::array[0]::{{impl}}[311]::{{initializer}}[0] }, Slice([])) }]impl<T> Borrow<[T]> for [T; Const { ty: usize, val: Unevaluated(DefId { krate: CrateNum(1), node: DefIndex(1:8220) => core/2d38249::array[0]::{{impl}}[14]::{{initializer}}[0] }, Slice([])) }]impl<T> Borrow<[T]> for [T; Const { ty: usize, val: Unevaluated(DefId { krate: CrateNum(1), node: DefIndex(1:8871) => core/2d38249::array[0]::{{impl}}[245]::{{initializer}}[0] }, Slice([])) }]impl<T> Borrow<[T]> for [T; Const { ty: usize, val: Unevaluated(DefId { krate: CrateNum(1), node: DefIndex(1:8251) => core/2d38249::array[0]::{{impl}}[25]::{{initializer}}[0] }, Slice([])) }]impl<T> Borrow<[T]> for [T; Const { ty: usize, val: Unevaluated(DefId { krate: CrateNum(1), node: DefIndex(1:8437) => core/2d38249::array[0]::{{impl}}[91]::{{initializer}}[0] }, Slice([])) }]impl<'a, T> Borrow<T> for &'a mut T where
T: ?Sized,impl<'a, T> Borrow<T> for &'a T where
T: ?Sized,impl<T> Borrow<[T]> for [T; Const { ty: usize, val: Unevaluated(DefId { krate: CrateNum(1), node: DefIndex(1:8344) => core/2d38249::array[0]::{{impl}}[58]::{{initializer}}[0] }, Slice([])) }]impl<T> Borrow<[T]> for [T; Const { ty: usize, val: Unevaluated(DefId { krate: CrateNum(1), node: DefIndex(1:8592) => core/2d38249::array[0]::{{impl}}[146]::{{initializer}}[0] }, Slice([])) }]impl<T> Borrow<[T]> for [T; Const { ty: usize, val: Unevaluated(DefId { krate: CrateNum(1), node: DefIndex(1:8902) => core/2d38249::array[0]::{{impl}}[256]::{{initializer}}[0] }, Slice([])) }]impl<T> Borrow<[T]> for [T; Const { ty: usize, val: Unevaluated(DefId { krate: CrateNum(1), node: DefIndex(1:9181) => core/2d38249::array[0]::{{impl}}[355]::{{initializer}}[0] }, Slice([])) }]impl<T> Borrow<[T]> for [T; Const { ty: usize, val: Unevaluated(DefId { krate: CrateNum(1), node: DefIndex(1:8716) => core/2d38249::array[0]::{{impl}}[190]::{{initializer}}[0] }, Slice([])) }]impl<T> Borrow<[T]> for [T; Const { ty: usize, val: Unevaluated(DefId { krate: CrateNum(1), node: DefIndex(1:8995) => core/2d38249::array[0]::{{impl}}[289]::{{initializer}}[0] }, Slice([])) }]impl<T> Borrow<[T]> for [T; Const { ty: usize, val: Unevaluated(DefId { krate: CrateNum(1), node: DefIndex(1:8282) => core/2d38249::array[0]::{{impl}}[36]::{{initializer}}[0] }, Slice([])) }]impl<T> Borrow<[T]> for [T; Const { ty: usize, val: Unevaluated(DefId { krate: CrateNum(1), node: DefIndex(1:9150) => core/2d38249::array[0]::{{impl}}[344]::{{initializer}}[0] }, Slice([])) }]impl<T> Borrow<[T]> for [T; Const { ty: usize, val: Unevaluated(DefId { krate: CrateNum(1), node: DefIndex(1:8685) => core/2d38249::array[0]::{{impl}}[179]::{{initializer}}[0] }, Slice([])) }]impl<T> Borrow<[T]> for [T; Const { ty: usize, val: Unevaluated(DefId { krate: CrateNum(1), node: DefIndex(1:8747) => core/2d38249::array[0]::{{impl}}[201]::{{initializer}}[0] }, Slice([])) }]impl<T> Borrow<[T]> for [T; Const { ty: usize, val: Unevaluated(DefId { krate: CrateNum(1), node: DefIndex(1:9119) => core/2d38249::array[0]::{{impl}}[333]::{{initializer}}[0] }, Slice([])) }]impl<T> Borrow<[T]> for [T; Const { ty: usize, val: Unevaluated(DefId { krate: CrateNum(1), node: DefIndex(1:8933) => core/2d38249::array[0]::{{impl}}[267]::{{initializer}}[0] }, Slice([])) }]impl<T> Borrow<[T]> for [T; Const { ty: usize, val: Unevaluated(DefId { krate: CrateNum(1), node: DefIndex(1:8809) => core/2d38249::array[0]::{{impl}}[223]::{{initializer}}[0] }, Slice([])) }]impl<T> Borrow<[T]> for [T; Const { ty: usize, val: Unevaluated(DefId { krate: CrateNum(1), node: DefIndex(1:8561) => core/2d38249::array[0]::{{impl}}[135]::{{initializer}}[0] }, Slice([])) }]impl<T> Borrow<[T]> for [T; Const { ty: usize, val: Unevaluated(DefId { krate: CrateNum(1), node: DefIndex(1:9026) => core/2d38249::array[0]::{{impl}}[300]::{{initializer}}[0] }, Slice([])) }]impl<T> Borrow<T> for T where
T: ?Sized,impl<T> Borrow<[T]> for [T; Const { ty: usize, val: Unevaluated(DefId { krate: CrateNum(1), node: DefIndex(1:8530) => core/2d38249::array[0]::{{impl}}[124]::{{initializer}}[0] }, Slice([])) }]impl<T> Borrow<[T]> for [T; Const { ty: usize, val: Unevaluated(DefId { krate: CrateNum(1), node: DefIndex(1:8964) => core/2d38249::array[0]::{{impl}}[278]::{{initializer}}[0] }, Slice([])) }]impl<T> Borrow<[T]> for [T; Const { ty: usize, val: Unevaluated(DefId { krate: CrateNum(1), node: DefIndex(1:8406) => core/2d38249::array[0]::{{impl}}[80]::{{initializer}}[0] }, Slice([])) }]impl<T> Borrow<[T]> for [T; Const { ty: usize, val: Unevaluated(DefId { krate: CrateNum(1), node: DefIndex(1:8840) => core/2d38249::array[0]::{{impl}}[234]::{{initializer}}[0] }, Slice([])) }]impl<T> Borrow<[T]> for [T; Const { ty: usize, val: Unevaluated(DefId { krate: CrateNum(1), node: DefIndex(1:8778) => core/2d38249::array[0]::{{impl}}[212]::{{initializer}}[0] }, Slice([])) }]impl<T> Borrow<[T]> for [T; Const { ty: usize, val: Unevaluated(DefId { krate: CrateNum(1), node: DefIndex(1:8623) => core/2d38249::array[0]::{{impl}}[157]::{{initializer}}[0] }, Slice([])) }]impl<T> Borrow<[T]> for [T; Const { ty: usize, val: Unevaluated(DefId { krate: CrateNum(1), node: DefIndex(1:8375) => core/2d38249::array[0]::{{impl}}[69]::{{initializer}}[0] }, Slice([])) }]impl<T> Borrow<[T]> for [T; Const { ty: usize, val: Unevaluated(DefId { krate: CrateNum(1), node: DefIndex(1:8189) => core/2d38249::array[0]::{{impl}}[3]::{{initializer}}[0] }, Slice([])) }]impl<T> Borrow<[T]> for [T; Const { ty: usize, val: Unevaluated(DefId { krate: CrateNum(1), node: DefIndex(1:8313) => core/2d38249::array[0]::{{impl}}[47]::{{initializer}}[0] }, Slice([])) }]impl<T> Borrow<[T]> for [T; Const { ty: usize, val: Unevaluated(DefId { krate: CrateNum(1), node: DefIndex(1:8654) => core/2d38249::array[0]::{{impl}}[168]::{{initializer}}[0] }, Slice([])) }]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