Trait CloneExt

Source
pub trait CloneExt<'b> {
    // Required method
    fn shallow_clone(&'b self) -> Cow<'b, str>;
}

Required Methods§

Source

fn shallow_clone(&'b self) -> Cow<'b, str>

Clone a Cow without memory allocation. Note, the original must outlive the clone! Use case:

use crate::tpnote_lib::clone_ext::CloneExt;
use std::borrow::Cow;
fn do_something_or_nothing(v: Cow<str>) -> Cow<str> {
    if v.len() > 3 {
        let s = "Hello ".to_string() + &*v;
        Cow::Owned(s)
    } else {
        v
    }
}

// Sometimes, we only have a `&Cow`, but we need a `Cow`!
let a: &Cow<str> = &Cow::Owned("world!".to_string());
let b: Cow<str>  = a.shallow_clone();
assert_eq!(do_something_or_nothing(b), "Hello world!");

let a: &Cow<str> = &Cow::Owned("ld!".to_string());
let b: Cow<str>  = a.shallow_clone();
assert_eq!(do_something_or_nothing(b), "ld!");

Implementations on Foreign Types§

Source§

impl<'b> CloneExt<'b> for Cow<'b, str>

Source§

fn shallow_clone(&'b self) -> Cow<'b, str>

Implementors§