Skip to content

Commit 8aae550

Browse files
committed
Add serde feature
1 parent 59166c7 commit 8aae550

File tree

4 files changed

+33
-0
lines changed

4 files changed

+33
-0
lines changed

.github/workflows/ci.yml

+6
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,12 @@ jobs:
4242
command: test
4343
args: --features arbitrary
4444

45+
- name: cargo test --all-features
46+
uses: actions-rs/cargo@v1
47+
with:
48+
command: test
49+
args: --all-features
50+
4551
rustfmt:
4652
name: Rustfmt
4753
runs-on: ubuntu-latest

Cargo.toml

+1
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ include = [
2222
hashbrown = "0.12.0"
2323
once_cell = "1.10.0"
2424
enum-map = { version = "2", optional = true }
25+
serde = { version = "1", optional = true, features = ["derive"] }
2526
arbitrary = { version = "1", optional = true, features = ["derive"] }
2627

2728
[dev-dependencies]

src/lang.rs

+15
Original file line numberDiff line numberDiff line change
@@ -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)]
1419
pub enum Lang {
1520
/// Esperanto (Esperanto)
@@ -721,4 +726,14 @@ mod tests {
721726
assert_eq!(Lang::Deu.to_string(), "Deutsch");
722727
assert_eq!(Lang::Eng.to_string(), "English");
723728
}
729+
730+
#[cfg(feature = "serde")]
731+
#[test]
732+
fn test_serialize_and_deserialize() {
733+
let langs = vec![Lang::Epo, Lang::Ukr, Lang::Spa];
734+
let json_langs = serde_json::to_string(&langs).unwrap();
735+
assert_eq!(json_langs, r#"["epo","ukr","spa"]"#);
736+
let parsed_langs: Vec<Lang> = serde_json::from_str(&json_langs).unwrap();
737+
assert_eq!(parsed_langs, langs);
738+
}
724739
}

src/scripts/script.rs

+11
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ use crate::Lang;
88
/// Represents a writing system (Latin, Cyrillic, Arabic, etc).
99
#[cfg_attr(feature = "enum-map", derive(::enum_map::Enum))]
1010
#[cfg_attr(feature = "arbitrary", derive(::arbitrary::Arbitrary))]
11+
#[cfg_attr(feature = "serde", derive(::serde::Serialize, ::serde::Deserialize))]
1112
#[derive(PartialEq, Eq, Debug, Clone, Copy, Hash)]
1213
pub enum Script {
1314
// Keep this in alphabetic order (for C bindings)
@@ -205,4 +206,14 @@ mod tests {
205206
assert_eq!(Script::Cyrillic.to_string(), "Cyrillic");
206207
assert_eq!(Script::Arabic.to_string(), "Arabic");
207208
}
209+
210+
#[cfg(feature = "serde")]
211+
#[test]
212+
fn test_serialize_and_deserialize() {
213+
let scripts = vec![Script::Georgian, Script::Cyrillic];
214+
let json_scripts = serde_json::to_string(&scripts).unwrap();
215+
assert_eq!(json_scripts, r#"["Georgian","Cyrillic"]"#);
216+
let parsed_scripts: Vec<Script> = serde_json::from_str(&json_scripts).unwrap();
217+
assert_eq!(parsed_scripts, scripts);
218+
}
208219
}

0 commit comments

Comments
 (0)