use crate::AssertStruct;
use std::cell::Cell;
use syn::{Result, Token, parse::Parse, parse::ParseStream};
thread_local! {
static NODE_ID_COUNTER: Cell<usize> = const { Cell::new(0) };
}
pub(crate) fn next_node_id() -> usize {
NODE_ID_COUNTER.with(|counter| {
let id = counter.get();
counter.set(id + 1);
id
})
}
fn reset_node_counter() {
NODE_ID_COUNTER.with(|counter| counter.set(0));
}
impl Parse for AssertStruct {
fn parse(input: ParseStream) -> Result<Self> {
reset_node_counter();
let value = input.parse()?;
let _: Token![,] = input.parse()?;
let pattern = input.parse()?;
Ok(AssertStruct { value, pattern })
}
}