-
Notifications
You must be signed in to change notification settings - Fork 244
/
Definition.scala
111 lines (95 loc) · 3.05 KB
/
Definition.scala
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
package com.twitter.scrooge.ast
import com.twitter.scrooge.backend.ServiceOption
sealed abstract class Definition extends DefinitionNode {
val sid: SimpleID
}
case class ConstDefinition(
sid: SimpleID,
fieldType: FieldType,
value: RHS,
docstring: Option[String])
extends Definition
case class Typedef(
sid: SimpleID,
fieldType: FieldType,
referentAnnotations: Map[String, String] = Map.empty,
aliasAnnotations: Map[String, String] = Map.empty)
extends Definition
case class Enum(
sid: SimpleID,
values: Seq[EnumField],
docstring: Option[String],
annotations: Map[String, String] = Map.empty)
extends Definition
case class EnumField(
sid: SimpleID,
value: Int,
docstring: Option[String],
annotations: Map[String, String] = Map.empty)
extends Definition
case class Senum(sid: SimpleID, values: Seq[String], annotations: Map[String, String] = Map.empty)
extends Definition
sealed abstract class StructLike extends Definition {
val originalName: String
val fields: Seq[Field]
val docstring: Option[String]
val annotations: Map[String, String]
def withAnnotations(newAnnotations: Map[String, String]): StructLike =
this match {
case s: Struct => s.copy(annotations = annotations ++ newAnnotations)
case u: Union => u.copy(annotations = annotations ++ newAnnotations)
case e: Exception_ => e.copy(annotations = annotations ++ newAnnotations)
// FunctionResult and FunctionArgs don't keep track of annotations
case r: FunctionResult => r
case a: FunctionArgs => a
}
}
case class Struct(
sid: SimpleID,
originalName: String,
fields: Seq[Field],
docstring: Option[String],
annotations: Map[String, String] = Map.empty)
extends StructLike
case class Union(
sid: SimpleID,
originalName: String,
fields: Seq[Field],
docstring: Option[String],
annotations: Map[String, String] = Map.empty)
extends StructLike
case class FunctionArgs(sid: SimpleID, originalName: String, fields: Seq[Field])
extends StructLike {
override val docstring: Option[String] = None
override val annotations: Map[String, String] = Map.empty
}
case class FunctionResult(
sid: SimpleID,
originalName: String,
success: Option[Field], // None for void methods
exceptions: Seq[Field])
extends StructLike {
override val fields: Seq[Field] = success.toList ++ exceptions
override val docstring: Option[String] = None
override val annotations: Map[String, String] = Map.empty
}
case class Exception_(
sid: SimpleID,
originalName: String,
fields: Seq[Field],
docstring: Option[String],
annotations: Map[String, String] = Map.empty)
extends StructLike
case class Service(
sid: SimpleID,
parent: Option[ServiceParent],
functions: Seq[Function],
docstring: Option[String],
annotations: Map[String, String] = Map.empty,
options: Set[ServiceOption] = Set.empty)
extends Definition
/**
* Identifier for the parent service.
* @param filename Set if the parent service is imported from another file
*/
case class ServiceParent(sid: SimpleID, filename: Option[SimpleID])