Skip to main content

oxilean_codegen/rust_target_backend/
rustpattern_traits.rs

1//! # RustPattern - Trait Implementations
2//!
3//! This module contains trait implementations for `RustPattern`.
4//!
5//! ## Implemented Traits
6//!
7//! - `Display`
8//!
9//! 🤖 Generated with [SplitRS](https://github.com/cool-japan/splitrs)
10
11use crate::lcnf::*;
12
13use super::types::RustPattern;
14use std::fmt;
15
16impl fmt::Display for RustPattern {
17    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
18        match self {
19            RustPattern::Wildcard => write!(f, "_"),
20            RustPattern::Var(name, mutable) => {
21                if *mutable {
22                    write!(f, "mut {}", name)
23                } else {
24                    write!(f, "{}", name)
25                }
26            }
27            RustPattern::Lit(lit) => write!(f, "{}", lit),
28            RustPattern::Tuple(pats) => {
29                write!(f, "(")?;
30                for (i, p) in pats.iter().enumerate() {
31                    if i > 0 {
32                        write!(f, ", ")?;
33                    }
34                    write!(f, "{}", p)?;
35                }
36                if pats.len() == 1 {
37                    write!(f, ",")?;
38                }
39                write!(f, ")")
40            }
41            RustPattern::Struct(name, fields) => {
42                write!(f, "{} {{", name)?;
43                for (i, (fname, fpat)) in fields.iter().enumerate() {
44                    if i > 0 {
45                        write!(f, ", ")?;
46                    }
47                    write!(f, "{}: {}", fname, fpat)?;
48                }
49                write!(f, "}}")
50            }
51            RustPattern::Enum(name, pats) => {
52                if pats.is_empty() {
53                    write!(f, "{}", name)
54                } else {
55                    write!(f, "{}(", name)?;
56                    for (i, p) in pats.iter().enumerate() {
57                        if i > 0 {
58                            write!(f, ", ")?;
59                        }
60                        write!(f, "{}", p)?;
61                    }
62                    write!(f, ")")
63                }
64            }
65            RustPattern::Ref(mutable, inner) => {
66                if *mutable {
67                    write!(f, "&mut {}", inner)
68                } else {
69                    write!(f, "&{}", inner)
70                }
71            }
72            RustPattern::Or(pats) => {
73                for (i, p) in pats.iter().enumerate() {
74                    if i > 0 {
75                        write!(f, " | ")?;
76                    }
77                    write!(f, "{}", p)?;
78                }
79                Ok(())
80            }
81            RustPattern::Range(lo, hi) => write!(f, "{}..={}", lo, hi),
82            RustPattern::Guard(pat, cond) => write!(f, "{} if {}", pat, cond),
83        }
84    }
85}