Skip to content

Commit dcc6880

Browse files
committed
refactor(model-api-gen): deduplicated code in (Mandatory|Optional)EnumSerializer
1 parent d2a54af commit dcc6880

File tree

1 file changed

+11
-8
lines changed

1 file changed

+11
-8
lines changed

model-api-gen-runtime/src/commonMain/kotlin/org/modelix/metamodel/IPropertyValueSerializer.kt

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -78,33 +78,36 @@ object OptionalIntPropertySerializer : IPropertyValueSerializer<Int?> {
7878
}
7979
}
8080

81+
abstract class EnumSerializer {
82+
protected fun serializeEnumMember(id: String, name: String) = "$id/$name"
83+
protected fun deserializeEnumMemberId(serialized: String?) = serialized?.substringBefore('/')
84+
}
85+
8186
class MandatoryEnumSerializer<E : Enum<*>>(
8287
private val memberIdOf: (E) -> String,
8388
private val fromMemberId: (String?) -> E
84-
) : IPropertyValueSerializer<E> {
89+
) : EnumSerializer(), IPropertyValueSerializer<E> {
8590

8691
override fun serialize(value: E): String {
87-
return memberIdOf(value) + "/" + value.name
92+
return serializeEnumMember(memberIdOf(value), value.name)
8893
}
8994

9095
override fun deserialize(serialized: String?): E {
91-
val id = serialized?.substringBefore('/')
92-
return fromMemberId(id)
96+
return fromMemberId(deserializeEnumMemberId(serialized))
9397
}
9498
}
9599

96100
class OptionalEnumSerializer<E : Enum<*>>(
97101
private val memberIdOf: (E) -> String,
98102
private val fromMemberId: (String) -> E
99-
) : IPropertyValueSerializer<E?> {
103+
) : EnumSerializer(), IPropertyValueSerializer<E?> {
100104

101105
override fun serialize(value: E?): String? {
102-
return value?.let { memberIdOf(it) + "/" + it.name}
106+
return value?.let { serializeEnumMember(memberIdOf(it), it.name) }
103107
}
104108

105109
override fun deserialize(serialized: String?): E? {
106-
val id = serialized?.substringBefore('/')
107-
return id?.let { fromMemberId(it) }
110+
return deserializeEnumMemberId(serialized)?.let { fromMemberId(it) }
108111
}
109112
}
110113

0 commit comments

Comments
 (0)