On this page
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> 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's 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.
Owned(<B as ToOwned>::Owned)
Owned data.
Implementations
impl<B> Cow<'_, B>
where
B: ToOwned + ?Sized,
pub fn is_borrowed(&self) -> bool
cow_is_borrowed
#65143)
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
cow_is_borrowed
#65143)
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
returns a clone of the borrowed data:
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
returns the owned data. The data is moved out of the Cow
without being cloned.
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>
+
operator.
fn add(self, rhs: &'a str) -> <Cow<'a, str> as Add<&'a str>>::Output
+
operation. Read more
impl<'a> Add for Cow<'a, str>
type Output = Cow<'a, str>
+
operator.
fn add(self, rhs: Cow<'a, str>) -> <Cow<'a, str> as Add>::Output
+
operation. Read more
impl<'a> AddAssign<&'a str> for Cow<'a, str>
impl<'a> AddAssign for Cow<'a, str>
impl AsRef<Path> for Cow<'_, OsStr>
fn as_ref(&self) -> &Path
impl<T> AsRef<T> for Cow<'_, T>
where
T: ToOwned + ?Sized,
fn as_ref(&self) -> &T
impl<'a, B> Borrow<B> for Cow<'a, B>
where
B: ToOwned + ?Sized,
impl<B> Clone for Cow<'_, B>
where
B: ToOwned + ?Sized,
fn clone(&self) -> Cow<'_, B>
fn clone_from(&mut self, source: &Cow<'_, B>)
source
. Read more
impl<B> Debug for Cow<'_, B>
where
B: Debug + ToOwned + ?Sized,
<B as ToOwned>::Owned: Debug,
fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>
impl<B> Default for Cow<'_, B>
where
B: ToOwned + ?Sized,
<B as ToOwned>::Owned: Default,
fn default() -> Cow<'_, B>
Creates an owned Cow<’a, B> with the default value for the contained owned value.
impl<B> Deref for Cow<'_, B>
where
B: ToOwned + ?Sized,
<B as ToOwned>::Owned: Borrow<B>,
type Target = B
fn deref(&self) -> &B
impl<B> Display for Cow<'_, B>
where
B: Display + ToOwned + ?Sized,
<B as ToOwned>::Owned: Display,
fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>
impl<'a> Extend<Cow<'a, OsStr>> for OsString
fn extend<T: IntoIterator<Item = Cow<'a, OsStr>>>(&mut self, iter: T)
fn extend_one(&mut self, item: A)
extend_one
#72631)
fn extend_reserve(&mut self, additional: usize)
extend_one
#72631)
impl<'a> Extend<Cow<'a, str>> for String
fn extend<I>(&mut self, iter: I)
where
I: IntoIterator<Item = Cow<'a, str>>,
fn extend_one(&mut self, s: Cow<'a, str>)
extend_one
#72631)
fn extend_reserve(&mut self, additional: usize)
extend_one
#72631)
impl<'a, T> From<&'a [T]> for Cow<'a, [T]>
where
T: Clone,
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>
impl<'a> From<&'a CString> for Cow<'a, CStr>
fn from(s: &'a CString) -> Cow<'a, CStr>
impl<'a> From<&'a OsStr> for Cow<'a, OsStr>
fn from(s: &'a OsStr) -> Cow<'a, OsStr>
Converts the string reference into a Cow::Borrowed
.
impl<'a> From<&'a OsString> for Cow<'a, OsStr>
fn from(s: &'a OsString) -> Cow<'a, OsStr>
Converts the string reference into a Cow::Borrowed
.
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>
fn from(s: &'a String) -> Cow<'a, str>
impl<'a, T> From<&'a Vec<T>> for Cow<'a, [T]>
where
T: Clone,
fn from(v: &'a Vec<T>) -> Cow<'a, [T]>
impl<'a> From<&'a str> for Cow<'a, str>
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>
impl<T> From<Cow<'_, [T]>> for Box<[T]>
where
T: Clone,
fn from(cow: Cow<'_, [T]>) -> Box<[T]>
Converts a Cow<'_, [T]>
into a Box<[T]>
When cow
is the Cow::Borrowed
variant, this conversion allocates on the heap and copies the underlying slice. Otherwise, it will try to reuse the owned Vec
’s allocation.
impl From<Cow<'_, CStr>> for Box<CStr>
fn from(cow: Cow<'_, CStr>) -> Box<CStr>
Converts a Cow<'a, CStr>
into a Box<CStr>
, by copying the contents if they are borrowed.
impl From<Cow<'_, OsStr>> for Box<OsStr>
fn from(cow: Cow<'_, OsStr>) -> Box<OsStr>
impl From<Cow<'_, Path>> for Box<Path>
fn from(cow: Cow<'_, Path>) -> Box<Path>
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>
fn from(cow: Cow<'_, str>) -> Box<str>
Converts a Cow<'_, str>
into a Box<str>
When cow
is the Cow::Borrowed
variant, this conversion allocates on the heap and copies the underlying str
. Otherwise, it will try to reuse the owned String
’s allocation.
Examples
use std::borrow::Cow;
let unboxed = Cow::Borrowed("hello");
let boxed: Box<str> = Box::from(unboxed);
println!("{boxed}");
let unboxed = Cow::Owned("hello".to_string());
let boxed: Box<str> = Box::from(unboxed);
println!("{boxed}");
impl<'a, T> From<Cow<'a, [T]>> for Vec<T>
where
[T]: ToOwned<Owned = Vec<T>>,
fn from(s: Cow<'a, [T]>) -> Vec<T>
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));
impl<'a, B> From<Cow<'a, B>> for Arc<B>
where
B: ToOwned + ?Sized,
Arc<B>: From<&'a B> + From<<B as ToOwned>::Owned>,
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[..]);
impl<'a, B> From<Cow<'a, B>> for Rc<B>
where
B: ToOwned + ?Sized,
Rc<B>: From<&'a B> + From<<B as ToOwned>::Owned>,
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>) -> CString
Converts a Cow<'a, CStr>
into a CString
, by copying the contents if they are borrowed.
impl<'a> From<Cow<'a, OsStr>> for OsString
fn from(s: Cow<'a, OsStr>) -> Self
Converts a Cow<'a, OsStr>
into an OsString
, by copying the contents if they are borrowed.
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 Box<dyn Error>
fn from(err: Cow<'a, str>) -> Box<dyn Error>
impl<'a> From<Cow<'a, str>> for String
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, 'b> From<Cow<'b, str>> for Box<dyn Error + Send + Sync + 'a>
fn from(err: Cow<'b, str>) -> Box<dyn Error + Send + Sync + 'a>
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>
Moves the string into a Cow::Owned
.
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>
fn from(s: String) -> Cow<'a, str>
impl<'a, T> From<Vec<T>> for Cow<'a, [T]>
where
T: Clone,
fn from(v: Vec<T>) -> Cow<'a, [T]>
impl<'a, 'b> FromIterator<&'b str> for Cow<'a, str>
fn from_iter<I>(it: I) -> Cow<'a, str>
where
I: IntoIterator<Item = &'b str>,
impl<'a> FromIterator<Cow<'a, OsStr>> for OsString
fn from_iter<I: IntoIterator<Item = Cow<'a, OsStr>>>(iter: I) -> Self
impl<'a> FromIterator<Cow<'a, str>> for String
fn from_iter<I>(iter: I) -> String
where
I: IntoIterator<Item = Cow<'a, str>>,
impl<'a> FromIterator<String> for Cow<'a, str>
fn from_iter<I>(it: I) -> Cow<'a, str>
where
I: IntoIterator<Item = String>,
impl<'a, T> FromIterator<T> for Cow<'a, [T]>
where
T: Clone,
fn from_iter<I>(it: I) -> Cow<'a, [T]>
where
I: IntoIterator<Item = T>,
impl<'a> FromIterator<char> for Cow<'a, str>
fn from_iter<I>(it: I) -> Cow<'a, str>
where
I: IntoIterator<Item = char>,
impl<B> Hash for Cow<'_, B>
where
B: Hash + ToOwned + ?Sized,
fn hash<H>(&self, state: &mut H)
where
H: Hasher,
fn hash_slice<H>(data: &[Self], state: &mut H)
where
H: Hasher,
Self: Sized,
impl<B> Ord for Cow<'_, B>
where
B: Ord + ToOwned + ?Sized,
fn cmp(&self, other: &Cow<'_, B>) -> Ordering
fn max(self, other: Self) -> Self
where
Self: Sized,
fn min(self, other: Self) -> Self
where
Self: Sized,
fn clamp(self, min: Self, max: Self) -> Self
where
Self: Sized + PartialOrd,
impl<T, U> PartialEq<&[U]> for Cow<'_, [T]>
where
T: PartialEq<U> + Clone,
fn eq(&self, other: &&[U]) -> bool
self
and other
values to be equal, and is used by ==
.
fn ne(&self, other: &&[U]) -> bool
!=
. The default implementation is almost always sufficient, and should not be overridden without very good reason.
impl<'a, 'b> PartialEq<&'b OsStr> for Cow<'a, OsStr>
fn eq(&self, other: &&'b OsStr) -> bool
self
and other
values to be equal, and is used by ==
.
fn ne(&self, other: &Rhs) -> bool
!=
. The default implementation is almost always sufficient, and should not be overridden without very good reason.
impl<'a, 'b> PartialEq<&'b OsStr> for Cow<'a, Path>
fn eq(&self, other: &&'b OsStr) -> bool
self
and other
values to be equal, and is used by ==
.
fn ne(&self, other: &Rhs) -> bool
!=
. The default implementation is almost always sufficient, and should not be overridden without very good reason.
impl<'a, 'b> PartialEq<&'b Path> for Cow<'a, Path>
fn eq(&self, other: &&'b Path) -> bool
self
and other
values to be equal, and is used by ==
.
fn ne(&self, other: &Rhs) -> bool
!=
. The default implementation is almost always sufficient, and should not be overridden without very good reason.
impl<'a, 'b> PartialEq<&'a Path> for Cow<'b, OsStr>
fn eq(&self, other: &&'a Path) -> bool
self
and other
values to be equal, and is used by ==
.
fn ne(&self, other: &Rhs) -> bool
!=
. The default implementation is almost always sufficient, and should not be overridden without very good reason.
impl<T, U> PartialEq<&mut [U]> for Cow<'_, [T]>
where
T: PartialEq<U> + Clone,
fn eq(&self, other: &&mut [U]) -> bool
self
and other
values to be equal, and is used by ==
.
fn ne(&self, other: &&mut [U]) -> bool
!=
. The default implementation is almost always sufficient, and should not be overridden without very good reason.
impl<'a, 'b> PartialEq<&'b str> for Cow<'a, str>
fn eq(&self, other: &&'b str) -> bool
self
and other
values to be equal, and is used by ==
.
fn ne(&self, other: &&'b str) -> bool
!=
. The default implementation is almost always sufficient, and should not be overridden without very good reason.
impl<'a, 'b> PartialEq<Cow<'a, OsStr>> for &'b OsStr
fn eq(&self, other: &Cow<'a, OsStr>) -> bool
self
and other
values to be equal, and is used by ==
.
fn ne(&self, other: &Rhs) -> bool
!=
. The default implementation is almost always sufficient, and should not be overridden without very good reason.
impl<'a, 'b> PartialEq<Cow<'a, OsStr>> for OsStr
fn eq(&self, other: &Cow<'a, OsStr>) -> bool
self
and other
values to be equal, and is used by ==
.
fn ne(&self, other: &Rhs) -> bool
!=
. The default implementation is almost always sufficient, and should not be overridden without very good reason.
impl<'a, 'b> PartialEq<Cow<'a, OsStr>> for OsString
fn eq(&self, other: &Cow<'a, OsStr>) -> bool
self
and other
values to be equal, and is used by ==
.
fn ne(&self, other: &Rhs) -> bool
!=
. The default implementation is almost always sufficient, and should not be overridden without very good reason.
impl<'a> PartialEq<Cow<'a, OsStr>> for Path
fn eq(&self, other: &Cow<'a, OsStr>) -> bool
self
and other
values to be equal, and is used by ==
.
fn ne(&self, other: &Rhs) -> bool
!=
. The default implementation is almost always sufficient, and should not be overridden without very good reason.
impl<'a> PartialEq<Cow<'a, OsStr>> for PathBuf
fn eq(&self, other: &Cow<'a, OsStr>) -> bool
self
and other
values to be equal, and is used by ==
.
fn ne(&self, other: &Rhs) -> bool
!=
. The default implementation is almost always sufficient, and should not be overridden without very good reason.
impl<'a, 'b> PartialEq<Cow<'a, Path>> for &'b OsStr
fn eq(&self, other: &Cow<'a, Path>) -> bool
self
and other
values to be equal, and is used by ==
.
fn ne(&self, other: &Rhs) -> bool
!=
. The default implementation is almost always sufficient, and should not be overridden without very good reason.
impl<'a, 'b> PartialEq<Cow<'a, Path>> for &'b Path
fn eq(&self, other: &Cow<'a, Path>) -> bool
self
and other
values to be equal, and is used by ==
.
fn ne(&self, other: &Rhs) -> bool
!=
. The default implementation is almost always sufficient, and should not be overridden without very good reason.
impl<'a> PartialEq<Cow<'a, Path>> for OsStr
fn eq(&self, other: &Cow<'a, Path>) -> bool
self
and other
values to be equal, and is used by ==
.
fn ne(&self, other: &Rhs) -> bool
!=
. The default implementation is almost always sufficient, and should not be overridden without very good reason.
impl<'a> PartialEq<Cow<'a, Path>> for OsString
fn eq(&self, other: &Cow<'a, Path>) -> bool
self
and other
values to be equal, and is used by ==
.
fn ne(&self, other: &Rhs) -> bool
!=
. The default implementation is almost always sufficient, and should not be overridden without very good reason.
impl<'a> PartialEq<Cow<'a, Path>> for Path
fn eq(&self, other: &Cow<'a, Path>) -> bool
self
and other
values to be equal, and is used by ==
.
fn ne(&self, other: &Rhs) -> bool
!=
. The default implementation is almost always sufficient, and should not be overridden without very good reason.
impl<'a> PartialEq<Cow<'a, Path>> for PathBuf
fn eq(&self, other: &Cow<'a, Path>) -> bool
self
and other
values to be equal, and is used by ==
.
fn ne(&self, other: &Rhs) -> bool
!=
. The default implementation is almost always sufficient, and should not be overridden without very good reason.
impl<'a, 'b> PartialEq<Cow<'a, str>> for &'b str
fn eq(&self, other: &Cow<'a, str>) -> bool
self
and other
values to be equal, and is used by ==
.
fn ne(&self, other: &Cow<'a, str>) -> bool
!=
. The default implementation is almost always sufficient, and should not be overridden without very good reason.
impl<'a, 'b> PartialEq<Cow<'a, str>> for String
fn eq(&self, other: &Cow<'a, str>) -> bool
self
and other
values to be equal, and is used by ==
.
fn ne(&self, other: &Cow<'a, str>) -> bool
!=
. The default implementation is almost always sufficient, and should not be overridden without very good reason.
impl<'a, 'b> PartialEq<Cow<'a, str>> for str
fn eq(&self, other: &Cow<'a, str>) -> bool
self
and other
values to be equal, and is used by ==
.
fn ne(&self, other: &Cow<'a, str>) -> bool
!=
. The default implementation is almost always sufficient, and should not be overridden without very good reason.
impl<'a, 'b, B, C> PartialEq<Cow<'b, C>> for Cow<'a, B>
where
B: PartialEq<C> + ToOwned + ?Sized,
C: ToOwned + ?Sized,
fn eq(&self, other: &Cow<'b, C>) -> bool
self
and other
values to be equal, and is used by ==
.
fn ne(&self, other: &Rhs) -> bool
!=
. The default implementation is almost always sufficient, and should not be overridden without very good reason.
impl<'a, 'b> PartialEq<Cow<'b, OsStr>> for &'a Path
fn eq(&self, other: &Cow<'b, OsStr>) -> bool
self
and other
values to be equal, and is used by ==
.
fn ne(&self, other: &Rhs) -> bool
!=
. The default implementation is almost always sufficient, and should not be overridden without very good reason.
impl<'a, 'b> PartialEq<OsStr> for Cow<'a, OsStr>
fn eq(&self, other: &OsStr) -> bool
self
and other
values to be equal, and is used by ==
.
fn ne(&self, other: &Rhs) -> bool
!=
. The default implementation is almost always sufficient, and should not be overridden without very good reason.
impl<'a> PartialEq<OsStr> for Cow<'a, Path>
fn eq(&self, other: &OsStr) -> bool
self
and other
values to be equal, and is used by ==
.
fn ne(&self, other: &Rhs) -> bool
!=
. The default implementation is almost always sufficient, and should not be overridden without very good reason.
impl<'a, 'b> PartialEq<OsString> for Cow<'a, OsStr>
fn eq(&self, other: &OsString) -> bool
self
and other
values to be equal, and is used by ==
.
fn ne(&self, other: &Rhs) -> bool
!=
. The default implementation is almost always sufficient, and should not be overridden without very good reason.
impl<'a> PartialEq<OsString> for Cow<'a, Path>
fn eq(&self, other: &OsString) -> bool
self
and other
values to be equal, and is used by ==
.
fn ne(&self, other: &Rhs) -> bool
!=
. The default implementation is almost always sufficient, and should not be overridden without very good reason.
impl<'a> PartialEq<Path> for Cow<'a, OsStr>
fn eq(&self, other: &Path) -> bool
self
and other
values to be equal, and is used by ==
.
fn ne(&self, other: &Rhs) -> bool
!=
. The default implementation is almost always sufficient, and should not be overridden without very good reason.
impl<'a> PartialEq<Path> for Cow<'a, Path>
fn eq(&self, other: &Path) -> bool
self
and other
values to be equal, and is used by ==
.
fn ne(&self, other: &Rhs) -> bool
!=
. The default implementation is almost always sufficient, and should not be overridden without very good reason.
impl<'a> PartialEq<PathBuf> for Cow<'a, OsStr>
fn eq(&self, other: &PathBuf) -> bool
self
and other
values to be equal, and is used by ==
.
fn ne(&self, other: &Rhs) -> bool
!=
. The default implementation is almost always sufficient, and should not be overridden without very good reason.
impl<'a> PartialEq<PathBuf> for Cow<'a, Path>
fn eq(&self, other: &PathBuf) -> bool
self
and other
values to be equal, and is used by ==
.
fn ne(&self, other: &Rhs) -> bool
!=
. The default implementation is almost always sufficient, and should not be overridden without very good reason.
impl<'a, 'b> PartialEq<String> for Cow<'a, str>
fn eq(&self, other: &String) -> bool
self
and other
values to be equal, and is used by ==
.
fn ne(&self, other: &String) -> bool
!=
. The default implementation is almost always sufficient, and should not be overridden without very good reason.
impl<T, U, A> PartialEq<Vec<U, A>> for Cow<'_, [T]>
where
A: Allocator,
T: PartialEq<U> + Clone,
fn eq(&self, other: &Vec<U, A>) -> bool
self
and other
values to be equal, and is used by ==
.
fn ne(&self, other: &Vec<U, A>) -> bool
!=
. The default implementation is almost always sufficient, and should not be overridden without very good reason.
impl<'a, 'b> PartialEq<str> for Cow<'a, str>
fn eq(&self, other: &str) -> bool
self
and other
values to be equal, and is used by ==
.
fn ne(&self, other: &str) -> bool
!=
. The default implementation is almost always sufficient, and should not be overridden without very good reason.
impl<'a, 'b> PartialOrd<&'b OsStr> for Cow<'a, OsStr>
fn partial_cmp(&self, other: &&'b OsStr) -> Option<Ordering>
fn lt(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
self
and other
) and is used by the <=
operator. Read more
fn gt(&self, other: &Rhs) -> bool
fn ge(&self, other: &Rhs) -> bool
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>
fn lt(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
self
and other
) and is used by the <=
operator. Read more
fn gt(&self, other: &Rhs) -> bool
fn ge(&self, other: &Rhs) -> bool
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>
fn lt(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
self
and other
) and is used by the <=
operator. Read more
fn gt(&self, other: &Rhs) -> bool
fn ge(&self, other: &Rhs) -> bool
self
and other
) and is used by the >=
operator. Read more
impl<'a, 'b> PartialOrd<&'a Path> for Cow<'b, OsStr>
fn partial_cmp(&self, other: &&'a Path) -> Option<Ordering>
fn lt(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
self
and other
) and is used by the <=
operator. Read more
fn gt(&self, other: &Rhs) -> bool
fn ge(&self, other: &Rhs) -> bool
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>
fn lt(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
self
and other
) and is used by the <=
operator. Read more
fn gt(&self, other: &Rhs) -> bool
fn ge(&self, other: &Rhs) -> bool
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>
fn lt(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
self
and other
) and is used by the <=
operator. Read more
fn gt(&self, other: &Rhs) -> bool
fn ge(&self, other: &Rhs) -> bool
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>
fn lt(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
self
and other
) and is used by the <=
operator. Read more
fn gt(&self, other: &Rhs) -> bool
fn ge(&self, other: &Rhs) -> bool
self
and other
) and is used by the >=
operator. Read more
impl<'a> PartialOrd<Cow<'a, OsStr>> for Path
fn partial_cmp(&self, other: &Cow<'a, OsStr>) -> Option<Ordering>
fn lt(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
self
and other
) and is used by the <=
operator. Read more
fn gt(&self, other: &Rhs) -> bool
fn ge(&self, other: &Rhs) -> bool
self
and other
) and is used by the >=
operator. Read more
impl<'a> PartialOrd<Cow<'a, OsStr>> for PathBuf
fn partial_cmp(&self, other: &Cow<'a, OsStr>) -> Option<Ordering>
fn lt(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
self
and other
) and is used by the <=
operator. Read more
fn gt(&self, other: &Rhs) -> bool
fn ge(&self, other: &Rhs) -> bool
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>
fn lt(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
self
and other
) and is used by the <=
operator. Read more
fn gt(&self, other: &Rhs) -> bool
fn ge(&self, other: &Rhs) -> bool
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>
fn lt(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
self
and other
) and is used by the <=
operator. Read more
fn gt(&self, other: &Rhs) -> bool
fn ge(&self, other: &Rhs) -> bool
self
and other
) and is used by the >=
operator. Read more
impl<'a> PartialOrd<Cow<'a, Path>> for OsStr
fn partial_cmp(&self, other: &Cow<'a, Path>) -> Option<Ordering>
fn lt(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
self
and other
) and is used by the <=
operator. Read more
fn gt(&self, other: &Rhs) -> bool
fn ge(&self, other: &Rhs) -> bool
self
and other
) and is used by the >=
operator. Read more
impl<'a> PartialOrd<Cow<'a, Path>> for OsString
fn partial_cmp(&self, other: &Cow<'a, Path>) -> Option<Ordering>
fn lt(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
self
and other
) and is used by the <=
operator. Read more
fn gt(&self, other: &Rhs) -> bool
fn ge(&self, other: &Rhs) -> bool
self
and other
) and is used by the >=
operator. Read more
impl<'a> PartialOrd<Cow<'a, Path>> for Path
fn partial_cmp(&self, other: &Cow<'a, Path>) -> Option<Ordering>
fn lt(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
self
and other
) and is used by the <=
operator. Read more
fn gt(&self, other: &Rhs) -> bool
fn ge(&self, other: &Rhs) -> bool
self
and other
) and is used by the >=
operator. Read more
impl<'a> PartialOrd<Cow<'a, Path>> for PathBuf
fn partial_cmp(&self, other: &Cow<'a, Path>) -> Option<Ordering>
fn lt(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
self
and other
) and is used by the <=
operator. Read more
fn gt(&self, other: &Rhs) -> bool
fn ge(&self, other: &Rhs) -> bool
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>
fn lt(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
self
and other
) and is used by the <=
operator. Read more
fn gt(&self, other: &Rhs) -> bool
fn ge(&self, other: &Rhs) -> bool
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>
fn lt(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
self
and other
) and is used by the <=
operator. Read more
fn gt(&self, other: &Rhs) -> bool
fn ge(&self, other: &Rhs) -> bool
self
and other
) and is used by the >=
operator. Read more
impl<'a> PartialOrd<OsStr> for Cow<'a, Path>
fn partial_cmp(&self, other: &OsStr) -> Option<Ordering>
fn lt(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
self
and other
) and is used by the <=
operator. Read more
fn gt(&self, other: &Rhs) -> bool
fn ge(&self, other: &Rhs) -> bool
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>
fn lt(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
self
and other
) and is used by the <=
operator. Read more
fn gt(&self, other: &Rhs) -> bool
fn ge(&self, other: &Rhs) -> bool
self
and other
) and is used by the >=
operator. Read more
impl<'a> PartialOrd<OsString> for Cow<'a, Path>
fn partial_cmp(&self, other: &OsString) -> Option<Ordering>
fn lt(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
self
and other
) and is used by the <=
operator. Read more
fn gt(&self, other: &Rhs) -> bool
fn ge(&self, other: &Rhs) -> bool
self
and other
) and is used by the >=
operator. Read more
impl<'a> PartialOrd<Path> for Cow<'a, OsStr>
fn partial_cmp(&self, other: &Path) -> Option<Ordering>
fn lt(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
self
and other
) and is used by the <=
operator. Read more
fn gt(&self, other: &Rhs) -> bool
fn ge(&self, other: &Rhs) -> bool
self
and other
) and is used by the >=
operator. Read more
impl<'a> PartialOrd<Path> for Cow<'a, Path>
fn partial_cmp(&self, other: &Path) -> Option<Ordering>
fn lt(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
self
and other
) and is used by the <=
operator. Read more
fn gt(&self, other: &Rhs) -> bool
fn ge(&self, other: &Rhs) -> bool
self
and other
) and is used by the >=
operator. Read more
impl<'a> PartialOrd<PathBuf> for Cow<'a, OsStr>
fn partial_cmp(&self, other: &PathBuf) -> Option<Ordering>
fn lt(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
self
and other
) and is used by the <=
operator. Read more
fn gt(&self, other: &Rhs) -> bool
fn ge(&self, other: &Rhs) -> bool
self
and other
) and is used by the >=
operator. Read more
impl<'a> PartialOrd<PathBuf> for Cow<'a, Path>
fn partial_cmp(&self, other: &PathBuf) -> Option<Ordering>
fn lt(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
self
and other
) and is used by the <=
operator. Read more
fn gt(&self, other: &Rhs) -> bool
fn ge(&self, other: &Rhs) -> bool
self
and other
) and is used by the >=
operator. Read more
impl<'a, B> PartialOrd for Cow<'a, B>
where
B: PartialOrd + ToOwned + ?Sized,
fn partial_cmp(&self, other: &Cow<'a, B>) -> Option<Ordering>
fn lt(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
self
and other
) and is used by the <=
operator. Read more
fn gt(&self, other: &Rhs) -> bool
fn ge(&self, other: &Rhs) -> bool
self
and other
) and is used by the >=
operator. Read more
impl<B> Eq for Cow<'_, B>
where
B: Eq + ToOwned + ?Sized,
Auto Trait Implementations
impl<'a, B: ?Sized> RefUnwindSafe for Cow<'a, B>
where
B: RefUnwindSafe,
<B as ToOwned>::Owned: RefUnwindSafe,
impl<'a, B: ?Sized> Send for Cow<'a, B>
where
B: Sync,
<B as ToOwned>::Owned: Send,
impl<'a, B: ?Sized> Sync for Cow<'a, B>
where
B: Sync,
<B as ToOwned>::Owned: Sync,
impl<'a, B: ?Sized> Unpin for Cow<'a, B>
where
<B as ToOwned>::Owned: Unpin,
impl<'a, B: ?Sized> UnwindSafe for Cow<'a, B>
where
B: RefUnwindSafe,
<B as ToOwned>::Owned: UnwindSafe,
Blanket Implementations
impl<T> Any for T
where
T: 'static + ?Sized,
impl<T> Borrow<T> for T
where
T: ?Sized,
impl<T> BorrowMut<T> for T
where
T: ?Sized,
impl<T> From<T> for T
fn from(t: T) -> T
Returns the argument unchanged.
impl<T, U> Into<U> for T
where
U: From<T>,
fn into(self) -> U
Calls U::from(self)
.
That is, this conversion is whatever the implementation of From<T> for U
chooses to do.
impl<T> ToOwned for T
where
T: Clone,
type Owned = T
fn to_owned(&self) -> T
fn clone_into(&self, target: &mut T)
impl<T> ToString for T
where
T: Display + ?Sized,
impl<T, U> TryFrom<U> for T
where
U: Into<T>,
type Error = Infallible
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
impl<T, U> TryInto<U> for T
where
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error
fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>
© 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