osu-file-parser 1.1.0

A crate to parse an osu! beatmap file
Documentation
use nom::{
    bytes::complete::{tag, take_while, take_till},
    multi::separated_list0,
    Parser,
};

use crate::parsers::get_colon_field_value_lines;

#[test]
fn colon_field_value() {
    let (_, fields) = get_colon_field_value_lines("source:\ntags:\n").unwrap();

    assert_eq!(fields[0].0, "source");
    assert_eq!(fields[1].0, "tags");
}

#[test]
fn take_till_new_line() {
    let parser = take_till::<_, _, nom::error::Error<_>>(|c| c == '\n' || c == '\r');

    let (_, result) = parser("abc\r\ndef").unwrap();
    let (_, result2) = parser("\r\ntest").unwrap();

    assert_eq!(result, "abc");
    assert_eq!(result2, "");
}

#[test]
fn pipe_vec_parse() {
    let mut pipe_vec = separated_list0::<_, _, _, nom::error::Error<_>, _, _>(
        tag("|"),
        take_while(|c: char| !['|', ',', '\r', '\n'].contains(&c)),
    );

    let i = "1|2|3,foo";
    let (_, v) = pipe_vec.parse(i).unwrap();

    assert_eq!(v, vec!["1", "2", "3"]);
}