@@ -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