私はデータベースで動作し、保存できるものを表す特性を書き込もうとしています。これを行うために、形質はserde::Deserialize
形質を含む他のものを継承する。耐性を必要とする形質を持つRustのジェネリック関数をどのように作成しますか?
trait Storable<'de>: Serialize + Deserialize<'de> {
fn global_id() -> &'static [u8];
fn instance_id(&self) -> Vec<u8>;
}
struct Example {
a: u8,
b: u8
}
impl<'de> Storable<'de> for Example {
fn global_id() -> &'static [u8] { b"p" }
fn instance_id(&self) -> Vec<u8> { vec![self.a, self.b] }
}
次に、私は一般的な機能を使用してこのデータを記述しようとしています:どのように
error[E0106]: missing lifetime specifier
--> src/database.rs:180:24
|
180 | pub fn put<'de, S: Storable>(&mut self, obj: &'de S) -> Result<(), String> {
| ^^^^^^^^ expected lifetime parameter
Minimal example on the playground.
:
pub fn put<'de, S: Storable>(&mut self, obj: &'de S) -> Result<(), String> {
...
let value = bincode::serialize(obj, bincode::Infinite);
...
db.put(key, value).map_err(|e| e.to_string())
}
しかし、私は次のエラーを取得しています私はこれを解決するだろう、それを完全に避けるだろうか?