use super::declaration::{declaration, NetDecl}; use super::tokens::{token, Token, TokenKind as tk, TokenSpan}; use super::IResult; use nom::multi::many0; use nom::sequence::tuple; use nom::{ combinator::{cut, map}, sequence::{delimited, preceded}, }; pub struct StateBlock<'a> { name: Token<'a>, items: Vec>, } pub fn state(input: TokenSpan) -> IResult { map( preceded( token(tk::State), cut(tuple(( token(tk::Ident), delimited(token(tk::LBrace), many0(declaration), token(tk::RBrace)), ))), ), |(name, items)| StateBlock { name: name.clone(), items, }, )(input) }