toml
toml copied to clipboard
Error when serializing vector of enums
This is probably carried over from toml-rs, but reproducing anyway.
use serde::{Deserialize, Serialize};
#[derive(Debug, Deserialize, Serialize)]
pub struct Module1 {
x: u8,
y: u8
}
#[derive(Debug, Deserialize, Serialize)]
pub struct Module2 {
h: u8,
i: u8
}
#[derive(Debug, Deserialize, Serialize)]
pub enum Module {
Module1(Module1),
Module2(Module2)
}
#[derive(Debug, Deserialize, Serialize)]
pub struct Container {
modules: Vec<Module>,
}
#[cfg(test)]
mod tests {
use super::*;
use serde_json;
use toml;
#[test]
fn test_container_serialization() {
let module1 = Module1 {x: 4, y: 5};
let module2 = Module2 {h: 2, i: 3};
let container: Container = Container {modules: vec![Module::Module1(module1), Module::Module2(module2)]};
dbg!(serde_json::to_string(&container).unwrap()); // This works
dbg!(toml_edit::easy::to_string(&container).unwrap()); // This panics
dbg!(toml::to_string(&container).unwrap()); // This also panics
}
}
Structured more like a test we'd add:
#[test]
fn test_container_serialization() {
#[derive(Debug, Deserialize, Serialize)]
pub struct Module1 {
x: u8,
y: u8,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct Module2 {
h: u8,
i: u8,
}
#[derive(Debug, Deserialize, Serialize)]
pub enum Module {
Module1(Module1),
Module2(Module2),
}
#[derive(Debug, Deserialize, Serialize)]
pub struct Container {
modules: Vec<Module>,
}
let module1 = Module1 { x: 4, y: 5 };
let module2 = Module2 { h: 2, i: 3 };
let container: Container = Container {
modules: vec![Module::Module1(module1), Module::Module2(module2)],
};
toml::to_string(&container).unwrap();
}