mirror of https://github.com/hashicorp/consul
29 lines
495 B
Go
29 lines
495 B
Go
|
package lib
|
||
|
|
||
|
import (
|
||
|
"github.com/hashicorp/go-uuid"
|
||
|
)
|
||
|
|
||
|
// UUIDCheckFunc should determine whether the given UUID is actually
|
||
|
// unique and allowed to be used
|
||
|
type UUIDCheckFunc func(string) (bool, error)
|
||
|
|
||
|
func GenerateUUID(checkFn UUIDCheckFunc) (string, error) {
|
||
|
for {
|
||
|
id, err := uuid.GenerateUUID()
|
||
|
if err != nil {
|
||
|
return "", err
|
||
|
}
|
||
|
|
||
|
if checkFn == nil {
|
||
|
return id, nil
|
||
|
}
|
||
|
|
||
|
if ok, err := checkFn(id); err != nil {
|
||
|
return "", err
|
||
|
} else if ok {
|
||
|
return id, nil
|
||
|
}
|
||
|
}
|
||
|
}
|