use crate::parse::case::CaseDefinition;
use crate::parse::context::Context;
use proc_macro2::TokenStream;
use syn::Result;
pub struct RawJoinDefinition {
pub context: Context,
pub cases: Vec<CaseDefinition>,
}
impl RawJoinDefinition {
pub fn parse(input: TokenStream) -> Result<Self> {
let match_expr: syn::ExprMatch = syn::parse2(input)?;
let context = Context::parse(*match_expr.expr)?;
let cases = match_expr
.arms
.into_iter()
.enumerate()
.map(|(i, arm)| CaseDefinition::parse(arm, i))
.collect::<Result<Vec<CaseDefinition>>>()?;
Ok(RawJoinDefinition { context, cases })
}
}