use std::borrow::Cow;
fn main() {
// `Cow<'_, str>` can be an owned `String` or a borrowed `&str`
pub trait Func1tr {
fn gets(a: &str) -> Cow<'_, str>;
}
pub struct Func;
impl Func1tr for Func {
// Returns an owned `String`
fn gets(a: &str) -> Cow<'_, str> {
let mut m = String::from("aa");
m.push_str(a);
m.into()
}
}
pub struct StrReturner;
impl Func1tr for StrReturner {
// Returns a borrowed `&str`
fn gets(a: &str) -> Cow<'_, str> {
let offset = a.chars().next().map(char::len_utf8).unwrap_or(0);
let s = &a[offset..];
s.into()
}
}
let m = "sdsd";
let c = Func::gets(m);
println!("{}", c);
let c = StrReturner::gets(m);
println!("{}", c);
}