sipha_pratt/
precedence.rs

1//! Operator precedence types.
2
3use std::ops::{Add, AddAssign};
4
5/// Operator precedence wrapper.
6///
7/// Higher values indicate higher precedence. Operators with higher precedence
8/// bind more tightly than those with lower precedence.
9#[derive(Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
10#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
11pub struct Precedence(pub u8);
12
13impl Add for Precedence {
14    type Output = Precedence;
15
16    fn add(self, rhs: Precedence) -> Self::Output {
17        Precedence(self.0.saturating_add(rhs.0))
18    }
19}
20
21impl AddAssign for Precedence {
22    fn add_assign(&mut self, rhs: Precedence) {
23        *self = *self + rhs;
24    }
25}