diff --git a/src/enc/mod.rs b/src/enc/mod.rs index 73ab16c..9909287 100644 --- a/src/enc/mod.rs +++ b/src/enc/mod.rs @@ -134,7 +134,7 @@ pub fn list_flatten<'a, I: IntoIterator>>(terms: I) -> Result<'a Ok(Term(T::List(tmp))) } -/// Term corresponding to a list of terms. Sub-lists are represented as NESTED: `{ . = sub list items }`. +/// Term corresponding to a list of terms. Sub-lists are represented as NESTED: `{.= sub list items }`. pub fn list_nested<'a, I: IntoIterator>>(terms: I) -> Result<'a> { let mut tmp = Vec::with_capacity(8); for t in terms { @@ -238,7 +238,7 @@ impl<'a> Term<'a> { /// ``` /// use nettext::enc::*; /// - /// assert_eq!(list([string("hello").unwrap(), string("world").unwrap()]).unwrap().nested().encode(), b"{ . = hello world }"); + /// assert_eq!(list([string("hello").unwrap(), string("world").unwrap()]).unwrap().nested().encode(), b"{.= hello world }"); /// ``` #[must_use] pub fn nested(self) -> Term<'a> { @@ -266,10 +266,14 @@ impl<'a> T<'a> { if d.is_empty() { buf.extend_from_slice(b"{}"); } else if d.len() == 1 { - buf.extend_from_slice(b"{ "); let (k, v) = d.into_iter().next().unwrap(); - buf.extend_from_slice(k.borrow()); - buf.extend_from_slice(b" = "); + if k.as_ref() == b"." { + buf.extend_from_slice(b"{.= "); + } else { + buf.extend_from_slice(b"{ "); + buf.extend_from_slice(k.borrow()); + buf.extend_from_slice(b" = "); + } v.encode_aux(buf, indent + 2, false); buf.extend_from_slice(b" }"); } else { @@ -357,7 +361,7 @@ mod tests { ]) .unwrap() .encode(), - b"a b { . = c d }" + b"a b {.= c d }" ); } } diff --git a/src/serde/mod.rs b/src/serde/mod.rs index 9d139e4..2b80470 100644 --- a/src/serde/mod.rs +++ b/src/serde/mod.rs @@ -39,6 +39,25 @@ mod tests { seq = YQ Yg, }"#; test_bidir(input, expected); + + let input = vec![ + Test { + int: 1, + seq: vec!["a".to_string(), "b".to_string()], + }, + Test { + int: 2, + seq: vec!["c".to_string(), "d".to_string()], + }, + ]; + let expected = br#"{.= Test { + int = 1, + seq = YQ Yg, + } } {.= Test { + int = 2, + seq = Yw ZA, + } }"#; + test_bidir(input, expected); } #[test] @@ -75,7 +94,7 @@ mod tests { E::Struct { a: 1 }, E::Tuple(3, 2), ]; - let expected = br#"E.Unit E.Unit { . = E.Newtype 1 } { . = E.Tuple 1 2 } { . = E.Struct { a = 1 } } { . = + let expected = br#"E.Unit E.Unit {.= E.Newtype 1 } {.= E.Tuple 1 2 } {.= E.Struct { a = 1 } } {.= E.Tuple 3 2 }"#; test_bidir(input, expected); } @@ -90,7 +109,7 @@ mod tests { #[test] fn test_seq2() { let input = (1, 2, (2, 3, 4), 5, 6); - let expected = br#"1 2 { . = 2 3 4 } 5 6"#; + let expected = br#"1 2 {.= 2 3 4 } 5 6"#; test_bidir(input, expected); } @@ -104,7 +123,7 @@ mod tests { #[test] fn test_seq4() { let input = [[1, 2], [2, 3], [3, 4]]; - let expected = br#"{ . = 1 2 } { . = 2 3 } { . = 3 4 }"#; + let expected = br#"{.= 1 2 } {.= 2 3 } {.= 3 4 }"#; test_bidir(input, expected); } diff --git a/src/serde/ser.rs b/src/serde/ser.rs index 2d2e1b7..e26aabf 100644 --- a/src/serde/ser.rs +++ b/src/serde/ser.rs @@ -422,7 +422,7 @@ mod tests { assert_eq!(&to_bytes(&u).unwrap(), expected); let n = (1, 2, (2, 3, 4), 5, 6); - let expected = br#"1 2 { . = 2 3 4 } 5 6"#; + let expected = br#"1 2 {.= 2 3 4 } 5 6"#; assert_eq!(&to_bytes(&n).unwrap(), expected); let t = [1, 2, 3, 4]; @@ -430,7 +430,7 @@ mod tests { assert_eq!(&to_bytes(&t).unwrap(), expected); let s = [[1, 2], [2, 3], [3, 4]]; - let expected = br#"{ . = 1 2 } { . = 2 3 } { . = 3 4 }"#; + let expected = br#"{.= 1 2 } {.= 2 3 } {.= 3 4 }"#; assert_eq!(&to_bytes(&s).unwrap(), expected); }