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}