Rust serde не может десериализоваться из & [u8] - PullRequest
0 голосов
/ 05 февраля 2020

Я пытаюсь сделать некоторые черты для реализации десериализации для типов, создавая значения со стертыми типами из последовательности байтов (конкретный тип известен на этапе построения, но тип должен быть стерт после этого). но я продолжаю получать ошибки компиляции при попытке десериализации из последовательности байтов.

pub type TypeID = &'static str;

pub trait DynamicType {
    fn type_id(&self) -> TypeID;
}

pub trait Value: serde::de::DeserializeOwned+Default+std::fmt::Debug {
    const TYPE_ID: TypeID;
    fn new(src: &[u8]) -> Box<dyn DynamicType> {
        let r = rmp_serde::decode::from_read::<&[u8], Self>(src).unwrap_or(Self::default());
        Box::new(r)
    }
}

impl<T> DynamicType for T where T:Value {
    fn type_id(&self) -> TypeID {
        T::TYPE_ID
    }
}

Код создан для создания типизированных значений из последовательности байтов. В методе Value::new я получил ошибки компиляции

the parameter type `Self` may not live long enough
help: consider adding an explicit lifetime bound `Self: 'static`...
note: ...so that the type `Self` will meet its required lifetime boundsrustc(E0310)

Почему это так? Я думал, что использую DeserializeOwned, чтобы Self мог пережить входной буфер, затем Self можно переместить в Box, почему компилятор намекает мне, что я должен добавить `stati c (что устраняет ошибку компиляции).

Я использую rust c 1.42.0-nightly-msv c, это сообщение об ошибке из VS Code, если это имеет значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...