diff --git a/src/serde_bin.rs b/src/serde_bin.rs index 5dfd76e..556541b 100644 --- a/src/serde_bin.rs +++ b/src/serde_bin.rs @@ -410,6 +410,20 @@ where } } +impl SerBin for () { + #[inline(always)] + fn ser_bin(&self, _s: &mut Vec) { + // do nothing + } +} + +impl DeBin for () { + #[inline(always)] + fn de_bin(_o: &mut usize, _d: &[u8]) -> Result { + Ok(()) + } +} + impl SerBin for (A, B) where A: SerBin, diff --git a/src/serde_json.rs b/src/serde_json.rs index bdd7b2d..6bff6f3 100644 --- a/src/serde_json.rs +++ b/src/serde_json.rs @@ -748,15 +748,18 @@ where impl SerJson for () { fn ser_json(&self, _d: usize, s: &mut SerJsonState) { - s.out.push_str("") + s.out.push_str("null") } } impl DeJson for () { fn de_json(s: &mut DeJsonState, i: &mut Chars) -> Result<(), DeJsonErr> { - // skip "" - s.next_tok(i)?; - return Ok(()); + if let DeJsonTok::Null = s.tok { + s.next_tok(i)?; + return Ok(()); + } else { + return Err(s.err_token("null")); + } } } diff --git a/src/serde_ron.rs b/src/serde_ron.rs index 867d88d..c768545 100644 --- a/src/serde_ron.rs +++ b/src/serde_ron.rs @@ -1062,6 +1062,20 @@ where t } +impl SerRon for () { + fn ser_ron(&self, _d: usize, s: &mut SerRonState) { + s.out.push_str("()"); + } +} + +impl DeRon for () { + fn de_ron(s: &mut DeRonState, i: &mut Chars) -> Result<(), DeRonErr> { + s.paren_open(i)?; + s.paren_close(i)?; + Ok(()) + } +} + impl SerRon for (A, B) where A: SerRon, diff --git a/tests/ser_de.rs b/tests/ser_de.rs index 860e3d4..34a9c09 100644 --- a/tests/ser_de.rs +++ b/tests/ser_de.rs @@ -12,6 +12,7 @@ fn ser_de() { d: Option, e: Option>, f: Option<([u32; 4], String)>, + g: (), } let mut map = HashMap::new(); @@ -24,6 +25,7 @@ fn ser_de() { d: None, e: Some(map), f: Some(([1, 2, 3, 4], "tuple".to_string())), + g: (), }; let bytes = SerBin::serialize_bin(&test);