所以这是来自第 3 方库的一些代码:
#[derive(Debug, PartialEq, Eq, Hash, Clone, Serialize, Deserialize, Copy, Ord, PartialOrd)]
pub enum ViewingMetric {
RatingPercentage,
Rating
}
我想要的是解析像“rating_percentage”这样的字符串,而不能将 #[serde(rename_all = "...")]
添加到第 3 方代码中。我可以在调用 serde_json::from_str
期间以某种方式指定重命名吗?或者我必须添加另一个处理外壳之间转换的第 3 方库吗?
回答1
有一个关于https://serde.rs/remote-derive.html的指南,您可以在其中自定义您需要的任何内容:
会是这样的:
#[derive(Serialize, Deserialize)]
#[serde(remote = "OtherCrate::ViewingMetric", rename_all = "snake_case")]
enum ViwingMetricSerde {
RatingPercentage,
Rating
}
重要的是,您必须从新类型实现 From/Into
到远程类型 From<ViwingMetricSerde> for ViwingMetric
。
然后从您的代码中,实际获取原始类型:
#[derive(Serialize, Deserialize)]
pub struct MyStruct {
#[serde(with = "ViwingMetricSerde")]
metric: ViwingMetris
}