是否在Rust中手动构造属性值?

7eumitmz  于 2023-03-18  发布在  其他
关注(0)|答案(1)|浏览(74)

我想在Rust中创建一个AttributeValue(由rusoto_dynamodb库定义的类型),但是我无法从文档中找到如何实现这一点。
我是这么做的:

let mut my_map = HashMap::new();
my_map.insert(String::from("key1"), AttributeValue::from("value1"));

此错误,指向value1并说:

AttributeValue::from("value1"));
                     ^^^^^^^^ expected struct `AttributeValue`, found `&str`

我是Rust的新手,不理解这个错误信息,也不知道如何读取the docs。我想也许我想使用s-但是怎么用呢?

6jjcrrmo

6jjcrrmo1#

AttributeValue没有实现From<&str>,也没有关联的from函数,只实现了From<AttributeValue>

impl<T> From<T> for T

这是一个“一揽子实现”-所有类型都实现From<Self>
因此,当您调用AttributeValue::from时,Rust假定参数必须是另一个AttributeValue,并且当您给予它一个类似"value1"&str时,它会抱怨。
AttributeValue的定义很糟糕,构造它有点麻烦:

AttributeValue {
    s: Some("value1".into()),
    ..AttributeValue::default()
}

或者,您也可以通过serde

serde_json::from_value::<HashMap<String, AttributeValue>>(
    serde_json::json!({"key1": {"s": "value1"}})
).unwrap()

(我希望您可以使用json!({"key1": "value1"}),但是不行,AttributeValue真的不好。)

相关问题