Skip to main content

oxilean_codegen/scala_backend/
scalaenum_traits.rs

1//! # ScalaEnum - Trait Implementations
2//!
3//! This module contains trait implementations for `ScalaEnum`.
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::ScalaEnum;
14use std::fmt;
15
16impl fmt::Display for ScalaEnum {
17    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
18        write!(f, "enum {}", self.name)?;
19        if !self.type_params.is_empty() {
20            write!(f, "[")?;
21            for (i, tp) in self.type_params.iter().enumerate() {
22                if i > 0 {
23                    write!(f, ", ")?;
24                }
25                write!(f, "{}", tp)?;
26            }
27            write!(f, "]")?;
28        }
29        if !self.extends_list.is_empty() {
30            write!(f, " extends {}", self.extends_list[0])?;
31            for e in &self.extends_list[1..] {
32                write!(f, " with {}", e)?;
33            }
34        }
35        write!(f, ":")?;
36        let mut i = 0;
37        while i < self.cases.len() {
38            let case = &self.cases[i];
39            if case.fields.is_empty() {
40                let mut j = i;
41                let mut simple_names = vec![case.name.clone()];
42                while j + 1 < self.cases.len() && self.cases[j + 1].fields.is_empty() {
43                    j += 1;
44                    simple_names.push(self.cases[j].name.clone());
45                }
46                write!(f, "\n  case {}", simple_names.join(", "))?;
47                i = j + 1;
48            } else {
49                write!(f, "\n  case {}(", case.name)?;
50                for (k, field) in case.fields.iter().enumerate() {
51                    if k > 0 {
52                        write!(f, ", ")?;
53                    }
54                    write!(f, "{}", field)?;
55                }
56                write!(f, ")")?;
57                i += 1;
58            }
59        }
60        Ok(())
61    }
62}