Kotlin / kotlinx.serialization

Kotlin multiplatform / multi-format serialization
Apache License 2.0
5.4k stars 620 forks source link

Properties should support String encoding/decoding #1152

Open sandwwraith opened 4 years ago

sandwwraith commented 4 years ago

What is your use-case and why do you need this feature?

Currently, Properties allow to parse Map<String, Any> object to a Kotlin class. Usually, such properties are loaded from configuration file. While we do not have multiplatform IO or files, we still can parse properties from a string contents of such file, since parsing line breaks/separators/etc is an additional amount of work.

Originally reported here: https://youtrack.jetbrains.com/issue/KT-42716

Note: it is relatively easy task though with common collection operations.

daniel-jasinski commented 4 years ago

I think it would be a good intermediate step to provide API for parsing Map<String,String> before moving to full File/IO support. At the moment I have to handle this case "manually".

RaphaelTarita commented 3 years ago

Hi, here's the original creator of the YouTrack issue. Thank you very much for taking care of this. While work was actually done here, I was also working on a personal implementation of this functionality. However, I was not aware of the fact that there already exist ways of resolving the required primitive types of the model classes in the core lib. You may imagine that I had quite a struggle trying to implement the type resolving on my own. Anyway, I'm now somewhat relieved to see that I don't have to use my own version for this.

Apparently, the current issue is to get from the Map<String, String> to an actual properties format string (and vice versa). If it is any help, here's what I've tried; I've written this quite a while ago. But as far as I can tell, even this part has already been taken care of, which is wonderful.

Can we expect this feature to appear in a new version in the near future?

PS, a few notes on the gist:

hfhbd commented 9 months ago

I would love to see this support:

  1. to create a properties files from multiplatform targets, mostly (node) JS
  2. the Java implementation always stores the current date as comment which is useless and annoying in tests