yarte_parser 0.8.1

Ast, lexer and parser for yarte
Documentation
use syn::{
    parse::{Parse, ParseStream},
    punctuated::Punctuated,
    Expr, Result, Token,
};

pub(super) struct ExprList {
    list: Punctuated<Expr, Token![,]>,
}

impl Parse for ExprList {
    fn parse(input: ParseStream) -> Result<Self> {
        Ok(ExprList {
            list: input.parse_terminated(Expr::parse)?,
        })
    }
}

impl Into<Vec<Expr>> for ExprList {
    fn into(self) -> Vec<Expr> {
        self.list.into_pairs().map(|p| p.into_value()).collect()
    }
}

#[cfg(test)]
mod test {
    use super::*;
    use syn::parse_str;

    #[test]
    fn test() {
        let src = "bar, foo = \"bar,\"\n, fuu = 1  , goo = true,    ";
        let expected = vec![
            parse_str::<Expr>("bar").unwrap(),
            parse_str::<Expr>("foo=\"bar,\"").unwrap(),
            parse_str::<Expr>("fuu=1").unwrap(),
            parse_str::<Expr>("goo=true").unwrap(),
        ];

        let res: Vec<Expr> = parse_str::<ExprList>(src).unwrap().into();

        assert_eq!(expected, res);

        let src = "bar, foo = \"bar,\"\n, fuu = 1  , goo = true";
        let res: Vec<Expr> = parse_str::<ExprList>(src).unwrap().into();

        assert_eq!(expected, res);
    }
}