use serde::{Deserialize, Serialize}; #[derive(Debug, Serialize, Deserialize)] pub struct Recipe { pub name: String, pub description: Option, #[serde(default)] pub modules: Vec, #[serde(default)] pub packages: Vec, } #[derive(Debug, Serialize, Deserialize)] pub struct Modules { pub name: String, pub version: Option, } #[derive(Debug, Serialize, Deserialize)] pub struct Packages { pub name: String, pub version: Option, } #[test] fn both_ends() { let recipe_works = basic_toml::from_str::( r#" name = "testing" description = "example" modules = [] [[packages]] name = "base" "#, ) .unwrap(); basic_toml::to_string(&recipe_works).unwrap(); let recipe_fails = basic_toml::from_str::( r#" name = "testing" description = "example" packages = [] [[modules]] name = "base" "#, ) .unwrap(); let err = basic_toml::to_string(&recipe_fails).unwrap_err(); assert_eq!(err.to_string(), "values must be emitted before tables"); }