Small syntax hack for nested things
This commit is contained in:
parent
790aac7f75
commit
24c7a9bbb5
3 changed files with 34 additions and 11 deletions
|
@ -134,7 +134,7 @@ pub fn list_flatten<'a, I: IntoIterator<Item = Term<'a>>>(terms: I) -> Result<'a
|
||||||
Ok(Term(T::List(tmp)))
|
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<Item = Term<'a>>>(terms: I) -> Result<'a> {
|
pub fn list_nested<'a, I: IntoIterator<Item = Term<'a>>>(terms: I) -> Result<'a> {
|
||||||
let mut tmp = Vec::with_capacity(8);
|
let mut tmp = Vec::with_capacity(8);
|
||||||
for t in terms {
|
for t in terms {
|
||||||
|
@ -238,7 +238,7 @@ impl<'a> Term<'a> {
|
||||||
/// ```
|
/// ```
|
||||||
/// use nettext::enc::*;
|
/// 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]
|
#[must_use]
|
||||||
pub fn nested(self) -> Term<'a> {
|
pub fn nested(self) -> Term<'a> {
|
||||||
|
@ -266,10 +266,14 @@ impl<'a> T<'a> {
|
||||||
if d.is_empty() {
|
if d.is_empty() {
|
||||||
buf.extend_from_slice(b"{}");
|
buf.extend_from_slice(b"{}");
|
||||||
} else if d.len() == 1 {
|
} else if d.len() == 1 {
|
||||||
buf.extend_from_slice(b"{ ");
|
|
||||||
let (k, v) = d.into_iter().next().unwrap();
|
let (k, v) = d.into_iter().next().unwrap();
|
||||||
|
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(k.borrow());
|
||||||
buf.extend_from_slice(b" = ");
|
buf.extend_from_slice(b" = ");
|
||||||
|
}
|
||||||
v.encode_aux(buf, indent + 2, false);
|
v.encode_aux(buf, indent + 2, false);
|
||||||
buf.extend_from_slice(b" }");
|
buf.extend_from_slice(b" }");
|
||||||
} else {
|
} else {
|
||||||
|
@ -357,7 +361,7 @@ mod tests {
|
||||||
])
|
])
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.encode(),
|
.encode(),
|
||||||
b"a b { . = c d }"
|
b"a b {.= c d }"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,6 +39,25 @@ mod tests {
|
||||||
seq = YQ Yg,
|
seq = YQ Yg,
|
||||||
}"#;
|
}"#;
|
||||||
test_bidir(input, expected);
|
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]
|
#[test]
|
||||||
|
@ -75,7 +94,7 @@ mod tests {
|
||||||
E::Struct { a: 1 },
|
E::Struct { a: 1 },
|
||||||
E::Tuple(3, 2),
|
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 }"#;
|
E.Tuple 3 2 }"#;
|
||||||
test_bidir(input, expected);
|
test_bidir(input, expected);
|
||||||
}
|
}
|
||||||
|
@ -90,7 +109,7 @@ mod tests {
|
||||||
#[test]
|
#[test]
|
||||||
fn test_seq2() {
|
fn test_seq2() {
|
||||||
let input = (1, 2, (2, 3, 4), 5, 6);
|
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);
|
test_bidir(input, expected);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -104,7 +123,7 @@ mod tests {
|
||||||
#[test]
|
#[test]
|
||||||
fn test_seq4() {
|
fn test_seq4() {
|
||||||
let input = [[1, 2], [2, 3], [3, 4]];
|
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);
|
test_bidir(input, expected);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -422,7 +422,7 @@ mod tests {
|
||||||
assert_eq!(&to_bytes(&u).unwrap(), expected);
|
assert_eq!(&to_bytes(&u).unwrap(), expected);
|
||||||
|
|
||||||
let n = (1, 2, (2, 3, 4), 5, 6);
|
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);
|
assert_eq!(&to_bytes(&n).unwrap(), expected);
|
||||||
|
|
||||||
let t = [1, 2, 3, 4];
|
let t = [1, 2, 3, 4];
|
||||||
|
@ -430,7 +430,7 @@ mod tests {
|
||||||
assert_eq!(&to_bytes(&t).unwrap(), expected);
|
assert_eq!(&to_bytes(&t).unwrap(), expected);
|
||||||
|
|
||||||
let s = [[1, 2], [2, 3], [3, 4]];
|
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);
|
assert_eq!(&to_bytes(&s).unwrap(), expected);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue