@@ -78,33 +78,36 @@ object OptionalIntPropertySerializer : IPropertyValueSerializer<Int?> {
78
78
}
79
79
}
80
80
81
+ abstract class EnumSerializer {
82
+ protected fun serializeEnumMember (id : String , name : String ) = " $id /$name "
83
+ protected fun deserializeEnumMemberId (serialized : String? ) = serialized?.substringBefore(' /' )
84
+ }
85
+
81
86
class MandatoryEnumSerializer <E : Enum <* >>(
82
87
private val memberIdOf : (E ) -> String ,
83
88
private val fromMemberId : (String? ) -> E
84
- ) : IPropertyValueSerializer<E> {
89
+ ) : EnumSerializer(), IPropertyValueSerializer<E> {
85
90
86
91
override fun serialize (value : E ): String {
87
- return memberIdOf(value) + " / " + value.name
92
+ return serializeEnumMember( memberIdOf(value), value.name)
88
93
}
89
94
90
95
override fun deserialize (serialized : String? ): E {
91
- val id = serialized?.substringBefore(' /' )
92
- return fromMemberId(id)
96
+ return fromMemberId(deserializeEnumMemberId(serialized))
93
97
}
94
98
}
95
99
96
100
class OptionalEnumSerializer <E : Enum <* >>(
97
101
private val memberIdOf : (E ) -> String ,
98
102
private val fromMemberId : (String ) -> E
99
- ) : IPropertyValueSerializer<E?> {
103
+ ) : EnumSerializer(), IPropertyValueSerializer<E?> {
100
104
101
105
override fun serialize (value : E ? ): String? {
102
- return value?.let { memberIdOf(it) + " / " + it.name}
106
+ return value?.let { serializeEnumMember( memberIdOf(it), it.name) }
103
107
}
104
108
105
109
override fun deserialize (serialized : String? ): E ? {
106
- val id = serialized?.substringBefore(' /' )
107
- return id?.let { fromMemberId(it) }
110
+ return deserializeEnumMemberId(serialized)?.let { fromMemberId(it) }
108
111
}
109
112
}
110
113
0 commit comments