twee_v3/parser/
metadata.rs1use nom::IResult;
2
3use crate::{utils::take_delimited_greedy, Metadata};
4
5pub(crate) fn parse_metadata(input: &str) -> IResult<&str, Metadata<&str>> {
6 let (input, content) = take_delimited_greedy('{', '}')(input)?;
7 Ok((input, Metadata::new(content)))
8}
9
10#[cfg(test)]
11mod tests {
12 use super::{parse_metadata, take_delimited_greedy, Metadata};
13
14 #[test]
15 fn test_take_greedy_simple_metadata() {
16 let input = r#"{"position":"900,600","size":"200,200"}"#;
17
18 assert_eq!(take_delimited_greedy('{', '}')(input), Ok(("", input)));
19 }
20
21 #[test]
22 fn test_take_greedy_escaped_brackets() {
23 let input = r#"{"name":"I'm \{ joe","birth":"20 of July"}"#;
24
25 assert_eq!(take_delimited_greedy('{', '}')(input), Ok(("", input)));
26 }
27
28 #[test]
29 fn test_metadata_reminder() {
30 let input = r#"{"position":"900,600","size":"200,200"} and some other stuff"#;
31
32 let expected_metadata = Metadata::new(r#"{"position":"900,600","size":"200,200"}"#);
33
34 assert_eq!(
35 parse_metadata(input),
36 Ok((" and some other stuff", expected_metadata))
37 );
38 }
39}