Skip to content

feat: AllowEmpty option to keep empty env values instead of defaults#421

Open
c-tonneslan wants to merge 2 commits into
caarlos0:mainfrom
c-tonneslan:feat/allow-empty-option
Open

feat: AllowEmpty option to keep empty env values instead of defaults#421
c-tonneslan wants to merge 2 commits into
caarlos0:mainfrom
c-tonneslan:feat/allow-empty-option

Conversation

@c-tonneslan

Copy link
Copy Markdown

Closes #406.

Today an explicitly-set-but-empty env variable falls back to envDefault. That's useful for the common shell mistake of leaving an unset variable as "", but it also means callers can't ever clear out a string via the environment.

Added an `AllowEmpty` option that disables the empty-falls-back-to-default hop:

```go
env.ParseWithOptions(&cfg, env.Options{
Environment: map[string]string{"STR": ""},
AllowEmpty: true,
})
```

With `AllowEmpty: false` (the default) behaviour is unchanged, and the "env var is unset" path still falls back to the default in either mode. Test added that covers all three combinations.

…sOnly

SetDefaultsForZeroValuesOnly is about defaults: an env var that's
actually set should still take precedence over an already-populated
struct field. The previous check treated any non-empty value the same
way, so an explicit override via the environment was silently dropped
the moment the destination field was non-zero.

Plumb the isDefault flag (which getOr already computes) out of get()
and only skip setting when the value came from a default. Real env
values keep flowing through.

Fixes caarlos0#364.

Signed-off-by: Charlie Tonneslan <cst0520@gmail.com>
Today an explicitly-set-but-empty env variable falls back to
envDefault. That's useful for the common shell mistake of leaving an
unset variable as "", but it also means callers can't ever clear out
a string via the environment.

Add an AllowEmpty option that disables the empty-falls-back-to-default
hop. Default behaviour is unchanged.

Closes caarlos0#406

Signed-off-by: Charlie Tonneslan <cst0520@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Option to allow setting empty values

1 participant