| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- // SPDX-FileCopyrightText: 2023 The Pion community <https://pion.ly>
- // SPDX-License-Identifier: MIT
- // Package util provides auxiliary functions internally used in webrtc package
- package util
- import (
- "errors"
- "strings"
- "github.com/pion/randutil"
- )
- const (
- runesAlpha = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
- )
- // Use global random generator to properly seed by crypto grade random.
- var globalMathRandomGenerator = randutil.NewMathRandomGenerator() // nolint:gochecknoglobals
- // MathRandAlpha generates a mathmatical random alphabet sequence of the requested length.
- func MathRandAlpha(n int) string {
- return globalMathRandomGenerator.GenerateString(n, runesAlpha)
- }
- // RandUint32 generates a mathmatical random uint32.
- func RandUint32() uint32 {
- return globalMathRandomGenerator.Uint32()
- }
- // FlattenErrs flattens multiple errors into one
- func FlattenErrs(errs []error) error {
- errs2 := []error{}
- for _, e := range errs {
- if e != nil {
- errs2 = append(errs2, e)
- }
- }
- if len(errs2) == 0 {
- return nil
- }
- return multiError(errs2)
- }
- type multiError []error //nolint:errname
- func (me multiError) Error() string {
- var errstrings []string
- for _, err := range me {
- if err != nil {
- errstrings = append(errstrings, err.Error())
- }
- }
- if len(errstrings) == 0 {
- return "multiError must contain multiple error but is empty"
- }
- return strings.Join(errstrings, "\n")
- }
- func (me multiError) Is(err error) bool {
- for _, e := range me {
- if errors.Is(e, err) {
- return true
- }
- if me2, ok := e.(multiError); ok { //nolint:errorlint
- if me2.Is(err) {
- return true
- }
- }
- }
- return false
- }
|