func correctValues(flags, choices []string) bool {
	choicesMap := make(map[string]string)
	for _, value := range choices {
		choicesMap[value] = ""
	}
	for _, value := range flags {
		if _, exists := choicesMap[value]; !exists {
			return false
		}
	}
	return true
}
correctValues checks whether or not all values of a slice are present in the choices slice
package main
import (
	"os"
	"emperror.dev/errors"
	"github.com/spf13/viper"
	internalVault "github.com/banzaicloud/bank-vaults/internal/vault"
	"github.com/banzaicloud/bank-vaults/pkg/kv"
	"github.com/banzaicloud/bank-vaults/pkg/kv/alibabakms"
	"github.com/banzaicloud/bank-vaults/pkg/kv/alibabaoss"
	"github.com/banzaicloud/bank-vaults/pkg/kv/awskms"
	"github.com/banzaicloud/bank-vaults/pkg/kv/azurekv"
	"github.com/banzaicloud/bank-vaults/pkg/kv/dev"
	"github.com/banzaicloud/bank-vaults/pkg/kv/file"
	"github.com/banzaicloud/bank-vaults/pkg/kv/gckms"
	"github.com/banzaicloud/bank-vaults/pkg/kv/gcs"
	"github.com/banzaicloud/bank-vaults/pkg/kv/hsm"
	"github.com/banzaicloud/bank-vaults/pkg/kv/k8s"
	"github.com/banzaicloud/bank-vaults/pkg/kv/multi"
	"github.com/banzaicloud/bank-vaults/pkg/kv/s3"
	kvvault "github.com/banzaicloud/bank-vaults/pkg/kv/vault"
)
func vaultConfigForConfig(c *viper.Viper) internalVault.Config {
	return internalVault.Config{
		SecretShares:    c.GetInt(cfgSecretShares),
		SecretThreshold: c.GetInt(cfgSecretThreshold),
		InitRootToken:  c.GetString(cfgInitRootToken),
		StoreRootToken: c.GetBool(cfgStoreRootToken),
		PreFlightChecks: c.GetBool(cfgPreFlightChecks),
	}
}
func all(flags []string, target string) bool {
	for _, value := range flags {
		if value != target {
			return false
		}
	}
	return true
}