tangled
alpha
login
or
join now
selman.me
/
things
0
fork
atom
this repo has no description
0
fork
atom
overview
issues
pulls
pipelines
ulidparse: add thingy
Selman Kayrancioglu
1 year ago
0c86ea78
fd96c3a4
+71
1 changed file
expand all
collapse all
unified
split
ulidparse
main.go
+71
ulidparse/main.go
reviewed
···
1
1
+
package main
2
2
+
3
3
+
import (
4
4
+
"bufio"
5
5
+
"context"
6
6
+
"flag"
7
7
+
"fmt"
8
8
+
"io"
9
9
+
"os"
10
10
+
"os/signal"
11
11
+
12
12
+
"github.com/oklog/ulid/v2"
13
13
+
)
14
14
+
15
15
+
func main() {
16
16
+
ctx, cancel := signal.NotifyContext(context.Background(), os.Interrupt)
17
17
+
defer cancel()
18
18
+
if err := realMain(
19
19
+
ctx,
20
20
+
os.Stdin,
21
21
+
os.Stdout,
22
22
+
os.Stderr,
23
23
+
os.Args,
24
24
+
); err != nil {
25
25
+
fmt.Fprintf(os.Stderr, "%s\n", err)
26
26
+
os.Exit(1)
27
27
+
}
28
28
+
}
29
29
+
30
30
+
func realMain(_ context.Context, stdin io.Reader, stdout io.Writer, stderr io.Writer, osargs []string) error {
31
31
+
fs := flag.NewFlagSet("ulidparse", flag.ExitOnError)
32
32
+
flagSort := fs.Bool("sort", false, "sort the output")
33
33
+
fs.SetOutput(stderr)
34
34
+
35
35
+
fs.Usage = func() {
36
36
+
fmt.Fprintf(fs.Output(), "Usage: %s [options] <query> [<file>]\n", fs.Name())
37
37
+
fs.PrintDefaults()
38
38
+
}
39
39
+
40
40
+
if err := fs.Parse(osargs[1:]); err != nil {
41
41
+
return err
42
42
+
}
43
43
+
44
44
+
scanner := bufio.NewScanner(stdin)
45
45
+
46
46
+
var goterr bool
47
47
+
for scanner.Scan() {
48
48
+
line := scanner.Text()
49
49
+
50
50
+
uu, err := ulid.Parse(line)
51
51
+
if err != nil {
52
52
+
goterr = true
53
53
+
fmt.Fprintf(stderr, "error: %v\n", err)
54
54
+
}
55
55
+
56
56
+
if !*flagSort {
57
57
+
fmt.Fprintf(stdout, "%s %v\n", line, ulid.Time(uu.Time()).UTC())
58
58
+
continue
59
59
+
}
60
60
+
}
61
61
+
62
62
+
if err := scanner.Err(); err != nil {
63
63
+
return err
64
64
+
}
65
65
+
66
66
+
if goterr {
67
67
+
return fmt.Errorf("some lines failed to parse")
68
68
+
}
69
69
+
70
70
+
return nil
71
71
+
}