2023-04-10 15:36:59 +00:00
|
|
|
// Copyright (c) HashiCorp, Inc.
|
|
|
|
// SPDX-License-Identifier: MPL-2.0
|
|
|
|
|
2023-02-13 21:14:59 +00:00
|
|
|
package helper
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
"strings"
|
|
|
|
|
|
|
|
"github.com/hashicorp/go-multierror"
|
|
|
|
)
|
|
|
|
|
|
|
|
// MergeMultierrorWarnings takes warnings and merges them into a returnable
|
|
|
|
// string. This method is used to return API and CLI errors.
|
|
|
|
func MergeMultierrorWarnings(errs ...error) string {
|
|
|
|
if len(errs) == 0 {
|
|
|
|
return ""
|
|
|
|
}
|
|
|
|
|
|
|
|
var mErr multierror.Error
|
|
|
|
_ = multierror.Append(&mErr, errs...)
|
|
|
|
mErr.ErrorFormat = warningsFormatter
|
|
|
|
|
|
|
|
return mErr.Error()
|
|
|
|
}
|
|
|
|
|
|
|
|
// warningsFormatter is used to format warnings.
|
|
|
|
func warningsFormatter(es []error) string {
|
|
|
|
sb := strings.Builder{}
|
|
|
|
|
|
|
|
switch len(es) {
|
|
|
|
case 0:
|
|
|
|
return ""
|
|
|
|
case 1:
|
|
|
|
sb.WriteString("1 warning:\n")
|
|
|
|
default:
|
|
|
|
sb.WriteString(fmt.Sprintf("%d warnings:\n", len(es)))
|
|
|
|
}
|
|
|
|
|
|
|
|
for _, err := range es {
|
|
|
|
sb.WriteString(fmt.Sprintf("\n* %s", strings.TrimSpace(err.Error())))
|
|
|
|
}
|
|
|
|
|
|
|
|
return sb.String()
|
|
|
|
}
|