datex_core/ast/
map.rs

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}