Uberto Barbini
10/10/2021, 4:20 PMobject JTitleType : JStringRepresentable<TitleType>() {
override val cons: (String) -> TitleType = ???
override val render: (TitleType) -> String = TitleType::label
}
Razvan
10/10/2021, 4:36 PMenum class TitleType(val label: String) {
Movie("movie"), Series("series"), Episoode("episode");
companion object {
fun fromLabel(label: String) = values().firstOrNull { it.label == label}
}
}
but returns a null able type and JStringRepresetable requires an Any… well i could make it throw instead (although I would prefer null) but that does not fix everything still can see to write the JTitleRequest
type
to use it….
That would be somethig like:
data class TitleRequest(
val id: String,
val type: TitleType?
)
enum class TitleType(val label: String) {
Movie("movie"), Series("series"), Episoode("episode");
companion object {
fun fromLabel(label: String) = values().first { it.label == label}
}
}
object JTitleType : JStringRepresentable<TitleType>() {
override val cons: (String) -> TitleType = ::fromLabel
override val render: (TitleType) -> String = TitleType::label
}
object JTitleRequest : JAny<TitleRequest>() {
private val id by str(TitleRequest::id)
private val type by str(???)
override fun JsonNodeObject.deserializeOrThrow(): TitleRequest =
TitleRequest(
id = +id,
type = TitleType.fromLabel(+type)
)
}
Uberto Barbini
10/10/2021, 7:24 PMUberto Barbini
10/10/2021, 7:28 PMdata class TitleRequest(
val id: String,
val type: TitleType?
)
enum class TitleType(val label: String) {
Movie("movie"), Series("series"), Episoode("episode");
companion object {
fun fromLabel(label: String) = values().first { it.label == label}
}
}
object JTitleType : JStringRepresentable<TitleType>() {
override val cons: (String) -> TitleType = ::fromLabel
override val render: (TitleType) -> String = TitleType::label
}
object JTitleRequest : JAny<TitleRequest>() {
private val id by str(TitleRequest::id)
private val type by str(TitleRequest::type)
override fun JsonNodeObject.deserializeOrThrow(): TitleRequest =
TitleRequest(
id = +id,
type = +type
)
}
Uberto Barbini
10/10/2021, 7:28 PMRazvan
10/10/2021, 8:23 PMprivate val type by str(TitleRequest::type)
doesn't do the job
@Test
fun aTest() {
val inValue = TitleRequest("tom", TitleType.Movie)
val json = JTitleRequest.toPrettyJson(inValue)
json shouldBe """
{
"id": "tom",
"type": "movie"
}
""".trimIndent()
}
fails as it encodes the Enum name Movies
instead the label movie
Razvan
10/10/2021, 8:41 PMexpected:<"{
"id": "tom",
"type": "movie"
}"> but was:<"{
"id": "tom",
"type": "Movie"
}">