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}
    }
}JTitleRequesttypedata 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)@Test
    fun aTest() {
        val inValue = TitleRequest("tom", TitleType.Movie)
        val json = JTitleRequest.toPrettyJson(inValue)
        json shouldBe """
            {
              "id": "tom",
              "type": "movie"
            }
        """.trimIndent()
    }MoviesmovieRazvan
10/10/2021, 8:41 PMexpected:<"{
  "id": "tom",
  "type": "movie"
}"> but was:<"{
  "id": "tom",
  "type": "Movie"
}">