github.com/criteo-forks/consul@v1.4.5-criteonogrpc/lib/uuid.go (about)

     1  package lib
     2  
     3  import (
     4  	"github.com/hashicorp/go-uuid"
     5  )
     6  
     7  // UUIDCheckFunc should determine whether the given UUID is actually
     8  // unique and allowed to be used
     9  type UUIDCheckFunc func(string) (bool, error)
    10  
    11  func GenerateUUID(checkFn UUIDCheckFunc) (string, error) {
    12  	for {
    13  		id, err := uuid.GenerateUUID()
    14  		if err != nil {
    15  			return "", err
    16  		}
    17  
    18  		if checkFn == nil {
    19  			return id, nil
    20  		}
    21  
    22  		if ok, err := checkFn(id); err != nil {
    23  			return "", err
    24  		} else if ok {
    25  			return id, nil
    26  		}
    27  	}
    28  }