finitio 0.1.0

Finitio data language
Documentation
#[cfg(test)]
use crate::fio::common::assert_parse;

use crate::{common::FilePosition, fio::common::Span};
use nom::{bytes::complete::tag, combinator::map, sequence::preceded, IResult};
use serde::{Serialize, Deserialize};

use super::common::ws;

#[derive(Debug, PartialEq, Serialize, Deserialize, Clone)]
pub struct NilType {
    pub position: FilePosition,
}

pub fn parse_nil(input: Span) -> IResult<Span, NilType> {
    map(preceded(ws, tag("Nil")), |t| NilType { position: t.into() })(input)
}

#[test]
fn test_parse_nil() {
    assert_parse(
        parse_nil(Span::new("Nil")),
        NilType {
            position: FilePosition { line: 1, column: 1 },
        },
    );
    assert_parse(
        parse_nil(Span::new(" Nil")),
        NilType {
            position: FilePosition { line: 1, column: 2 },
        },
    );
    assert_parse(
        parse_nil(Span::new(" \n  Nil")),
        NilType {
            position: FilePosition { line: 2, column: 3 },
        },
    );
}