@@ -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+
8186class 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
96100class 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