oxilean_codegen/rust_target_backend/
rustpattern_traits.rs1use 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}