oxilean_codegen/scala_backend/
scaladecl_traits.rs1use crate::lcnf::*;
12
13use super::types::ScalaDecl;
14use std::fmt;
15
16impl fmt::Display for ScalaDecl {
17 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
18 match self {
19 ScalaDecl::CaseClass(c) => write!(f, "{}", c),
20 ScalaDecl::Trait(t) => write!(f, "{}", t),
21 ScalaDecl::Enum(e) => write!(f, "{}", e),
22 ScalaDecl::Object(o) => write!(f, "{}", o),
23 ScalaDecl::Class(c) => write!(f, "{}", c),
24 ScalaDecl::Method(m) => write!(f, "{}", m),
25 ScalaDecl::Val(name, ty, expr) => {
26 write!(f, "val {}: {} = {}", name, ty, expr)
27 }
28 ScalaDecl::TypeAlias(name, params, ty) => {
29 write!(f, "type {}", name)?;
30 if !params.is_empty() {
31 write!(f, "[")?;
32 for (i, p) in params.iter().enumerate() {
33 if i > 0 {
34 write!(f, ", ")?;
35 }
36 write!(f, "{}", p)?;
37 }
38 write!(f, "]")?;
39 }
40 write!(f, " = {}", ty)
41 }
42 ScalaDecl::OpaqueType(name, params, ty) => {
43 write!(f, "opaque type {}", name)?;
44 if !params.is_empty() {
45 write!(f, "[")?;
46 for (i, p) in params.iter().enumerate() {
47 if i > 0 {
48 write!(f, ", ")?;
49 }
50 write!(f, "{}", p)?;
51 }
52 write!(f, "]")?;
53 }
54 write!(f, " = {}", ty)
55 }
56 ScalaDecl::Extension(ty, methods) => {
57 write!(f, "extension (x: {})", ty)?;
58 write!(f, " {{")?;
59 for m in methods {
60 write!(f, "\n {}", m)?;
61 }
62 write!(f, "\n}}")
63 }
64 ScalaDecl::Given(name, ty, methods) => {
65 write!(f, "given {}: {} with {{", name, ty)?;
66 for m in methods {
67 write!(f, "\n {}", m)?;
68 }
69 write!(f, "\n}}")
70 }
71 ScalaDecl::Comment(c) => write!(f, "// {}", c),
72 ScalaDecl::RawLine(l) => write!(f, "{}", l),
73 }
74 }
75}