Enum std::borrow::Cow
pub enum Cow<'a, B> where B: 'a + ToOwned + ?Sized, { Borrowed(&'a B), Owned(<B as ToOwned>::Owned), }
A clone-on-write smart pointer.
The type Cow
is a smart pointer providing clone-on-write functionality: it can enclose and provide immutable access to borrowed data, and clone the data lazily when mutation or ownership is required. The type is designed to work with general borrowed data via the Borrow
trait.
Cow
implements Deref
, which means that you can call non-mutating methods directly on the data it encloses. If mutation is desired, to_mut
will obtain a mutable reference to an owned value, cloning if necessary.
If you need reference-counting pointers, note that Rc::make_mut
and Arc::make_mut
can provide clone-on-write functionality as well.
Examples
use std::borrow::Cow; fn abs_all(input: &mut Cow<[i32]>) { for i in 0..input.len() { let v = input[i]; if v < 0 { // Clones into a vector if not already owned. input.to_mut()[i] = -v; } } } // No clone occurs because `input` doesn't need to be mutated. let slice = [0, 1, 2]; let mut input = Cow::from(&slice[..]); abs_all(&mut input); // Clone occurs because `input` needs to be mutated. let slice = [-1, 0, 1]; let mut input = Cow::from(&slice[..]); abs_all(&mut input); // No clone occurs because `input` is already owned. let mut input = Cow::from(vec![-1, 0, 1]); abs_all(&mut input);
Another example showing how to keep Cow
in a struct:
use std::borrow::Cow; struct Items<'a, X: 'a> where [X]: ToOwned<Owned = Vec<X>> { values: Cow<'a, [X]>, } impl<'a, X: Clone + 'a> Items<'a, X> where [X]: ToOwned<Owned = Vec<X>> { fn new(v: Cow<'a, [X]>) -> Self { Items { values: v } } } // Creates a container from borrowed values of a slice let readonly = [1, 2]; let borrowed = Items::new((&readonly[..]).into()); match borrowed { Items { values: Cow::Borrowed(b) } => println!("borrowed {:?}", b), _ => panic!("expect borrowed value"), } let mut clone_on_write = borrowed; // Mutates the data from slice into owned vec and pushes a new value on top clone_on_write.values.to_mut().push(3); println!("clone_on_write = {:?}", clone_on_write.values); // The data was mutated. Let check it out. match clone_on_write { Items { values: Cow::Owned(_) } => println!("clone_on_write contains owned data"), _ => panic!("expect owned data"), }
Variants
Borrowed(&'a B)
Borrowed data.
Tuple Fields of Borrowed
0: &'a B
Owned data.
Implementations
pub fn is_borrowed(&self) -> bool
Returns true if the data is borrowed, i.e. if to_mut
would require additional work.
Examples
#![feature(cow_is_borrowed)] use std::borrow::Cow; let cow = Cow::Borrowed("moo"); assert!(cow.is_borrowed()); let bull: Cow<'_, str> = Cow::Owned("...moo?".to_string()); assert!(!bull.is_borrowed());
pub fn is_owned(&self) -> bool
Returns true if the data is owned, i.e. if to_mut
would be a no-op.
Examples
#![feature(cow_is_borrowed)] use std::borrow::Cow; let cow: Cow<'_, str> = Cow::Owned("moo".to_string()); assert!(cow.is_owned()); let bull = Cow::Borrowed("...moo?"); assert!(!bull.is_owned());
pub fn to_mut(&mut self) -> &mut <B as ToOwned>::Owned
Acquires a mutable reference to the owned form of the data.
Clones the data if it is not already owned.
Examples
use std::borrow::Cow; let mut cow = Cow::Borrowed("foo"); cow.to_mut().make_ascii_uppercase(); assert_eq!( cow, Cow::Owned(String::from("FOO")) as Cow<str> );
pub fn into_owned(self) -> <B as ToOwned>::Owned
Extracts the owned data.
Clones the data if it is not already owned.
Examples
Calling into_owned
on a Cow::Borrowed
clones the underlying data and becomes a Cow::Owned
:
use std::borrow::Cow; let s = "Hello world!"; let cow = Cow::Borrowed(s); assert_eq!( cow.into_owned(), String::from(s) );
Calling into_owned
on a Cow::Owned
is a no-op:
use std::borrow::Cow; let s = "Hello world!"; let cow: Cow<str> = Cow::Owned(String::from(s)); assert_eq!( cow.into_owned(), String::from(s) );
Trait Implementations
impl<'a> Add<&'a str> for Cow<'a, str>
type Output = Cow<'a, str>
The resulting type after applying the +
operator.
pub fn add(self, rhs: &'a str) -> <Cow<'a, str> as Add<&'a str>>::Output
Performs the +
operation. Read more
impl<'a> Add<Cow<'a, str>> for Cow<'a, str>
type Output = Cow<'a, str>
The resulting type after applying the +
operator.
pub fn add(
self,
rhs: Cow<'a, str>
) -> <Cow<'a, str> as Add<Cow<'a, str>>>::Output
Performs the +
operation. Read more
impl<'a> AddAssign<&'a str> for Cow<'a, str>
impl<'a> AddAssign<Cow<'a, str>> for Cow<'a, str>
impl AsRef<Path> for Cow<'_, OsStr>
fn as_ref(&self) -> &Path
Performs the conversion.
pub fn as_ref(&self) -> &T
Performs the conversion.
pub fn clone(&self) -> Cow<'_, B>
Returns a copy of the value. Read more
pub fn clone_from(&mut self, source: &Cow<'_, B>)
Performs copy-assignment from source
. Read more
pub fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>
Formats the value using the given formatter. Read more
pub fn default() -> Cow<'_, B>
Creates an owned Cow<’a, B> with the default value for the contained owned value.
type Target = B
The resulting type after dereferencing.
pub fn deref(&self) -> &B
Dereferences the value.
pub fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>
Formats the value using the given formatter. Read more
impl<'a> Extend<Cow<'a, OsStr>> for OsString
fn extend<T: IntoIterator<Item = Cow<'a, OsStr>>>(&mut self, iter: T)
Extends a collection with the contents of an iterator. Read more
fn extend_one(&mut self, item: A)
Extends a collection with exactly one element.
fn extend_reserve(&mut self, additional: usize)
Reserves capacity in a collection for the given number of additional elements. Read more
impl<'a> Extend<Cow<'a, str>> for String
pub fn extend<I>(&mut self, iter: I) where
I: IntoIterator<Item = Cow<'a, str>>,
Extends a collection with the contents of an iterator. Read more
pub fn extend_one(&mut self, s: Cow<'a, str>)
Extends a collection with exactly one element.
fn extend_reserve(&mut self, additional: usize)
Reserves capacity in a collection for the given number of additional elements. Read more
pub fn from(s: &'a [T]) -> Cow<'a, [T]>
impl<'a> From<&'a CStr> for Cow<'a, CStr>
fn from(s: &'a CStr) -> Cow<'a, CStr>
Performs the conversion.
impl<'a> From<&'a CString> for Cow<'a, CStr>
fn from(s: &'a CString) -> Cow<'a, CStr>
Performs the conversion.
impl<'a> From<&'a OsStr> for Cow<'a, OsStr>
fn from(s: &'a OsStr) -> Cow<'a, OsStr>
Performs the conversion.
impl<'a> From<&'a OsString> for Cow<'a, OsStr>
fn from(s: &'a OsString) -> Cow<'a, OsStr>
Performs the conversion.
impl<'a> From<&'a Path> for Cow<'a, Path>
fn from(s: &'a Path) -> Cow<'a, Path>
Creates a clone-on-write pointer from a reference to Path
.
This conversion does not clone or allocate.
impl<'a> From<&'a PathBuf> for Cow<'a, Path>
fn from(p: &'a PathBuf) -> Cow<'a, Path>
Creates a clone-on-write pointer from a reference to PathBuf
.
This conversion does not clone or allocate.
impl<'a> From<&'a String> for Cow<'a, str>
pub fn from(s: &'a String) -> Cow<'a, str>
pub fn from(v: &'a Vec<T, Global>) -> Cow<'a, [T]>
impl<'a> From<&'a str> for Cow<'a, str>
pub fn from(s: &'a str) -> Cow<'a, str>
Converts a string slice into a Borrowed
variant. No heap allocation is performed, and the string is not copied.
Example
assert_eq!(Cow::from("eggplant"), Cow::Borrowed("eggplant"));
impl<'a> From<CString> for Cow<'a, CStr>
fn from(s: CString) -> Cow<'a, CStr>
Performs the conversion.
pub fn from(cow: Cow<'_, [T]>) -> Box<[T], Global>
impl<I, A> Iterator for Box<I, A> where I: Iterator + ?Sized, A: Allocator, type Item = <I as Iterator>::Item; impl<F, A> Future for Box<F, A> where F: Future + Unpin + ?Sized, A: Allocator + 'static, type Output = <F as Future>::Output; impl<R: Read + ?Sized> Read for Box<R> impl<W: Write + ?Sized> Write for Box<W>
Performs the conversion.
impl From<Cow<'_, CStr>> for Box<CStr>
fn from(cow: Cow<'_, CStr>) -> Box<CStr>
impl<I, A> Iterator for Box<I, A> where I: Iterator + ?Sized, A: Allocator, type Item = <I as Iterator>::Item; impl<F, A> Future for Box<F, A> where F: Future + Unpin + ?Sized, A: Allocator + 'static, type Output = <F as Future>::Output; impl<R: Read + ?Sized> Read for Box<R> impl<W: Write + ?Sized> Write for Box<W>
Performs the conversion.
impl From<Cow<'_, OsStr>> for Box<OsStr>
fn from(cow: Cow<'_, OsStr>) -> Box<OsStr>
impl<I, A> Iterator for Box<I, A> where I: Iterator + ?Sized, A: Allocator, type Item = <I as Iterator>::Item; impl<F, A> Future for Box<F, A> where F: Future + Unpin + ?Sized, A: Allocator + 'static, type Output = <F as Future>::Output; impl<R: Read + ?Sized> Read for Box<R> impl<W: Write + ?Sized> Write for Box<W>
Performs the conversion.
impl From<Cow<'_, Path>> for Box<Path>
fn from(cow: Cow<'_, Path>) -> Box<Path>
impl<I, A> Iterator for Box<I, A> where I: Iterator + ?Sized, A: Allocator, type Item = <I as Iterator>::Item; impl<F, A> Future for Box<F, A> where F: Future + Unpin + ?Sized, A: Allocator + 'static, type Output = <F as Future>::Output; impl<R: Read + ?Sized> Read for Box<R> impl<W: Write + ?Sized> Write for Box<W>
Creates a boxed Path
from a clone-on-write pointer.
Converting from a Cow::Owned
does not clone or allocate.
impl<'_> From<Cow<'_, str>> for Box<str, Global>
pub fn from(cow: Cow<'_, str>) -> Box<str, Global>
impl<I, A> Iterator for Box<I, A> where I: Iterator + ?Sized, A: Allocator, type Item = <I as Iterator>::Item; impl<F, A> Future for Box<F, A> where F: Future + Unpin + ?Sized, A: Allocator + 'static, type Output = <F as Future>::Output; impl<R: Read + ?Sized> Read for Box<R> impl<W: Write + ?Sized> Write for Box<W>
Performs the conversion.
pub fn from(s: Cow<'a, [T]>) -> Vec<T, Global>
Convert a clone-on-write slice into a vector.
If s
already owns a Vec<T>
, it will be returned directly. If s
is borrowing a slice, a new Vec<T>
will be allocated and filled by cloning s
’s items into it.
Examples
let o: Cow<[i32]> = Cow::Owned(vec![1, 2, 3]); let b: Cow<[i32]> = Cow::Borrowed(&[1, 2, 3]); assert_eq!(Vec::from(o), Vec::from(b));
pub fn from(cow: Cow<'a, B>) -> Arc<B>
Create an atomically reference-counted pointer from a clone-on-write pointer by copying its content.
Example
let cow: Cow<str> = Cow::Borrowed("eggplant"); let shared: Arc<str> = Arc::from(cow); assert_eq!("eggplant", &shared[..]);
pub fn from(cow: Cow<'a, B>) -> Rc<B>
Create a reference-counted pointer from a clone-on-write pointer by copying its content.
Example
let cow: Cow<str> = Cow::Borrowed("eggplant"); let shared: Rc<str> = Rc::from(cow); assert_eq!("eggplant", &shared[..]);
impl<'a> From<Cow<'a, CStr>> for CString
fn from(s: Cow<'a, CStr>) -> Self
Performs the conversion.
impl<'a> From<Cow<'a, OsStr>> for OsString
fn from(s: Cow<'a, OsStr>) -> Self
Performs the conversion.
impl<'a> From<Cow<'a, Path>> for PathBuf
fn from(p: Cow<'a, Path>) -> Self
Converts a clone-on-write pointer to an owned path.
Converting from a Cow::Owned
does not clone or allocate.
impl<'a> From<Cow<'a, str>> for String
pub fn from(s: Cow<'a, str>) -> String
Converts a clone-on-write string to an owned instance of String
.
This extracts the owned string, clones the string if it is not already owned.
Example
// If the string is not owned... let cow: Cow<str> = Cow::Borrowed("eggplant"); // It will allocate on the heap and copy the string. let owned: String = String::from(cow); assert_eq!(&owned[..], "eggplant");
impl<'a> From<Cow<'a, str>> for Box<dyn Error>
fn from(err: Cow<'a, str>) -> Box<dyn Error>
impl<I, A> Iterator for Box<I, A> where I: Iterator + ?Sized, A: Allocator, type Item = <I as Iterator>::Item; impl<F, A> Future for Box<F, A> where F: Future + Unpin + ?Sized, A: Allocator + 'static, type Output = <F as Future>::Output; impl<R: Read + ?Sized> Read for Box<R> impl<W: Write + ?Sized> Write for Box<W>
impl<'a, 'b> From<Cow<'b, str>> for Box<dyn Error + Send + Sync + 'a>
fn from(err: Cow<'b, str>) -> Box<dyn Error + Send + Sync + 'a>
impl<I, A> Iterator for Box<I, A> where I: Iterator + ?Sized, A: Allocator, type Item = <I as Iterator>::Item; impl<F, A> Future for Box<F, A> where F: Future + Unpin + ?Sized, A: Allocator + 'static, type Output = <F as Future>::Output; impl<R: Read + ?Sized> Read for Box<R> impl<W: Write + ?Sized> Write for Box<W>
Converts a Cow
into a box of dyn Error
+ Send
+ Sync
.
Examples
use std::error::Error; use std::mem; use std::borrow::Cow; let a_cow_str_error = Cow::from("a str error"); let a_boxed_error = Box::<dyn Error + Send + Sync>::from(a_cow_str_error); assert!( mem::size_of::<Box<dyn Error + Send + Sync>>() == mem::size_of_val(&a_boxed_error))
impl<'a> From<OsString> for Cow<'a, OsStr>
fn from(s: OsString) -> Cow<'a, OsStr>
Performs the conversion.
impl<'a> From<PathBuf> for Cow<'a, Path>
fn from(s: PathBuf) -> Cow<'a, Path>
Creates a clone-on-write pointer from an owned instance of PathBuf
.
This conversion does not clone or allocate.
impl<'a> From<String> for Cow<'a, str>
pub fn from(s: String) -> Cow<'a, str>
pub fn from(v: Vec<T, Global>) -> Cow<'a, [T]>
impl<'a, 'b> FromIterator<&'b str> for Cow<'a, str>
pub fn from_iter<I>(it: I) -> Cow<'a, str> where
I: IntoIterator<Item = &'b str>,
Creates a value from an iterator. Read more
impl<'a> FromIterator<Cow<'a, OsStr>> for OsString
fn from_iter<I: IntoIterator<Item = Cow<'a, OsStr>>>(iter: I) -> Self
Creates a value from an iterator. Read more
impl<'a> FromIterator<Cow<'a, str>> for String
pub fn from_iter<I>(iter: I) -> String where
I: IntoIterator<Item = Cow<'a, str>>,
Creates a value from an iterator. Read more
impl<'a> FromIterator<String> for Cow<'a, str>
pub fn from_iter<I>(it: I) -> Cow<'a, str> where
I: IntoIterator<Item = String>,
Creates a value from an iterator. Read more
pub fn from_iter<I>(it: I) -> Cow<'a, [T]> where
I: IntoIterator<Item = T>,
Creates a value from an iterator. Read more
impl<'a> FromIterator<char> for Cow<'a, str>
pub fn from_iter<I>(it: I) -> Cow<'a, str> where
I: IntoIterator<Item = char>,
Creates a value from an iterator. Read more
pub fn cmp(&self, other: &Cow<'_, B>) -> Ordering
fn max(self, other: Self) -> Self
Compares and returns the maximum of two values. Read more
fn min(self, other: Self) -> Self
Compares and returns the minimum of two values. Read more
fn clamp(self, min: Self, max: Self) -> Self
Restrict a value to a certain interval. Read more
pub fn eq(&self, other: &&[U]) -> bool
This method tests for self
and other
values to be equal, and is used by ==
. Read more
pub fn ne(&self, other: &&[U]) -> bool
This method tests for !=
.
pub fn eq(&self, other: &&mut [U]) -> bool
This method tests for self
and other
values to be equal, and is used by ==
. Read more
pub fn ne(&self, other: &&mut [U]) -> bool
This method tests for !=
.
impl<'a, 'b> PartialEq<&'a Path> for Cow<'b, OsStr>
fn eq(&self, other: &&'a Path) -> bool
This method tests for self
and other
values to be equal, and is used by ==
. Read more
fn ne(&self, other: &Rhs) -> bool
This method tests for !=
.
impl<'a, 'b> PartialEq<&'b OsStr> for Cow<'a, OsStr>
fn eq(&self, other: &&'b OsStr) -> bool
This method tests for self
and other
values to be equal, and is used by ==
. Read more
fn ne(&self, other: &Rhs) -> bool
This method tests for !=
.
impl<'a, 'b> PartialEq<&'b OsStr> for Cow<'a, Path>
fn eq(&self, other: &&'b OsStr) -> bool
This method tests for self
and other
values to be equal, and is used by ==
. Read more
fn ne(&self, other: &Rhs) -> bool
This method tests for !=
.
impl<'a, 'b> PartialEq<&'b Path> for Cow<'a, Path>
fn eq(&self, other: &&'b Path) -> bool
This method tests for self
and other
values to be equal, and is used by ==
. Read more
fn ne(&self, other: &Rhs) -> bool
This method tests for !=
.
impl<'a, 'b> PartialEq<&'b str> for Cow<'a, str>
pub fn eq(&self, other: &&'b str) -> bool
This method tests for self
and other
values to be equal, and is used by ==
. Read more
pub fn ne(&self, other: &&'b str) -> bool
This method tests for !=
.
impl<'a, 'b> PartialEq<Cow<'a, OsStr>> for OsStr
fn eq(&self, other: &Cow<'a, OsStr>) -> bool
This method tests for self
and other
values to be equal, and is used by ==
. Read more
fn ne(&self, other: &Rhs) -> bool
This method tests for !=
.
impl<'a, 'b> PartialEq<Cow<'a, OsStr>> for &'b OsStr
fn eq(&self, other: &Cow<'a, OsStr>) -> bool
This method tests for self
and other
values to be equal, and is used by ==
. Read more
fn ne(&self, other: &Rhs) -> bool
This method tests for !=
.
impl<'a, 'b> PartialEq<Cow<'a, OsStr>> for OsString
fn eq(&self, other: &Cow<'a, OsStr>) -> bool
This method tests for self
and other
values to be equal, and is used by ==
. Read more
fn ne(&self, other: &Rhs) -> bool
This method tests for !=
.
impl<'a, 'b> PartialEq<Cow<'a, OsStr>> for PathBuf
fn eq(&self, other: &Cow<'a, OsStr>) -> bool
This method tests for self
and other
values to be equal, and is used by ==
. Read more
fn ne(&self, other: &Rhs) -> bool
This method tests for !=
.
impl<'a, 'b> PartialEq<Cow<'a, OsStr>> for Path
fn eq(&self, other: &Cow<'a, OsStr>) -> bool
This method tests for self
and other
values to be equal, and is used by ==
. Read more
fn ne(&self, other: &Rhs) -> bool
This method tests for !=
.
impl<'a, 'b> PartialEq<Cow<'a, Path>> for Path
fn eq(&self, other: &Cow<'a, Path>) -> bool
This method tests for self
and other
values to be equal, and is used by ==
. Read more
fn ne(&self, other: &Rhs) -> bool
This method tests for !=
.
impl<'a, 'b> PartialEq<Cow<'a, Path>> for &'b Path
fn eq(&self, other: &Cow<'a, Path>) -> bool
This method tests for self
and other
values to be equal, and is used by ==
. Read more
fn ne(&self, other: &Rhs) -> bool
This method tests for !=
.
impl<'a, 'b> PartialEq<Cow<'a, Path>> for PathBuf
fn eq(&self, other: &Cow<'a, Path>) -> bool
This method tests for self
and other
values to be equal, and is used by ==
. Read more
fn ne(&self, other: &Rhs) -> bool
This method tests for !=
.
impl<'a, 'b> PartialEq<Cow<'a, Path>> for OsStr
fn eq(&self, other: &Cow<'a, Path>) -> bool
This method tests for self
and other
values to be equal, and is used by ==
. Read more
fn ne(&self, other: &Rhs) -> bool
This method tests for !=
.
impl<'a, 'b> PartialEq<Cow<'a, Path>> for &'b OsStr
fn eq(&self, other: &Cow<'a, Path>) -> bool
This method tests for self
and other
values to be equal, and is used by ==
. Read more
fn ne(&self, other: &Rhs) -> bool
This method tests for !=
.
impl<'a, 'b> PartialEq<Cow<'a, Path>> for OsString
fn eq(&self, other: &Cow<'a, Path>) -> bool
This method tests for self
and other
values to be equal, and is used by ==
. Read more
fn ne(&self, other: &Rhs) -> bool
This method tests for !=
.
impl<'a, 'b> PartialEq<Cow<'a, str>> for &'b str
pub fn eq(&self, other: &Cow<'a, str>) -> bool
This method tests for self
and other
values to be equal, and is used by ==
. Read more
pub fn ne(&self, other: &Cow<'a, str>) -> bool
This method tests for !=
.
impl<'a, 'b> PartialEq<Cow<'a, str>> for str
pub fn eq(&self, other: &Cow<'a, str>) -> bool
This method tests for self
and other
values to be equal, and is used by ==
. Read more
pub fn ne(&self, other: &Cow<'a, str>) -> bool
This method tests for !=
.
impl<'a, 'b> PartialEq<Cow<'a, str>> for String
pub fn eq(&self, other: &Cow<'a, str>) -> bool
This method tests for self
and other
values to be equal, and is used by ==
. Read more
pub fn ne(&self, other: &Cow<'a, str>) -> bool
This method tests for !=
.
pub fn eq(&self, other: &Cow<'b, C>) -> bool
This method tests for self
and other
values to be equal, and is used by ==
. Read more
fn ne(&self, other: &Rhs) -> bool
This method tests for !=
.
impl<'a, 'b> PartialEq<Cow<'b, OsStr>> for &'a Path
fn eq(&self, other: &Cow<'b, OsStr>) -> bool
This method tests for self
and other
values to be equal, and is used by ==
. Read more
fn ne(&self, other: &Rhs) -> bool
This method tests for !=
.
impl<'a, 'b> PartialEq<OsStr> for Cow<'a, OsStr>
fn eq(&self, other: &OsStr) -> bool
This method tests for self
and other
values to be equal, and is used by ==
. Read more
fn ne(&self, other: &Rhs) -> bool
This method tests for !=
.
impl<'a, 'b> PartialEq<OsStr> for Cow<'a, Path>
fn eq(&self, other: &OsStr) -> bool
This method tests for self
and other
values to be equal, and is used by ==
. Read more
fn ne(&self, other: &Rhs) -> bool
This method tests for !=
.
impl<'a, 'b> PartialEq<OsString> for Cow<'a, OsStr>
fn eq(&self, other: &OsString) -> bool
This method tests for self
and other
values to be equal, and is used by ==
. Read more
fn ne(&self, other: &Rhs) -> bool
This method tests for !=
.
impl<'a, 'b> PartialEq<OsString> for Cow<'a, Path>
fn eq(&self, other: &OsString) -> bool
This method tests for self
and other
values to be equal, and is used by ==
. Read more
fn ne(&self, other: &Rhs) -> bool
This method tests for !=
.
impl<'a, 'b> PartialEq<Path> for Cow<'a, Path>
fn eq(&self, other: &Path) -> bool
This method tests for self
and other
values to be equal, and is used by ==
. Read more
fn ne(&self, other: &Rhs) -> bool
This method tests for !=
.
impl<'a, 'b> PartialEq<Path> for Cow<'a, OsStr>
fn eq(&self, other: &Path) -> bool
This method tests for self
and other
values to be equal, and is used by ==
. Read more
fn ne(&self, other: &Rhs) -> bool
This method tests for !=
.
impl<'a, 'b> PartialEq<PathBuf> for Cow<'a, Path>
fn eq(&self, other: &PathBuf) -> bool
This method tests for self
and other
values to be equal, and is used by ==
. Read more
fn ne(&self, other: &Rhs) -> bool
This method tests for !=
.
impl<'a, 'b> PartialEq<PathBuf> for Cow<'a, OsStr>
fn eq(&self, other: &PathBuf) -> bool
This method tests for self
and other
values to be equal, and is used by ==
. Read more
fn ne(&self, other: &Rhs) -> bool
This method tests for !=
.
impl<'a, 'b> PartialEq<String> for Cow<'a, str>
pub fn eq(&self, other: &String) -> bool
This method tests for self
and other
values to be equal, and is used by ==
. Read more
pub fn ne(&self, other: &String) -> bool
This method tests for !=
.
pub fn eq(&self, other: &Vec<U, A>) -> bool
This method tests for self
and other
values to be equal, and is used by ==
. Read more
pub fn ne(&self, other: &Vec<U, A>) -> bool
This method tests for !=
.
impl<'a, 'b> PartialEq<str> for Cow<'a, str>
pub fn eq(&self, other: &str) -> bool
This method tests for self
and other
values to be equal, and is used by ==
. Read more
pub fn ne(&self, other: &str) -> bool
This method tests for !=
.
impl<'a, 'b> PartialOrd<&'a Path> for Cow<'b, OsStr>
fn partial_cmp(&self, other: &&'a Path) -> Option<Ordering>
This method returns an ordering between self
and other
values if one exists. Read more
fn lt(&self, other: &Rhs) -> bool
This method tests less than (for self
and other
) and is used by the <
operator. Read more
fn le(&self, other: &Rhs) -> bool
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
fn gt(&self, other: &Rhs) -> bool
This method tests greater than (for self
and other
) and is used by the >
operator. Read more
fn ge(&self, other: &Rhs) -> bool
This method tests greater than or equal to (for self
and other
) and is used by the >=
operator. Read more
impl<'a, 'b> PartialOrd<&'b OsStr> for Cow<'a, OsStr>
fn partial_cmp(&self, other: &&'b OsStr) -> Option<Ordering>
This method returns an ordering between self
and other
values if one exists. Read more
fn lt(&self, other: &Rhs) -> bool
This method tests less than (for self
and other
) and is used by the <
operator. Read more
fn le(&self, other: &Rhs) -> bool
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
fn gt(&self, other: &Rhs) -> bool
This method tests greater than (for self
and other
) and is used by the >
operator. Read more
fn ge(&self, other: &Rhs) -> bool
This method tests greater than or equal to (for self
and other
) and is used by the >=
operator. Read more
impl<'a, 'b> PartialOrd<&'b OsStr> for Cow<'a, Path>
fn partial_cmp(&self, other: &&'b OsStr) -> Option<Ordering>
This method returns an ordering between self
and other
values if one exists. Read more
fn lt(&self, other: &Rhs) -> bool
This method tests less than (for self
and other
) and is used by the <
operator. Read more
fn le(&self, other: &Rhs) -> bool
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
fn gt(&self, other: &Rhs) -> bool
This method tests greater than (for self
and other
) and is used by the >
operator. Read more
fn ge(&self, other: &Rhs) -> bool
This method tests greater than or equal to (for self
and other
) and is used by the >=
operator. Read more
impl<'a, 'b> PartialOrd<&'b Path> for Cow<'a, Path>
fn partial_cmp(&self, other: &&'b Path) -> Option<Ordering>
This method returns an ordering between self
and other
values if one exists. Read more
fn lt(&self, other: &Rhs) -> bool
This method tests less than (for self
and other
) and is used by the <
operator. Read more
fn le(&self, other: &Rhs) -> bool
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
fn gt(&self, other: &Rhs) -> bool
This method tests greater than (for self
and other
) and is used by the >
operator. Read more
fn ge(&self, other: &Rhs) -> bool
This method tests greater than or equal to (for self
and other
) and is used by the >=
operator. Read more
impl<'a, B> PartialOrd<Cow<'a, B>> for Cow<'a, B> where
B: PartialOrd<B> + ToOwned + ?Sized,
pub fn partial_cmp(&self, other: &Cow<'a, B>) -> Option<Ordering>
This method returns an ordering between self
and other
values if one exists. Read more
fn lt(&self, other: &Rhs) -> bool
This method tests less than (for self
and other
) and is used by the <
operator. Read more
fn le(&self, other: &Rhs) -> bool
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
fn gt(&self, other: &Rhs) -> bool
This method tests greater than (for self
and other
) and is used by the >
operator. Read more
fn ge(&self, other: &Rhs) -> bool
This method tests greater than or equal to (for self
and other
) and is used by the >=
operator. Read more
impl<'a, 'b> PartialOrd<Cow<'a, OsStr>> for OsStr
fn partial_cmp(&self, other: &Cow<'a, OsStr>) -> Option<Ordering>
This method returns an ordering between self
and other
values if one exists. Read more
fn lt(&self, other: &Rhs) -> bool
This method tests less than (for self
and other
) and is used by the <
operator. Read more
fn le(&self, other: &Rhs) -> bool
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
fn gt(&self, other: &Rhs) -> bool
This method tests greater than (for self
and other
) and is used by the >
operator. Read more
fn ge(&self, other: &Rhs) -> bool
This method tests greater than or equal to (for self
and other
) and is used by the >=
operator. Read more
impl<'a, 'b> PartialOrd<Cow<'a, OsStr>> for &'b OsStr
fn partial_cmp(&self, other: &Cow<'a, OsStr>) -> Option<Ordering>
This method returns an ordering between self
and other
values if one exists. Read more
fn lt(&self, other: &Rhs) -> bool
This method tests less than (for self
and other
) and is used by the <
operator. Read more
fn le(&self, other: &Rhs) -> bool
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
fn gt(&self, other: &Rhs) -> bool
This method tests greater than (for self
and other
) and is used by the >
operator. Read more
fn ge(&self, other: &Rhs) -> bool
This method tests greater than or equal to (for self
and other
) and is used by the >=
operator. Read more
impl<'a, 'b> PartialOrd<Cow<'a, OsStr>> for OsString
fn partial_cmp(&self, other: &Cow<'a, OsStr>) -> Option<Ordering>
This method returns an ordering between self
and other
values if one exists. Read more
fn lt(&self, other: &Rhs) -> bool
This method tests less than (for self
and other
) and is used by the <
operator. Read more
fn le(&self, other: &Rhs) -> bool
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
fn gt(&self, other: &Rhs) -> bool
This method tests greater than (for self
and other
) and is used by the >
operator. Read more
fn ge(&self, other: &Rhs) -> bool
This method tests greater than or equal to (for self
and other
) and is used by the >=
operator. Read more
impl<'a, 'b> PartialOrd<Cow<'a, OsStr>> for PathBuf
fn partial_cmp(&self, other: &Cow<'a, OsStr>) -> Option<Ordering>
This method returns an ordering between self
and other
values if one exists. Read more
fn lt(&self, other: &Rhs) -> bool
This method tests less than (for self
and other
) and is used by the <
operator. Read more
fn le(&self, other: &Rhs) -> bool
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
fn gt(&self, other: &Rhs) -> bool
This method tests greater than (for self
and other
) and is used by the >
operator. Read more
fn ge(&self, other: &Rhs) -> bool
This method tests greater than or equal to (for self
and other
) and is used by the >=
operator. Read more
impl<'a, 'b> PartialOrd<Cow<'a, OsStr>> for Path
fn partial_cmp(&self, other: &Cow<'a, OsStr>) -> Option<Ordering>
This method returns an ordering between self
and other
values if one exists. Read more
fn lt(&self, other: &Rhs) -> bool
This method tests less than (for self
and other
) and is used by the <
operator. Read more
fn le(&self, other: &Rhs) -> bool
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
fn gt(&self, other: &Rhs) -> bool
This method tests greater than (for self
and other
) and is used by the >
operator. Read more
fn ge(&self, other: &Rhs) -> bool
This method tests greater than or equal to (for self
and other
) and is used by the >=
operator. Read more
impl<'a, 'b> PartialOrd<Cow<'a, Path>> for Path
fn partial_cmp(&self, other: &Cow<'a, Path>) -> Option<Ordering>
This method returns an ordering between self
and other
values if one exists. Read more
fn lt(&self, other: &Rhs) -> bool
This method tests less than (for self
and other
) and is used by the <
operator. Read more
fn le(&self, other: &Rhs) -> bool
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
fn gt(&self, other: &Rhs) -> bool
This method tests greater than (for self
and other
) and is used by the >
operator. Read more
fn ge(&self, other: &Rhs) -> bool
This method tests greater than or equal to (for self
and other
) and is used by the >=
operator. Read more
impl<'a, 'b> PartialOrd<Cow<'a, Path>> for &'b Path
fn partial_cmp(&self, other: &Cow<'a, Path>) -> Option<Ordering>
This method returns an ordering between self
and other
values if one exists. Read more
fn lt(&self, other: &Rhs) -> bool
This method tests less than (for self
and other
) and is used by the <
operator. Read more
fn le(&self, other: &Rhs) -> bool
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
fn gt(&self, other: &Rhs) -> bool
This method tests greater than (for self
and other
) and is used by the >
operator. Read more
fn ge(&self, other: &Rhs) -> bool
This method tests greater than or equal to (for self
and other
) and is used by the >=
operator. Read more
impl<'a, 'b> PartialOrd<Cow<'a, Path>> for PathBuf
fn partial_cmp(&self, other: &Cow<'a, Path>) -> Option<Ordering>
This method returns an ordering between self
and other
values if one exists. Read more
fn lt(&self, other: &Rhs) -> bool
This method tests less than (for self
and other
) and is used by the <
operator. Read more
fn le(&self, other: &Rhs) -> bool
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
fn gt(&self, other: &Rhs) -> bool
This method tests greater than (for self
and other
) and is used by the >
operator. Read more
fn ge(&self, other: &Rhs) -> bool
This method tests greater than or equal to (for self
and other
) and is used by the >=
operator. Read more
impl<'a, 'b> PartialOrd<Cow<'a, Path>> for OsStr
fn partial_cmp(&self, other: &Cow<'a, Path>) -> Option<Ordering>
This method returns an ordering between self
and other
values if one exists. Read more
fn lt(&self, other: &Rhs) -> bool
This method tests less than (for self
and other
) and is used by the <
operator. Read more
fn le(&self, other: &Rhs) -> bool
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
fn gt(&self, other: &Rhs) -> bool
This method tests greater than (for self
and other
) and is used by the >
operator. Read more
fn ge(&self, other: &Rhs) -> bool
This method tests greater than or equal to (for self
and other
) and is used by the >=
operator. Read more
impl<'a, 'b> PartialOrd<Cow<'a, Path>> for &'b OsStr
fn partial_cmp(&self, other: &Cow<'a, Path>) -> Option<Ordering>
This method returns an ordering between self
and other
values if one exists. Read more
fn lt(&self, other: &Rhs) -> bool
This method tests less than (for self
and other
) and is used by the <
operator. Read more
fn le(&self, other: &Rhs) -> bool
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
fn gt(&self, other: &Rhs) -> bool
This method tests greater than (for self
and other
) and is used by the >
operator. Read more
fn ge(&self, other: &Rhs) -> bool
This method tests greater than or equal to (for self
and other
) and is used by the >=
operator. Read more
impl<'a, 'b> PartialOrd<Cow<'a, Path>> for OsString
fn partial_cmp(&self, other: &Cow<'a, Path>) -> Option<Ordering>
This method returns an ordering between self
and other
values if one exists. Read more
fn lt(&self, other: &Rhs) -> bool
This method tests less than (for self
and other
) and is used by the <
operator. Read more
fn le(&self, other: &Rhs) -> bool
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
fn gt(&self, other: &Rhs) -> bool
This method tests greater than (for self
and other
) and is used by the >
operator. Read more
fn ge(&self, other: &Rhs) -> bool
This method tests greater than or equal to (for self
and other
) and is used by the >=
operator. Read more
impl<'a, 'b> PartialOrd<Cow<'b, OsStr>> for &'a Path
fn partial_cmp(&self, other: &Cow<'b, OsStr>) -> Option<Ordering>
This method returns an ordering between self
and other
values if one exists. Read more
fn lt(&self, other: &Rhs) -> bool
This method tests less than (for self
and other
) and is used by the <
operator. Read more
fn le(&self, other: &Rhs) -> bool
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
fn gt(&self, other: &Rhs) -> bool
This method tests greater than (for self
and other
) and is used by the >
operator. Read more
fn ge(&self, other: &Rhs) -> bool
This method tests greater than or equal to (for self
and other
) and is used by the >=
operator. Read more
impl<'a, 'b> PartialOrd<OsStr> for Cow<'a, OsStr>
fn partial_cmp(&self, other: &OsStr) -> Option<Ordering>
This method returns an ordering between self
and other
values if one exists. Read more
fn lt(&self, other: &Rhs) -> bool
This method tests less than (for self
and other
) and is used by the <
operator. Read more
fn le(&self, other: &Rhs) -> bool
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
fn gt(&self, other: &Rhs) -> bool
This method tests greater than (for self
and other
) and is used by the >
operator. Read more
fn ge(&self, other: &Rhs) -> bool
This method tests greater than or equal to (for self
and other
) and is used by the >=
operator. Read more
impl<'a, 'b> PartialOrd<OsStr> for Cow<'a, Path>
fn partial_cmp(&self, other: &OsStr) -> Option<Ordering>
This method returns an ordering between self
and other
values if one exists. Read more
fn lt(&self, other: &Rhs) -> bool
This method tests less than (for self
and other
) and is used by the <
operator. Read more
fn le(&self, other: &Rhs) -> bool
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
fn gt(&self, other: &Rhs) -> bool
This method tests greater than (for self
and other
) and is used by the >
operator. Read more
fn ge(&self, other: &Rhs) -> bool
This method tests greater than or equal to (for self
and other
) and is used by the >=
operator. Read more
impl<'a, 'b> PartialOrd<OsString> for Cow<'a, OsStr>
fn partial_cmp(&self, other: &OsString) -> Option<Ordering>
This method returns an ordering between self
and other
values if one exists. Read more
fn lt(&self, other: &Rhs) -> bool
This method tests less than (for self
and other
) and is used by the <
operator. Read more
fn le(&self, other: &Rhs) -> bool
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
fn gt(&self, other: &Rhs) -> bool
This method tests greater than (for self
and other
) and is used by the >
operator. Read more
fn ge(&self, other: &Rhs) -> bool
This method tests greater than or equal to (for self
and other
) and is used by the >=
operator. Read more
impl<'a, 'b> PartialOrd<OsString> for Cow<'a, Path>
fn partial_cmp(&self, other: &OsString) -> Option<Ordering>
This method returns an ordering between self
and other
values if one exists. Read more
fn lt(&self, other: &Rhs) -> bool
This method tests less than (for self
and other
) and is used by the <
operator. Read more
fn le(&self, other: &Rhs) -> bool
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
fn gt(&self, other: &Rhs) -> bool
This method tests greater than (for self
and other
) and is used by the >
operator. Read more
fn ge(&self, other: &Rhs) -> bool
This method tests greater than or equal to (for self
and other
) and is used by the >=
operator. Read more
impl<'a, 'b> PartialOrd<Path> for Cow<'a, Path>
fn partial_cmp(&self, other: &Path) -> Option<Ordering>
This method returns an ordering between self
and other
values if one exists. Read more
fn lt(&self, other: &Rhs) -> bool
This method tests less than (for self
and other
) and is used by the <
operator. Read more
fn le(&self, other: &Rhs) -> bool
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
fn gt(&self, other: &Rhs) -> bool
This method tests greater than (for self
and other
) and is used by the >
operator. Read more
fn ge(&self, other: &Rhs) -> bool
This method tests greater than or equal to (for self
and other
) and is used by the >=
operator. Read more
impl<'a, 'b> PartialOrd<Path> for Cow<'a, OsStr>
fn partial_cmp(&self, other: &Path) -> Option<Ordering>
This method returns an ordering between self
and other
values if one exists. Read more
fn lt(&self, other: &Rhs) -> bool
This method tests less than (for self
and other
) and is used by the <
operator. Read more
fn le(&self, other: &Rhs) -> bool
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
fn gt(&self, other: &Rhs) -> bool
This method tests greater than (for self
and other
) and is used by the >
operator. Read more
fn ge(&self, other: &Rhs) -> bool
This method tests greater than or equal to (for self
and other
) and is used by the >=
operator. Read more
impl<'a, 'b> PartialOrd<PathBuf> for Cow<'a, Path>
fn partial_cmp(&self, other: &PathBuf) -> Option<Ordering>
This method returns an ordering between self
and other
values if one exists. Read more
fn lt(&self, other: &Rhs) -> bool
This method tests less than (for self
and other
) and is used by the <
operator. Read more
fn le(&self, other: &Rhs) -> bool
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
fn gt(&self, other: &Rhs) -> bool
This method tests greater than (for self
and other
) and is used by the >
operator. Read more
fn ge(&self, other: &Rhs) -> bool
This method tests greater than or equal to (for self
and other
) and is used by the >=
operator. Read more
impl<'a, 'b> PartialOrd<PathBuf> for Cow<'a, OsStr>
fn partial_cmp(&self, other: &PathBuf) -> Option<Ordering>
This method returns an ordering between self
and other
values if one exists. Read more
fn lt(&self, other: &Rhs) -> bool
This method tests less than (for self
and other
) and is used by the <
operator. Read more
fn le(&self, other: &Rhs) -> bool
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
fn gt(&self, other: &Rhs) -> bool
This method tests greater than (for self
and other
) and is used by the >
operator. Read more
fn ge(&self, other: &Rhs) -> bool
This method tests greater than or equal to (for self
and other
) and is used by the >=
operator. Read more
impl<'_> ToString for Cow<'_, str>
Auto Trait Implementations
impl<'a, B: ?Sized> RefUnwindSafe for Cow<'a, B> where
B: RefUnwindSafe,
<B as ToOwned>::Owned: RefUnwindSafe,
impl<'a, B: ?Sized> UnwindSafe for Cow<'a, B> where
B: RefUnwindSafe,
<B as ToOwned>::Owned: UnwindSafe,
Blanket Implementations
impl<T> From<T> for T
pub fn from(t: T) -> T
Performs the conversion.
pub fn into(self) -> U
Performs the conversion.
type Owned = T
The resulting type after obtaining ownership.
pub fn to_owned(&self) -> T
Creates owned data from borrowed data, usually by cloning. Read more
pub fn clone_into(&self, target: &mut T)
toowned_clone_into
#41263)recently added
Uses borrowed data to replace owned data, usually by cloning. Read more
type Error = Infallible
The type returned in the event of a conversion error.
pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
Performs the conversion.
type Error = <U as TryFrom<T>>::Error
The type returned in the event of a conversion error.
pub fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>
Performs the conversion.
© 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/enum.Cow.html