I use external crate with enum which does not implement serialization, and I want to use it in struct which will contain Vec of of this enum and have possibility de/serialize this struct. Based on serde documentation I created below code
use serde::{Serialize, Deserialize};
#[derive(Debug, PartialEq, Eq)]
enum ExternalCrateColor {
Red,
Green,
Blue
}
#[derive(Debug, Serialize, Deserialize)]
#[serde(remote = "ExternalCrateColor")]
enum LocalColor {
Red,
Green,
Blue
}
#[derive(Debug, Serialize, Deserialize)]
struct Hue {
#[serde(with = "LocalColor")]
color: ExternalCrateColor
}
fn main() {
let tones = Hue { color: ExternalCrateColor::Blue };
let serialized = serde_json::to_string(&tones).unwrap();
println!("serialized = {}", serialized);
let deserialized: Hue = serde_json::from_str(&serialized).unwrap();
if deserialized.color == ExternalCrateColor::Blue {
println!("Blue tones");
}
}
But what I want is to have Hue struct to contain Vec of ExternalCrateColor:
struct Hue {
#[serde(with = "LocalColor")]
colors: Vec<ExternalCrateColor>
}
and it does not works because de/serialization expect in this case single ExternalCrateColor. How to make it work?