У меня есть код, который каким-то образом преобразует строковую ссылку, например, принимает первую букву
trait Tr {
fn trim_indent(self) -> Self;
}
impl<'a> Tr for &'a str {
fn trim_indent(self) -> Self {
&self[..1] // some transformation here
}
}
fn main() {
let s = "aaa".trim_indent();
println!("{}", s);
}
Теперь я пытаюсь обобщить этот код для любого конкретного типа, который реализует AsRef<str>
.Моя последняя попытка была
use std::ops::Deref;
trait Tr<'a> {
fn trim_indent(self) -> Deref<Target = str> + 'a + Sized;
}
impl<'a, T: AsRef<str>> Tr<'a> for T {
fn trim_indent(self) -> Deref<Target = str> + 'a + Sized {
self.as_ref()[..1] // some transformation here
}
}
fn main() {
let s = "aaa".trim_indent();
println!("{}", s);
}
Я застрял, потому что без Sized
я получаю ошибку, тип которой неизвестен во время компиляции, но с Size
я получаю ошибку, что не могу явно использовать маркерную черту,