У меня есть код, который в упрощенном виде выглядит так:
enum A<'a> {
AConst(&'a [u8])
}
trait FromA {
fn from_a(A) -> Self;
}
impl FromA for &[u8] {
fn from_a(a: A) -> &[u8] {
match a {
AConst(bytes) => bytes
}
}
}
fn main() {
// I'd like to use it like this:
let s = b"abc";
let a = AConst(s);
let foo: &[u8] = from_a(a);
}
Это не работает, поскольку компилятор жалуется на отсутствие спецификаторов времени жизни в &[u8]
. Теперь я не уверен, какой будет правильный срок службы. Поскольку from_a
потребляет свой аргумент, время жизни возвращенной ссылки явно не может быть таким же, как время жизни аргумента.
Можно ли как-то использовать аннотации времени жизни для этого? Если да, то какие аннотации будут правильными? Можем ли мы каким-то образом заставить тип A
нести информацию о времени жизни ссылки?