diff --git a/main.go b/main.go index 3a4ef3f..0ab248e 100644 --- a/main.go +++ b/main.go @@ -71,6 +71,22 @@ func getDetailsFromEnv[T any](key string, defaultValue T) T { return any(boolVal).(T) } return any(envutil.GetBool(key, v)).(T) + case float64: + // envutil has no GetFloat; handle the GMP_ prefixed and plain keys + // directly. Previously float64 env values (CIRCUIT_FAILURE_RATIO, + // CIRCUIT_BACKOFF_MULTIPLIER, RETRY_BUDGET_TOKENS_PER_SEC) fell into + // default and were silently impossible to configure. + if val, ok := os.LookupEnv(prefixedKey); ok { + if f, err := strconv.ParseFloat(val, 64); err == nil { + return any(f).(T) + } + } + if val, ok := os.LookupEnv(key); ok { + if f, err := strconv.ParseFloat(val, 64); err == nil { + return any(f).(T) + } + } + return defaultValue default: return defaultValue } diff --git a/main_test.go b/main_test.go index 4f75e9d..589ee94 100644 --- a/main_test.go +++ b/main_test.go @@ -154,6 +154,8 @@ func (suite *Tests) Test_getDetailsFromEnv() { {"default", "envValue", "string value", "TEST_STRING", "envValue"}, {0, 123, "int value", "TEST_INT", "123"}, {false, true, "bool value", "TEST_BOOL", "true"}, + {0.5, 0.25, "float value", "TEST_FLOAT", "0.25"}, + {0.5, 0.5, "float default on malformed value", "TEST_FLOAT_BAD", "not-a-number"}, {"default", "default", "default value", "NON_EXISTENT", ""}, }