Skip to main content

elm_ast/
operator.rs

1/// The associativity of an infix operator.
2#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
3#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
4pub enum InfixDirection {
5    Left,
6    Right,
7    Non,
8}
9
10/// Operator precedence (0–9 in Elm).
11pub type Precedence = u8;
12
13/// An infix operator declaration.
14///
15/// Corresponds to: `infix left 6 (+) = add`
16#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
17#[derive(Clone, Debug, PartialEq, Eq)]
18pub struct InfixDeclaration {
19    /// The operator symbol, e.g. `+`
20    pub operator: String,
21    /// The function it desugars to, e.g. `add`
22    pub function: String,
23    /// Associativity direction.
24    pub direction: InfixDirection,
25    /// Precedence level (0–9).
26    pub precedence: Precedence,
27}