in config/internal/config/context.go [88:121]
func setCtxVar(
ctx context.Context,
ktx *koanf.Koanf,
k *CtxKey,
v *ctxVar,
) (context.Context, error) {
path := newCtxKeyPath(v)
var value any = nil
isAvailable := ktx.Exists(path)
if v.required && !isAvailable {
return ctx, newUnavailableConfigError(&path)
} else if !isAvailable {
if envVar, ok := envVars[*k]; ok {
ktx.Set(path, envVar.defaultValue)
} else {
return ctx, newIllegalConfigStateError(&path)
}
}
switch v.typ {
case TYPE_STRING:
value = ktx.String(path)
case TYPE_BOOLEAN:
value = ktx.Bool(path)
case TYPE_LIST_STRING:
value = ktx.Strings(path)
default:
return ctx, newInvalidConfigValueTypeError(&path)
}
return context.WithValue(ctx, k.ToCtxKey(), value), nil
}