1use crate::ast::error::pattern::Pattern;
2use crate::ast::lexer::Token;
3use crate::ast::utils::whitespace;
4use crate::ast::{DatexExpression, DatexParserTrait};
5
6use chumsky::prelude::*;
7
8pub fn map<'a>(
9 key: impl DatexParserTrait<'a>,
10 expression: impl DatexParserTrait<'a>,
11) -> impl DatexParserTrait<'a> {
12 key.then_ignore(just(Token::Colon).padded_by(whitespace()))
13 .then(expression.clone())
14 .separated_by(just(Token::Comma).padded_by(whitespace()))
15 .at_least(0)
16 .allow_trailing()
17 .collect()
18 .padded_by(whitespace())
19 .delimited_by(just(Token::LeftCurly), just(Token::RightCurly))
20 .map(DatexExpression::Map)
21 .labelled(Pattern::Custom("map"))
22 .as_context()
23}