async-gcode 0.2.0

An async gcode parser for no_std targets.
Documentation
#[cfg(feature = "parse-trailing-comment")]
use super::to_gcode_comment;
use super::{block_on, Error, GCode};

#[test]
fn parse_checksum_from_start_to_checksum() {
    let input = "G0*119\n".bytes();
    assert_eq!(
        block_on(input),
        &[Ok(GCode::Word('g', (0.).into())), Ok(GCode::Execute)]
    );

    let input = "G0*118\n".bytes();
    assert_eq!(
        block_on(input),
        &[
            Ok(GCode::Word('g', (0.).into())),
            Err(Error::BadChecksum(119)),
            Ok(GCode::Execute)
        ]
    );

    let input = "G0* 119 \n".bytes();
    assert_eq!(
        block_on(input),
        &[Ok(GCode::Word('g', (0.).into())), Ok(GCode::Execute)]
    );
}
#[test]
fn checksum_resets_between_lines() {
    let input = r"
G0*119
 G1*86
"
    .bytes();
    assert_eq!(
        block_on(input),
        &[
            Ok(GCode::Execute),
            Ok(GCode::Word('g', (0.).into())),
            Ok(GCode::Execute),
            Ok(GCode::Word('g', (1.0).into())),
            Ok(GCode::Execute),
        ]
    )
}

#[test]
#[cfg(feature = "parse-trailing-comment")]
fn trailing_comment_are_not_covered_by_checksum() {
    let msg = " trailing comments may contain (or have?) parenthesis";
    let input = format!("G0* 119 ;{}\n", msg);
    let input = input.bytes();

    let mut expected_output = vec![Ok(GCode::Word('g', (0.).into()))];
    expected_output.extend(to_gcode_comment(msg).iter().cloned());
    expected_output.push(Ok(GCode::Execute));
    assert_eq!(block_on(input), expected_output)
}