如何将字符串解析为与第 3 方板条箱中的类型不匹配的大小写?
How to parse a string to case which doesn't match the type in 3rd party crate?
所以这是来自第 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 方库吗?
how to derive Serde for remote creates 上有一个指南,您可以在其中自定义您需要的任何内容:
会是这样的:
#[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
}
所以这是来自第 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 方库吗?
how to derive Serde for remote creates 上有一个指南,您可以在其中自定义您需要的任何内容:
会是这样的:
#[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
}