std ::borrow Enum Cow Copy item path  1.0.0  · source  pub enum Cow<'a, B>{
    Borrowed(&'a B ),
    Owned(<B as ToOwned >::Owned ),
}Expand description 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_mutArc::make_mut
§ Examplesuse  std::borrow::Cow;
fn  abs_all(input: &mut  Cow<'_ , [i32]>) {
    for  i in  0 ..input.len() {
        let  v = input[i];
        if  v < 0  {
            input.to_mut()[i] = -v;
        }
    }
}
let  slice = [0 , 1 , 2 ];
let  mut  input = Cow::from(& slice[..]);
abs_all(&mut  input);
let  slice = [-1 , 0 , 1 ];
let  mut  input = Cow::from(& slice[..]);
abs_all(&mut  input);
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 }
    }
}
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;
clone_on_write.values.to_mut().push(3 );
println! ("clone_on_write = {:?}" , clone_on_write.values);
match  clone_on_write {
    Items { values: Cow::Owned(_ ) } => println! ("clone_on_write contains owned data" ),
    _  => panic! ("expect owned data" ),
}🔬 This is a nightly-only experimental API. (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());🔬 This is a nightly-only experimental API. (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());Acquires a mutable reference to the owned form of the data.
Clones the data if it is not already owned.
§ Examplesuse  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>
);Extracts the owned data.
Clones the data if it is not already owned.
§ ExamplesCalling 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)
);The resulting type after applying the + operator.
The resulting type after applying the + operator.
Converts this type into a shared reference of the (usually inferred) input type.
Converts this type into a shared reference of the (usually inferred) input type.
Immutably borrows from an owned value. 
Read more Performs copy-assignment from 
source. 
Read more Formats the value using the given formatter. 
Read more Creates an owned Cow<’a, B> with the default value for the contained owned value.
The resulting type after dereferencing.
Dereferences the value.
Formats the value using the given formatter. 
Read more Extends a collection with the contents of an iterator. 
Read more 🔬 This is a nightly-only experimental API. (extend_one #72631 ) Extends a collection with exactly one element.
🔬 This is a nightly-only experimental API. (extend_one #72631 ) Reserves capacity in a collection for the given number of additional elements. 
Read more Extends a collection with the contents of an iterator. 
Read more 🔬 This is a nightly-only experimental API. (extend_one #72631 ) Extends a collection with exactly one element.
🔬 This is a nightly-only experimental API. (extend_one #72631 ) Reserves capacity in a collection for the given number of additional elements. 
Read more Creates a BorrowedCow
This conversion does not allocate or clone the data.
Creates a BorrowedCow
This conversion does not allocate or clone the data.
Converts a CStrCow
Converts a &CStringCow
Creates a clone-on-write pointer from a reference to
Path
This conversion does not clone or allocate.
Creates a clone-on-write pointer from a reference to
PathBuf
This conversion does not clone or allocate.
Converts a StringBorrowed
§ Examplelet  s = "eggplant" .to_string();
assert_eq! (Cow::from(& s), Cow::Borrowed("eggplant" ));Creates a BorrowedCowVec
This conversion does not allocate or clone the data.
Converts a string slice into a Borrowed
§ Exampleassert_eq! (Cow::from("eggplant" ), Cow::Borrowed("eggplant" ));Converts a CStringCow
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.
Converts a Cow<'a, CStr> into a Box<CStr>,
by copying the contents if they are borrowed.
Converts a Cow<'a, OsStr> into a Box <OsStr >
Creates a boxed Path
Converting from a Cow::Owned does not clone or allocate.
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.
§ Examplesuse  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}" );Converts 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.
§ Exampleslet  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));Creates an atomically reference-counted pointer from a clone-on-write
pointer by copying its content.
§ Examplelet  cow: Cow<'_ , str> = Cow::Borrowed("eggplant" );
let  shared: Arc<str> = Arc::from(cow);
assert_eq! ("eggplant" , & shared[..]);Creates a reference-counted pointer from a clone-on-write pointer by
copying its content.
§ Examplelet  cow: Cow<'_ , str> = Cow::Borrowed("eggplant" );
let  shared: Rc<str> = Rc::from(cow);
assert_eq! ("eggplant" , & shared[..]);Converts a Cow<'a, CStr> into a CString, by copying the contents if they are
borrowed.
Converts a Cow<'a, OsStr> into an OsString
Converts a clone-on-write pointer to an owned path.
Converting from a Cow::Owned does not clone or allocate.
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.
§ Examplelet  cow: Cow<'_ , str> = Cow::Borrowed("eggplant" );
let  owned: String = String::from(cow);
assert_eq! (& owned[..], "eggplant" );Converts a CowError
§ Examplesuse  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>::from(a_cow_str_error);
assert! (mem::size_of::<Box<dyn  Error>>() == mem::size_of_val(& a_boxed_error))Converts a CowErrorSendSync
§ Examplesuse  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))Creates a clone-on-write pointer from an owned
instance of PathBuf
This conversion does not clone or allocate.
Converts a StringOwned
§ Examplelet  s = "eggplant" .to_string();
let  s2 = "eggplant" .to_string();
assert_eq! (Cow::from(s), Cow::<'static , str>::Owned(s2));Creates an OwnedCowVec
This conversion does not allocate or clone the data.
Compares and returns the maximum of two values. 
Read more Compares and returns the minimum of two values. 
Read more Restrict a value to a certain interval. 
Read more Tests for self and other values to be equal, and is used by ==.
Tests for !=. The default implementation is almost always sufficient,
and should not be overridden without very good reason.
Tests for self and other values to be equal, and is used by ==.
Tests for !=. The default implementation is almost always sufficient,
and should not be overridden without very good reason.
Tests for self and other values to be equal, and is used by ==.
Tests for !=. The default implementation is almost always sufficient,
and should not be overridden without very good reason.
Tests for self and other values to be equal, and is used by ==.
Tests for !=. The default implementation is almost always sufficient,
and should not be overridden without very good reason.
Tests for self and other values to be equal, and is used by ==.
Tests for !=. The default implementation is almost always sufficient,
and should not be overridden without very good reason.
Tests for self and other values to be equal, and is used by ==.
Tests for !=. The default implementation is almost always sufficient,
and should not be overridden without very good reason.
Tests for self and other values to be equal, and is used by ==.
Tests for !=. The default implementation is almost always sufficient,
and should not be overridden without very good reason.
Tests for self and other values to be equal, and is used by ==.
Tests for !=. The default implementation is almost always sufficient,
and should not be overridden without very good reason.
Tests for self and other values to be equal, and is used by ==.
Tests for !=. The default implementation is almost always sufficient,
and should not be overridden without very good reason.
Tests for self and other values to be equal, and is used by ==.
Tests for !=. The default implementation is almost always sufficient,
and should not be overridden without very good reason.
Tests for self and other values to be equal, and is used by ==.
Tests for !=. The default implementation is almost always sufficient,
and should not be overridden without very good reason.
Tests for self and other values to be equal, and is used by ==.
Tests for !=. The default implementation is almost always sufficient,
and should not be overridden without very good reason.
Tests for self and other values to be equal, and is used by ==.
Tests for !=. The default implementation is almost always sufficient,
and should not be overridden without very good reason.
Tests for self and other values to be equal, and is used by ==.
Tests for !=. The default implementation is almost always sufficient,
and should not be overridden without very good reason.
Tests for self and other values to be equal, and is used by ==.
Tests for !=. The default implementation is almost always sufficient,
and should not be overridden without very good reason.
Tests for self and other values to be equal, and is used by ==.
Tests for !=. The default implementation is almost always sufficient,
and should not be overridden without very good reason.
Tests for self and other values to be equal, and is used by ==.
Tests for !=. The default implementation is almost always sufficient,
and should not be overridden without very good reason.
Tests for self and other values to be equal, and is used by ==.
Tests for !=. The default implementation is almost always sufficient,
and should not be overridden without very good reason.
Tests for self and other values to be equal, and is used by ==.
Tests for !=. The default implementation is almost always sufficient,
and should not be overridden without very good reason.
Tests for self and other values to be equal, and is used by ==.
Tests for !=. The default implementation is almost always sufficient,
and should not be overridden without very good reason.
Tests for self and other values to be equal, and is used by ==.
Tests for !=. The default implementation is almost always sufficient,
and should not be overridden without very good reason.
Tests for self and other values to be equal, and is used by ==.
Tests for !=. The default implementation is almost always sufficient,
and should not be overridden without very good reason.
Tests for self and other values to be equal, and is used by ==.
Tests for !=. The default implementation is almost always sufficient,
and should not be overridden without very good reason.
Tests for self and other values to be equal, and is used by ==.
Tests for !=. The default implementation is almost always sufficient,
and should not be overridden without very good reason.
Tests for self and other values to be equal, and is used by ==.
Tests for !=. The default implementation is almost always sufficient,
and should not be overridden without very good reason.
Tests for self and other values to be equal, and is used by ==.
Tests for !=. The default implementation is almost always sufficient,
and should not be overridden without very good reason.
Tests for self and other values to be equal, and is used by ==.
Tests for !=. The default implementation is almost always sufficient,
and should not be overridden without very good reason.
Tests for self and other values to be equal, and is used by ==.
Tests for !=. The default implementation is almost always sufficient,
and should not be overridden without very good reason.
Tests for self and other values to be equal, and is used by ==.
Tests for !=. The default implementation is almost always sufficient,
and should not be overridden without very good reason.
Tests for self and other values to be equal, and is used by ==.
Tests for !=. The default implementation is almost always sufficient,
and should not be overridden without very good reason.
Tests for self and other values to be equal, and is used by ==.
Tests for !=. The default implementation is almost always sufficient,
and should not be overridden without very good reason.
Tests for self and other values to be equal, and is used by ==.
Tests for !=. The default implementation is almost always sufficient,
and should not be overridden without very good reason.
Tests for self and other values to be equal, and is used by ==.
Tests for !=. The default implementation is almost always sufficient,
and should not be overridden without very good reason.
Tests for self and other values to be equal, and is used by ==.
Tests for !=. The default implementation is almost always sufficient,
and should not be overridden without very good reason.
This method returns an ordering between 
self and 
other values if one exists. 
Read more Tests less than (for 
self and 
other) and is used by the 
< operator. 
Read more Tests less than or equal to (for 
self and 
other) and is used by the
<= operator. 
Read more Tests greater than (for 
self and 
other) and is used by the 
>
operator. 
Read more Tests greater than or equal to (for 
self and 
other) and is used by
the 
>= operator. 
Read more This method returns an ordering between 
self and 
other values if one exists. 
Read more Tests less than (for 
self and 
other) and is used by the 
< operator. 
Read more Tests less than or equal to (for 
self and 
other) and is used by the
<= operator. 
Read more Tests greater than (for 
self and 
other) and is used by the 
>
operator. 
Read more Tests greater than or equal to (for 
self and 
other) and is used by
the 
>= operator. 
Read more This method returns an ordering between 
self and 
other values if one exists. 
Read more Tests less than (for 
self and 
other) and is used by the 
< operator. 
Read more Tests less than or equal to (for 
self and 
other) and is used by the
<= operator. 
Read more Tests greater than (for 
self and 
other) and is used by the 
>
operator. 
Read more Tests greater than or equal to (for 
self and 
other) and is used by
the 
>= operator. 
Read more This method returns an ordering between 
self and 
other values if one exists. 
Read more Tests less than (for 
self and 
other) and is used by the 
< operator. 
Read more Tests less than or equal to (for 
self and 
other) and is used by the
<= operator. 
Read more Tests greater than (for 
self and 
other) and is used by the 
>
operator. 
Read more Tests greater than or equal to (for 
self and 
other) and is used by
the 
>= operator. 
Read more This method returns an ordering between 
self and 
other values if one exists. 
Read more Tests less than (for 
self and 
other) and is used by the 
< operator. 
Read more Tests less than or equal to (for 
self and 
other) and is used by the
<= operator. 
Read more Tests greater than (for 
self and 
other) and is used by the 
>
operator. 
Read more Tests greater than or equal to (for 
self and 
other) and is used by
the 
>= operator. 
Read more This method returns an ordering between 
self and 
other values if one exists. 
Read more Tests less than (for 
self and 
other) and is used by the 
< operator. 
Read more Tests less than or equal to (for 
self and 
other) and is used by the
<= operator. 
Read more Tests greater than (for 
self and 
other) and is used by the 
>
operator. 
Read more Tests greater than or equal to (for 
self and 
other) and is used by
the 
>= operator. 
Read more This method returns an ordering between 
self and 
other values if one exists. 
Read more Tests less than (for 
self and 
other) and is used by the 
< operator. 
Read more Tests less than or equal to (for 
self and 
other) and is used by the
<= operator. 
Read more Tests greater than (for 
self and 
other) and is used by the 
>
operator. 
Read more Tests greater than or equal to (for 
self and 
other) and is used by
the 
>= operator. 
Read more This method returns an ordering between 
self and 
other values if one exists. 
Read more Tests less than (for 
self and 
other) and is used by the 
< operator. 
Read more Tests less than or equal to (for 
self and 
other) and is used by the
<= operator. 
Read more Tests greater than (for 
self and 
other) and is used by the 
>
operator. 
Read more Tests greater than or equal to (for 
self and 
other) and is used by
the 
>= operator. 
Read more This method returns an ordering between 
self and 
other values if one exists. 
Read more Tests less than (for 
self and 
other) and is used by the 
< operator. 
Read more Tests less than or equal to (for 
self and 
other) and is used by the
<= operator. 
Read more Tests greater than (for 
self and 
other) and is used by the 
>
operator. 
Read more Tests greater than or equal to (for 
self and 
other) and is used by
the 
>= operator. 
Read more This method returns an ordering between 
self and 
other values if one exists. 
Read more Tests less than (for 
self and 
other) and is used by the 
< operator. 
Read more Tests less than or equal to (for 
self and 
other) and is used by the
<= operator. 
Read more Tests greater than (for 
self and 
other) and is used by the 
>
operator. 
Read more Tests greater than or equal to (for 
self and 
other) and is used by
the 
>= operator. 
Read more This method returns an ordering between 
self and 
other values if one exists. 
Read more Tests less than (for 
self and 
other) and is used by the 
< operator. 
Read more Tests less than or equal to (for 
self and 
other) and is used by the
<= operator. 
Read more Tests greater than (for 
self and 
other) and is used by the 
>
operator. 
Read more Tests greater than or equal to (for 
self and 
other) and is used by
the 
>= operator. 
Read more This method returns an ordering between 
self and 
other values if one exists. 
Read more Tests less than (for 
self and 
other) and is used by the 
< operator. 
Read more Tests less than or equal to (for 
self and 
other) and is used by the
<= operator. 
Read more Tests greater than (for 
self and 
other) and is used by the 
>
operator. 
Read more Tests greater than or equal to (for 
self and 
other) and is used by
the 
>= operator. 
Read more This method returns an ordering between 
self and 
other values if one exists. 
Read more Tests less than (for 
self and 
other) and is used by the 
< operator. 
Read more Tests less than or equal to (for 
self and 
other) and is used by the
<= operator. 
Read more Tests greater than (for 
self and 
other) and is used by the 
>
operator. 
Read more Tests greater than or equal to (for 
self and 
other) and is used by
the 
>= operator. 
Read more This method returns an ordering between 
self and 
other values if one exists. 
Read more Tests less than (for 
self and 
other) and is used by the 
< operator. 
Read more Tests less than or equal to (for 
self and 
other) and is used by the
<= operator. 
Read more Tests greater than (for 
self and 
other) and is used by the 
>
operator. 
Read more Tests greater than or equal to (for 
self and 
other) and is used by
the 
>= operator. 
Read more This method returns an ordering between 
self and 
other values if one exists. 
Read more Tests less than (for 
self and 
other) and is used by the 
< operator. 
Read more Tests less than or equal to (for 
self and 
other) and is used by the
<= operator. 
Read more Tests greater than (for 
self and 
other) and is used by the 
>
operator. 
Read more Tests greater than or equal to (for 
self and 
other) and is used by
the 
>= operator. 
Read more This method returns an ordering between 
self and 
other values if one exists. 
Read more Tests less than (for 
self and 
other) and is used by the 
< operator. 
Read more Tests less than or equal to (for 
self and 
other) and is used by the
<= operator. 
Read more Tests greater than (for 
self and 
other) and is used by the 
>
operator. 
Read more Tests greater than or equal to (for 
self and 
other) and is used by
the 
>= operator. 
Read more This method returns an ordering between 
self and 
other values if one exists. 
Read more Tests less than (for 
self and 
other) and is used by the 
< operator. 
Read more Tests less than or equal to (for 
self and 
other) and is used by the
<= operator. 
Read more Tests greater than (for 
self and 
other) and is used by the 
>
operator. 
Read more Tests greater than or equal to (for 
self and 
other) and is used by
the 
>= operator. 
Read more This method returns an ordering between 
self and 
other values if one exists. 
Read more Tests less than (for 
self and 
other) and is used by the 
< operator. 
Read more Tests less than or equal to (for 
self and 
other) and is used by the
<= operator. 
Read more Tests greater than (for 
self and 
other) and is used by the 
>
operator. 
Read more Tests greater than or equal to (for 
self and 
other) and is used by
the 
>= operator. 
Read more This method returns an ordering between 
self and 
other values if one exists. 
Read more Tests less than (for 
self and 
other) and is used by the 
< operator. 
Read more Tests less than or equal to (for 
self and 
other) and is used by the
<= operator. 
Read more Tests greater than (for 
self and 
other) and is used by the 
>
operator. 
Read more Tests greater than or equal to (for 
self and 
other) and is used by
the 
>= operator. 
Read more This method returns an ordering between 
self and 
other values if one exists. 
Read more Tests less than (for 
self and 
other) and is used by the 
< operator. 
Read more Tests less than or equal to (for 
self and 
other) and is used by the
<= operator. 
Read more Tests greater than (for 
self and 
other) and is used by the 
>
operator. 
Read more Tests greater than or equal to (for 
self and 
other) and is used by
the 
>= operator. 
Read more This method returns an ordering between 
self and 
other values if one exists. 
Read more Tests less than (for 
self and 
other) and is used by the 
< operator. 
Read more Tests less than or equal to (for 
self and 
other) and is used by the
<= operator. 
Read more Tests greater than (for 
self and 
other) and is used by the 
>
operator. 
Read more Tests greater than or equal to (for 
self and 
other) and is used by
the 
>= operator. 
Read more This method returns an ordering between 
self and 
other values if one exists. 
Read more Tests less than (for 
self and 
other) and is used by the 
< operator. 
Read more Tests less than or equal to (for 
self and 
other) and is used by the
<= operator. 
Read more Tests greater than (for 
self and 
other) and is used by the 
>
operator. 
Read more Tests greater than or equal to (for 
self and 
other) and is used by
the 
>= operator. 
Read more This method returns an ordering between 
self and 
other values if one exists. 
Read more Tests less than (for 
self and 
other) and is used by the 
< operator. 
Read more Tests less than or equal to (for 
self and 
other) and is used by the
<= operator. 
Read more Tests greater than (for 
self and 
other) and is used by the 
>
operator. 
Read more Tests greater than or equal to (for 
self and 
other) and is used by
the 
>= operator. 
Read more This method returns an ordering between 
self and 
other values if one exists. 
Read more Tests less than (for 
self and 
other) and is used by the 
< operator. 
Read more Tests less than or equal to (for 
self and 
other) and is used by the
<= operator. 
Read more Tests greater than (for 
self and 
other) and is used by the 
>
operator. 
Read more Tests greater than or equal to (for 
self and 
other) and is used by
the 
>= operator. 
Read more This method returns an ordering between 
self and 
other values if one exists. 
Read more Tests less than (for 
self and 
other) and is used by the 
< operator. 
Read more Tests less than or equal to (for 
self and 
other) and is used by the
<= operator. 
Read more Tests greater than (for 
self and 
other) and is used by the 
>
operator. 
Read more Tests greater than or equal to (for 
self and 
other) and is used by
the 
>= operator. 
Read more Immutably borrows from an owned value. 
Read more Mutably borrows from an owned value. 
Read more 🔬 This is a nightly-only experimental API. (clone_to_uninit #126799 ) Performs copy-assignment from 
self to 
dst. 
Read more Returns the argument unchanged.
Calls U::from(self).
That is, this conversion is whatever the implementation of
From <T> for U
The resulting type after obtaining ownership.
Creates owned data from borrowed data, usually by cloning. 
Read more Uses borrowed data to replace owned data, usually by cloning. 
Read more Converts the given value to a 
String. 
Read more The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.