charleskorn / kaml

YAML support for kotlinx.serialization
Apache License 2.0
519 stars 50 forks source link

Content-based polymorphism #612

Open Eisenwave opened 1 month ago

Eisenwave commented 1 month ago

Describe the problem you'd like to solve

I have a YAML configuration that contains values which can be strings or objects such as:

# monolingual value
key1: File
# multilingual value
key2:
  en_US: File
  de_DE: Datei

I couldn't find any way to deserialize this into something like MonolingualString or MultilingualString depending on the structure (more specifics at https://stackoverflow.com/q/78966200/5740428). I would have to specify the type in a !<type> or type: tag, and that's unnecessary.

Besides this use case, one could easily imagine providing RGB colors either as "#ff0000" hex code strings or { r: 255, g: 0, b: 0 } objects.

Describe the solution you'd like

Something similar to https://github.com/Kotlin/kotlinx.serialization/blob/master/docs/json.md#content-based-polymorphic-deserialization, i.e. content-based polymorphism.

Describe alternatives you've considered

No response

Additional context

No response

charleskorn commented 1 month ago

Would what has been proposed in #607 be suitable for your use case?

Eisenwave commented 1 month ago

Yes, that seems sufficient.

sschuberth commented 3 weeks ago

Would what has been proposed in #607 be suitable for your use case?

I'm as well in need of a JsonContentPolymorphicSerializer equivalent.

@charleskorn could you please find the time to move forward with the review of the related PRs by @Jojo4GH?