func setCtxVar()

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
}