cristalhq / aconfig

Simple, useful and opinionated config loader.
MIT License
551 stars 33 forks source link

Deprecations #115

Open jakubdyszkiewicz opened 2 years ago

jakubdyszkiewicz commented 2 years ago

It's not common to deprecate fields to remove them in the next release or move them to some other place. It would be nice to have support for it in aconfig. Maybe something like

type MyConfig struct {
    Hostname int `default:"xyz.internal" usage:"hostname" deprecated:"this will be gone in the next release, the internet is a dangerous place, localhost will be a default"`
}

and have a function to collect all deprecations if the value is set.

cristaloleg commented 2 years ago

Nice one, can you clarify this part:

a function to collect all deprecations if the value is set

?

jakubdyszkiewicz commented 2 years ago

Sure, I'd like to collect all the deprecations in something like

type Deprecation struct {
  Flag string
  Env string
  YamlKey string
  Message string
}

So I can collect []Deprecation and print them for user. I want to bother the user with message only if they set (via env/flag/yaml) the deprecated config.

cristaloleg commented 2 years ago

Should this be enough? https://github.com/cristalhq/aconfig/blob/main/aconfig.go#L188

Basically you can iterate over all fields and these with .Deprecated == true are what you're looking for.

jakubdyszkiewicz commented 2 years ago

Ah, yes. That makes sense 👍