Skip to main content

oxilean_codegen/idris_backend/
idrispattern_traits.rs

1//! # IdrisPattern - Trait Implementations
2//!
3//! This module contains trait implementations for `IdrisPattern`.
4//!
5//! ## Implemented Traits
6//!
7//! - `Display`
8//!
9//! 🤖 Generated with [SplitRS](https://github.com/cool-japan/splitrs)
10
11use super::types::IdrisPattern;
12use std::fmt;
13
14impl fmt::Display for IdrisPattern {
15    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
16        match self {
17            IdrisPattern::Wildcard => write!(f, "_"),
18            IdrisPattern::Var(x) => write!(f, "{}", x),
19            IdrisPattern::Lit(l) => write!(f, "{}", l),
20            IdrisPattern::Nil => write!(f, "[]"),
21            IdrisPattern::Tuple(ps) => {
22                write!(f, "(")?;
23                for (i, p) in ps.iter().enumerate() {
24                    if i > 0 {
25                        write!(f, ", ")?;
26                    }
27                    write!(f, "{}", p)?;
28                }
29                write!(f, ")")
30            }
31            IdrisPattern::Cons(h, t) => write!(f, "{} :: {}", h, t),
32            IdrisPattern::As(n, p) => write!(f, "{}@{}", n, p),
33            IdrisPattern::Implicit(p) => write!(f, "{{{}}}", p),
34            IdrisPattern::Dot(e) => write!(f, ".{}", e),
35            IdrisPattern::Con(c, args) => {
36                if args.is_empty() {
37                    write!(f, "{}", c)
38                } else {
39                    write!(f, "({}", c)?;
40                    for a in args {
41                        write!(f, " {}", a)?;
42                    }
43                    write!(f, ")")
44                }
45            }
46        }
47    }
48}