@@ -10,6 +10,11 @@ use crate::error::ParseError;
1010/// Represents a language following [ISO 639-3](https://en.wikipedia.org/wiki/ISO_639-3) standard.
1111#[cfg_attr(feature = "enum-map", derive(::enum_map::Enum))]
1212#[cfg_attr(feature = "arbitrary", derive(::arbitrary::Arbitrary))]
13+ #[cfg_attr(
14+     feature = "serde",
15+     derive(::serde::Serialize, ::serde::Deserialize),
16+     serde(rename_all = "lowercase")
17+ )]
1318#[derive(PartialEq, Eq, Debug, Hash, Clone, Copy)]
1419pub enum Lang {
1520    <%  langs.each_with_index do |lang, index| %> 
@@ -191,4 +196,14 @@ mod tests {
191196        assert_eq!(Lang::Deu.to_string(), "Deutsch");
192197        assert_eq!(Lang::Eng.to_string(), "English");
193198    }
199+ 
200+     #[cfg(feature = "serde")]
201+     #[test]
202+     fn test_serialize_and_deserialize() {
203+         let langs = vec![Lang::Epo, Lang::Ukr, Lang::Spa];
204+         let json_langs = serde_json::to_string(&langs).unwrap();
205+         assert_eq!(json_langs, r#"["epo","ukr","spa"]"#);
206+         let parsed_langs: Vec< Lang >  = serde_json::from_str(&json_langs).unwrap();
207+         assert_eq!(parsed_langs, langs);
208+     }
194209}
0 commit comments