【发布时间】:2021-06-23 10:10:57
【问题描述】:
我努力将我的结构保存到用户偏好中。我的代码如下
use serde::{Serialize, Deserialize};
use preferences::AppInfo;
const APP_INFO: AppInfo = AppInfo{name: "some-name", author: "some-author"};
#[derive(Serialize, Deserialize, PartialEq, Debug)]
pub struct Foo {
bar: i32
}
fn main() {
let x = Foo{bar: 12};
// Attempt 1: cannot find a `save` function
// x.save(x, &APP_INFO, "foo/bar").unwrap();
// Attempt 2: Foo leaves Serialize & Deserialise unsatisfied
preferences::Preferences::save(&x, &APP_INFO, "foo/bar").unwrap();
}
尽管有这行 #[derive(Serialize, Deserialize, PartialEq, Debug)] 编译器抱怨..
error[E0277]: the trait bound `Foo: serde::ser::Serialize` is not satisfied
--> src/main.rs:17:5
|
17 | preferences::Preferences::save(&x, &APP_INFO, "foo/bar").unwrap();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `serde::ser::Serialize` is not implemented for `Foo`
|
::: /Users/martincowie/.cargo/registry/src/github.com-1ecc6299db9ec823/preferences-1.1.0/src/lib.rs:302:16
|
302 | fn save<S: AsRef<str>>(&self, app: &AppInfo, key: S) -> Result<(), PreferencesError>;
| ---------- required by this bound in `save`
|
= note: required because of the requirements on the impl of `Preferences` for `Foo`
unsatisfied trait bound <S: AsRef<str>> 与参数key 相关,它是一个字符串字面量。
这或多或少受到https://docs.rs/preferences/1.1.0/preferences/ 示例的启发
我需要做什么来安抚编译器?
【问题讨论】:
-
哇,那个错误信息!它不仅声称
Foo没有实现Serialize和Deserialize,而且没有解释版本冲突。它还声称某些特征绑定到完全不同的参数和完全不同的特征以某种方式导致Foo需要实现Serialize和Deserialize的要求。这很随机。
标签: rust