clojure-reader 0.3.1

A Clojure reader
Documentation
#[cfg(test)]
mod test {
  use clojure_reader::edn;

  fn err_as_string(s: &str) -> String {
    let err = edn::read_string(s).err().unwrap();
    format!("{err:?}")
  }

  #[test]
  fn duplicates() {
    assert_eq!(
      err_as_string(
        "{:cat 42
                  :cat 0x42}"
      ),
      "EdnError { code: HashMapDuplicateKey, line: Some(2), column: Some(28), ptr: Some(36) }"
    );
    assert_eq!(
      err_as_string("#{:cat 1 2 [42] 2}"),
      "EdnError { code: SetDuplicateKey, line: Some(1), column: Some(18), ptr: Some(17) }"
    );
  }

  #[test]
  fn unbalanced_forms() {
    assert_eq!(
      err_as_string("(car (cdr) cdrrdrdrr (so (many (parens ())))"),
      "EdnError { code: UnexpectedEOF, line: Some(1), column: Some(45), ptr: Some(44) }"
    );

    assert_eq!(
      err_as_string("{:foo 42 :bar)"),
      "EdnError { code: UnmatchedDelimiter(')'), line: Some(1), column: Some(14), ptr: Some(13) }"
    );

    assert_eq!(
      err_as_string("#inst"),
      "EdnError { code: UnexpectedEOF, line: Some(1), column: Some(6), ptr: Some(5) }"
    );
  }

  #[test]
  fn parse_invalid_ints() {
    assert_eq!(
      err_as_string("42invalid123"),
      "EdnError { code: InvalidNumber, line: Some(1), column: Some(1), ptr: Some(0) }"
    );
    assert_eq!(
      err_as_string("0xxyz123"),
      "EdnError { code: InvalidNumber, line: Some(1), column: Some(1), ptr: Some(0) }"
    );
    assert_eq!(
      err_as_string("42rabcxzy"),
      "EdnError { code: InvalidRadix(Some(42)), line: Some(1), column: Some(1), ptr: Some(0) }"
    );
    assert_eq!(
      err_as_string("42crazyrabcxzy"),
      "EdnError { code: InvalidRadix(None), line: Some(1), column: Some(1), ptr: Some(0) }"
    );
  }

  #[test]
  fn parse_tag_no_end() {
    assert_eq!(
      err_as_string(r#"#Unit"#),
      "EdnError { code: UnexpectedEOF, line: Some(1), column: Some(6), ptr: Some(5) }"
    );
    assert_eq!(
      err_as_string(r#"#Unit "lolnoendingquote"#),
      "EdnError { code: UnexpectedEOF, line: Some(1), column: Some(24), ptr: Some(23) }"
    );
    assert_eq!(
      err_as_string(r#"#Unit ;"#),
      "EdnError { code: UnexpectedEOF, line: Some(1), column: Some(7), ptr: Some(7) }"
    );
  }
}