Open dbofmmbt opened 3 years ago
I want to mention one alternative using serde_with::with_prefix
. It's a bit less boilerplate than applying rename
on every field.
It is not a replacement for having it integrated directly into envy
though.
serde_with::with_prefix
solutionWorth noting that flatten
doesnt work with non-String datatypes. c.f. https://github.com/softprops/envy/issues/26
I would be really interested in such a feature and have even considered implementing on my own. But if this crate could do it for me, I would really appreciate it.
Slightly more context:
I'd be interested in a solution which doesn't require any #[serde(rename)]
or #[serde(renameflatten]
because I want to declare a config struct (with sub structs) and be able to choose whether I want to deserialize it from toml, json or env. But when using a structured format like toml or json I want to preserve the nesting structure.
Using __
as separator would be fine for me, but there should probably be an API where you configure a deserializer to use any separator you'd like.
fwiw, I collated a list of similar Rust crates, trying to find ones which do nested structs, at https://github.com/Xuanwo/serde-env/discussions/54
💡 Feature description
In config-rs, there's an option to define a
separator
which allow users to structure their env vars. I think an example will illustrate better:If we define a separator, let's say "", we could create this
Config
by setting `DATABASENAME=foo`.Would it be possible and desirable for
envy
to include it?Alternatives
It is possible to get the same behavior using the
flatten
attribute from serde (as noticed in #15). The drawback is that it demands a good amount of boilerplate because we would have to serde'srename
every field in the nested struct if we wanted to use this separator idea.