links-notation 0.21.2

Rust implementation of the Links Notation parser
Documentation
use links_notation::{parse_lino, parse_lino_to_links, LiNo};

#[test]
fn test_multiline_double_quoted_reference() {
    let input = r#"(
  "long
string literal representing
the reference"

  'another
long string literal
as another reference'
)"#;
    assert_eq!(
        parse_lino_to_links(input).unwrap(),
        vec![LiNo::anonymous(vec![
            LiNo::anonymous(vec![LiNo::Ref(
                "long\nstring literal representing\nthe reference".to_string()
            )]),
            LiNo::anonymous(vec![LiNo::Ref(
                "another\nlong string literal\nas another reference".to_string()
            )]),
        ])]
    );
}

#[test]
fn test_simple_multiline_double_quoted() {
    let input = r#"("line1
line2")"#;
    assert_eq!(
        parse_lino_to_links(input).unwrap(),
        vec![LiNo::anonymous(vec![LiNo::Ref("line1\nline2".to_string())])]
    );
}

#[test]
fn test_simple_multiline_single_quoted() {
    let input = r#"('line1
line2')"#;
    assert_eq!(
        parse_lino_to_links(input).unwrap(),
        vec![LiNo::anonymous(vec![LiNo::Ref("line1\nline2".to_string())])]
    );
}

#[test]
fn test_multiline_quoted_as_id() {
    let input = r#"("multi
line
id": value1 value2)"#;
    let result = parse_lino(input).unwrap();

    if let LiNo::Link {
        id: outer_id,
        values: outer_values,
    } = &result
    {
        assert!(outer_id.is_none());
        assert_eq!(outer_values.len(), 1);

        if let LiNo::Link { id, values } = &outer_values[0] {
            assert_eq!(id.as_ref().unwrap(), "multi\nline\nid");
            assert_eq!(values.len(), 2);
        } else {
            panic!("Expected first value to be a Link");
        }
    } else {
        panic!("Expected result to be a Link");
    }
}