File tree 1 file changed +12
-0
lines changed
shared/src/main/scala/io/kaitai/struct/format
1 file changed +12
-0
lines changed Original file line number Diff line number Diff line change 1
1
package io .kaitai .struct .format
2
2
3
+ import io .kaitai .struct .problems .KSYParseError
4
+
5
+ import scala .collection .mutable
6
+
3
7
case class EnumSpec (map : Map [Long , EnumValueSpec ]) {
4
8
var name = List [String ]()
5
9
@@ -19,10 +23,18 @@ case class EnumSpec(map: Map[Long, EnumValueSpec]) {
19
23
object EnumSpec {
20
24
def fromYaml (src : Any , path : List [String ]): EnumSpec = {
21
25
val srcMap = ParseUtils .asMap(src, path)
26
+ val memberNameMap = mutable.Map [String , Long ]()
22
27
EnumSpec (srcMap.map { case (id, desc) =>
23
28
val idLong = ParseUtils .asLong(id, path)
24
29
val value = EnumValueSpec .fromYaml(desc, path ++ List (idLong.toString))
25
30
31
+ memberNameMap.get(value.name).foreach { (prevIdLong) =>
32
+ throw KSYParseError .withText(
33
+ s " duplicate enum member ID: ' ${value.name}', previously defined at / ${(path ++ List (prevIdLong.toString)).mkString(" /" )}" ,
34
+ path ++ List (idLong.toString)
35
+ )
36
+ }
37
+ memberNameMap.put(value.name, idLong)
26
38
idLong -> value
27
39
})
28
40
}
You can’t perform that action at this time.
0 commit comments