use syn::{Token, parse::Parse};
use crate::parse::next_node_id;
use crate::pattern::Pattern;
#[derive(Debug, Clone)]
pub(crate) struct PatternSlice {
pub node_id: usize,
pub span: proc_macro2::Span,
pub elements: Vec<Pattern>,
}
impl Parse for PatternSlice {
fn parse(input: syn::parse::ParseStream) -> syn::Result<Self> {
let span = input.span();
let content;
syn::bracketed!(content in input);
let elements = parse_pattern_list(&content)?;
Ok(PatternSlice {
node_id: next_node_id(),
span,
elements,
})
}
}
fn parse_pattern_list(input: syn::parse::ParseStream) -> syn::Result<Vec<Pattern>> {
let mut patterns = Vec::new();
while !input.is_empty() {
patterns.push(input.parse()?);
if !input.is_empty() {
let _: Token![,] = input.parse()?;
}
}
Ok(patterns)
}