finitio 0.1.0

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

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

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

pub fn parse_builtin(input: Span) -> IResult<Span, BuiltinType> {
    map(preceded(tag("."), parse_identifier), |name| BuiltinType {
        name: String::from(name),
        position: input.into(),
    })(input)
}

#[test]
fn test_parse_builtin() {
    assert_parse(
        parse_builtin(Span::new(".Number")),
        BuiltinType {
            name: String::from("Number"),
            position: FilePosition { line: 1, column: 1 },
        },
    );
}