flatzinc 0.3.21

A FlatZinc parser
Documentation
use winnow::{combinator::alt, error::ParserError, PResult, Parser};

#[derive(PartialEq, Clone, Debug)]
pub enum BasicType {
    Bool,
    Int,
    Float,
}

pub fn basic_type<'a, E: ParserError<&'a str>>(input: &mut &'a str) -> PResult<BasicType, E> {
    let bt = alt((bool, float, int)).parse_next(input)?;
    Ok(bt)
}

fn bool<'a, E: ParserError<&'a str>>(input: &mut &'a str) -> PResult<BasicType, E> {
    "bool".parse_next(input)?;
    Ok(BasicType::Bool)
}

fn int<'a, E: ParserError<&'a str>>(input: &mut &'a str) -> PResult<BasicType, E> {
    "int".parse_next(input)?;
    Ok(BasicType::Int)
}

fn float<'a, E: ParserError<&'a str>>(input: &mut &'a str) -> PResult<BasicType, E> {
    "float".parse_next(input)?;
    Ok(BasicType::Float)
}