-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.go
100 lines (89 loc) · 2.18 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
package main
import (
"fmt"
"log"
"regexp"
"strconv"
lipsum "github.com/daichi-m/gypsum/lipsum"
flag "github.com/spf13/pflag"
)
func main() {
input, err := scanInputs()
if err != nil {
log.Fatalln(err.Error())
}
err = input.GenerateOut()
if err != nil {
log.Fatalln(err.Error())
}
log.Println("All files has been generated")
}
func scanInputs() (*lipsum.Input, error) {
out := flag.StringP("out", "o", "-",
"The file or directory in which the generated text would be stored")
size := flag.StringP("size", "s", "10M", "Size of each file generated")
count := flag.IntP("count", "c", 1, `The number of files generated.
If this is 1, a single text file is generated with all the content.
Otherwise the content is written in multiple text files in a directory`)
flag.Parse()
isize, err := convertSize(*size)
if err != nil {
return nil, err
}
var input lipsum.Input = lipsum.Input{
File: *out,
Size: isize,
Count: *count,
}
err = input.Validate()
if err != nil {
return nil, err
}
return &input, nil
}
func convertSize(size string) (int, error) {
reg, _ := regexp.Compile("(?P<Size>[0-9]+)(?P<Suffix>[TGMKtgmk]?[Bb]?)")
submatch := reg.FindStringSubmatch(size)
match := make(map[string]string)
for i, name := range reg.SubexpNames() {
match[name] = submatch[i]
}
num, ok := match["Size"]
if !ok {
return 0, fmt.Errorf("Could not decode size from %s", size)
}
suf, ok := match["Suffix"]
if !ok {
suf = "B"
log.Printf("Could not decode suffix for %s, defaulting to byte", size)
}
switch suf {
case "b", "B":
return strconv.Atoi(num)
case "k", "K", "kb", "KB", "kB", "Kb":
val, err := strconv.Atoi(num)
if err != nil {
return 0, err
}
return val * lipsum.KB, nil
case "m", "M", "mb", "MB", "mB", "Mb":
val, err := strconv.Atoi(num)
if err != nil {
return 0, err
}
return val * lipsum.MB, nil
case "g", "G", "gb", "GB", "gB", "Gb":
val, err := strconv.Atoi(num)
if err != nil {
return 0, err
}
return val * lipsum.GB, nil
case "t", "T", "tb", "TB", "tB", "Tb":
val, err := strconv.Atoi(num)
if err != nil {
return 0, err
}
return val * lipsum.TB, nil
}
return 0, fmt.Errorf("Unable to interpret size %s", size)
}