Skip to main content

oxilean_codegen/scala_backend/
scalapattern_traits.rs

1//! # ScalaPattern - Trait Implementations
2//!
3//! This module contains trait implementations for `ScalaPattern`.
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::ScalaPattern;
14use std::fmt;
15
16impl fmt::Display for ScalaPattern {
17    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
18        match self {
19            ScalaPattern::Wildcard => write!(f, "_"),
20            ScalaPattern::Var(v) => write!(f, "{}", v),
21            ScalaPattern::Lit(lit) => write!(f, "{}", lit),
22            ScalaPattern::Typed(name, ty) => write!(f, "{}: {}", name, ty),
23            ScalaPattern::Tuple(pats) => {
24                write!(f, "(")?;
25                for (i, p) in pats.iter().enumerate() {
26                    if i > 0 {
27                        write!(f, ", ")?;
28                    }
29                    write!(f, "{}", p)?;
30                }
31                write!(f, ")")
32            }
33            ScalaPattern::Extractor(name, args) => {
34                write!(f, "{}", name)?;
35                if !args.is_empty() {
36                    write!(f, "(")?;
37                    for (i, a) in args.iter().enumerate() {
38                        if i > 0 {
39                            write!(f, ", ")?;
40                        }
41                        write!(f, "{}", a)?;
42                    }
43                    write!(f, ")")?;
44                }
45                Ok(())
46            }
47            ScalaPattern::Alt(pats) => {
48                for (i, p) in pats.iter().enumerate() {
49                    if i > 0 {
50                        write!(f, " | ")?;
51                    }
52                    write!(f, "{}", p)?;
53                }
54                Ok(())
55            }
56        }
57    }
58}