oxilean_codegen/scala_backend/
scalaenum_traits.rs1use 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}