@@ -18,18 +18,20 @@ const (
18
18
)
19
19
20
20
var (
21
- formatFlag string
22
- localFlag bool
23
- quickFlag bool
24
- zeroFlag bool
25
- numberFlag uint
21
+ formatFlag string
22
+ localFlag bool
23
+ quickFlag bool
24
+ zeroFlag bool
25
+ monoticFlag bool
26
+ numberFlag uint
26
27
)
27
28
28
29
func init () {
29
30
flag .StringVar (& formatFlag , "f" , "default" , "when parsing, show times in this format: default, rfc3339, unix, ms" )
30
31
flag .BoolVar (& localFlag , "l" , false , "when parsing, show local time instead of UTC" )
31
32
flag .BoolVar (& quickFlag , "q" , false , "when generating, use non-crypto-grade entropy" )
32
33
flag .BoolVar (& zeroFlag , "z" , false , "when generating, fix entropy to all-zeroes" )
34
+ flag .BoolVar (& monoticFlag , "m" , true , "when generating, use monotonically increasing" )
33
35
flag .UintVar (& numberFlag , "n" , 1 , "when generating, specify the quantity to be generated" )
34
36
}
35
37
@@ -54,13 +56,13 @@ func main() {
54
56
55
57
switch len (args ) {
56
58
case 0 :
57
- generate (quickFlag , zeroFlag , numberFlag )
59
+ generate (quickFlag , zeroFlag , monoticFlag , numberFlag )
58
60
default :
59
61
parse (args [0 ], localFlag , formatFunc )
60
62
}
61
63
}
62
64
63
- func generate (quick , zero bool , num uint ) {
65
+ func generate (quick , zero , mono bool , num uint ) {
64
66
entropy := cryptorand .Reader
65
67
if quick {
66
68
seed := time .Now ().UnixNano ()
@@ -71,6 +73,10 @@ func generate(quick, zero bool, num uint) {
71
73
entropy = zeroReader {}
72
74
}
73
75
76
+ if mono {
77
+ entropy = & sulid.LockedMonotonicReader {MonotonicReader : sulid .Monotonic (entropy , 0 )}
78
+ }
79
+
74
80
for range num {
75
81
id , err := sulid .New (sulid .Timestamp (time .Now ()), entropy )
76
82
if err != nil {
0 commit comments