util/id: switch to default uuid package
Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
This commit is contained in:
		
							
								
								
									
										1
									
								
								go.mod
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								go.mod
									
									
									
									
									
								
							| @@ -6,7 +6,6 @@ require ( | |||||||
| 	dario.cat/mergo v1.0.1 | 	dario.cat/mergo v1.0.1 | ||||||
| 	github.com/DATA-DOG/go-sqlmock v1.5.2 | 	github.com/DATA-DOG/go-sqlmock v1.5.2 | ||||||
| 	github.com/KimMachineGun/automemlimit v0.7.0 | 	github.com/KimMachineGun/automemlimit v0.7.0 | ||||||
| 	github.com/ash3in/uuidv8 v1.2.0 |  | ||||||
| 	github.com/google/uuid v1.6.0 | 	github.com/google/uuid v1.6.0 | ||||||
| 	github.com/matoous/go-nanoid v1.5.1 | 	github.com/matoous/go-nanoid v1.5.1 | ||||||
| 	github.com/patrickmn/go-cache v2.1.0+incompatible | 	github.com/patrickmn/go-cache v2.1.0+incompatible | ||||||
|   | |||||||
							
								
								
									
										2
									
								
								go.sum
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								go.sum
									
									
									
									
									
								
							| @@ -4,8 +4,6 @@ github.com/DATA-DOG/go-sqlmock v1.5.2 h1:OcvFkGmslmlZibjAjaHm3L//6LiuBgolP7Oputl | |||||||
| github.com/DATA-DOG/go-sqlmock v1.5.2/go.mod h1:88MAG/4G7SMwSE3CeA0ZKzrT5CiOU3OJ+JlNzwDqpNU= | github.com/DATA-DOG/go-sqlmock v1.5.2/go.mod h1:88MAG/4G7SMwSE3CeA0ZKzrT5CiOU3OJ+JlNzwDqpNU= | ||||||
| github.com/KimMachineGun/automemlimit v0.7.0 h1:7G06p/dMSf7G8E6oq+f2uOPuVncFyIlDI/pBWK49u88= | github.com/KimMachineGun/automemlimit v0.7.0 h1:7G06p/dMSf7G8E6oq+f2uOPuVncFyIlDI/pBWK49u88= | ||||||
| github.com/KimMachineGun/automemlimit v0.7.0/go.mod h1:QZxpHaGOQoYvFhv/r4u3U0JTC2ZcOwbSr11UZF46UBM= | github.com/KimMachineGun/automemlimit v0.7.0/go.mod h1:QZxpHaGOQoYvFhv/r4u3U0JTC2ZcOwbSr11UZF46UBM= | ||||||
| github.com/ash3in/uuidv8 v1.2.0 h1:2oogGdtCPwaVtyvPPGin4TfZLtOGE5F+W++E880G6SI= |  | ||||||
| github.com/ash3in/uuidv8 v1.2.0/go.mod h1:BnU0wJBxnzdEKmVg4xckBkD+VZuecTFTUP3M0dWgyY4= |  | ||||||
| github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= | github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= | ||||||
| github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= | github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= | ||||||
| github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= | github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= | ||||||
|   | |||||||
| @@ -2,12 +2,8 @@ package id | |||||||
|  |  | ||||||
| import ( | import ( | ||||||
| 	"crypto/rand" | 	"crypto/rand" | ||||||
| 	"encoding/binary" |  | ||||||
| 	"errors" | 	"errors" | ||||||
| 	"fmt" |  | ||||||
| 	"time" |  | ||||||
|  |  | ||||||
| 	uuidv8 "github.com/ash3in/uuidv8" |  | ||||||
| 	"github.com/google/uuid" | 	"github.com/google/uuid" | ||||||
| 	nanoid "github.com/matoous/go-nanoid" | 	nanoid "github.com/matoous/go-nanoid" | ||||||
| ) | ) | ||||||
| @@ -25,6 +21,7 @@ type Type int | |||||||
| const ( | const ( | ||||||
| 	TypeUnspecified Type = iota | 	TypeUnspecified Type = iota | ||||||
| 	TypeNanoid | 	TypeNanoid | ||||||
|  | 	TypeUUIDv7 | ||||||
| 	TypeUUIDv8 | 	TypeUUIDv8 | ||||||
| ) | ) | ||||||
|  |  | ||||||
| @@ -58,14 +55,14 @@ func (g *Generator) New() (string, error) { | |||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		return nanoid.Generate(g.opts.NanoidAlphabet, g.opts.NanoidSize) | 		return nanoid.Generate(g.opts.NanoidAlphabet, g.opts.NanoidSize) | ||||||
| 	case TypeUUIDv8: | 	case TypeUUIDv7: | ||||||
| 		timestamp := uint64(time.Now().UnixNano()) | 		uid, err := uuid.NewV7() | ||||||
| 		clockSeq := make([]byte, 2) | 		if err != nil { | ||||||
| 		if _, err := rand.Read(clockSeq); err != nil { | 			return "", err | ||||||
| 			return "", fmt.Errorf("failed to generate random clock sequence: %w", err) |  | ||||||
| 		} | 		} | ||||||
| 		clockSeqValue := binary.BigEndian.Uint16(clockSeq) & 0x0FFF // Mask to 12 bits | 		return uid.String(), nil | ||||||
| 		return uuidv8.NewWithParams(timestamp, clockSeqValue, g.opts.UUIDNode[:], uuidv8.TimestampBits48) | 	case TypeUUIDv8: | ||||||
|  | 		return "", errors.New("unsupported uuid version v8") | ||||||
| 	} | 	} | ||||||
| 	return "", errors.New("invalid option, Type unspecified") | 	return "", errors.New("invalid option, Type unspecified") | ||||||
| } | } | ||||||
| @@ -82,16 +79,15 @@ func New(opts ...Option) (string, error) { | |||||||
| 		if options.NanoidSize <= 0 { | 		if options.NanoidSize <= 0 { | ||||||
| 			return "", errors.New("invalid option, NanoidSize must be positive integer") | 			return "", errors.New("invalid option, NanoidSize must be positive integer") | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		return nanoid.Generate(options.NanoidAlphabet, options.NanoidSize) | 		return nanoid.Generate(options.NanoidAlphabet, options.NanoidSize) | ||||||
| 	case TypeUUIDv8: | 	case TypeUUIDv7: | ||||||
| 		timestamp := uint64(time.Now().UnixNano()) | 		uid, err := uuid.NewV7() | ||||||
| 		clockSeq := make([]byte, 2) | 		if err != nil { | ||||||
| 		if _, err := rand.Read(clockSeq); err != nil { | 			return "", err | ||||||
| 			return "", fmt.Errorf("failed to generate random clock sequence: %w", err) |  | ||||||
| 		} | 		} | ||||||
| 		clockSeqValue := binary.BigEndian.Uint16(clockSeq) & 0x0FFF // Mask to 12 bits | 		return uid.String(), nil | ||||||
| 		return uuidv8.NewWithParams(timestamp, clockSeqValue, options.UUIDNode[:], uuidv8.TimestampBits48) | 	case TypeUUIDv8: | ||||||
|  | 		return "", errors.New("unsupported uuid version v8") | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	return "", errors.New("invalid option, Type unspecified") | 	return "", errors.New("invalid option, Type unspecified") | ||||||
| @@ -145,7 +141,7 @@ func WithUUIDNode(node [6]byte) Option { | |||||||
| // NewOptions returns new Options struct filled by opts | // NewOptions returns new Options struct filled by opts | ||||||
| func NewOptions(opts ...Option) Options { | func NewOptions(opts ...Option) Options { | ||||||
| 	options := Options{ | 	options := Options{ | ||||||
| 		Type:           TypeUUIDv8, | 		Type:           TypeUUIDv7, | ||||||
| 		NanoidAlphabet: DefaultNanoidAlphabet, | 		NanoidAlphabet: DefaultNanoidAlphabet, | ||||||
| 		NanoidSize:     DefaultNanoidSize, | 		NanoidSize:     DefaultNanoidSize, | ||||||
| 		UUIDNode:       generatedNode, | 		UUIDNode:       generatedNode, | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user