@@ -2,6 +2,7 @@ package main
22
33import (
44 _ "embed"
5+ "encoding/json"
56 "fmt"
67 "log"
78 "os"
@@ -45,19 +46,20 @@ func main() {
4546 var (
4647 casing string = "lower"
4748 delimiter string = "-"
49+ format string = "plain"
4850 help bool
4951 ver bool
50- quantity int = 1
51- size uint = 2
52- seed int64 = - 1
53- // TODO: add option to use custom dictionary
52+ quantity int = 1
53+ size uint = 2
54+ seed int64
5455 )
5556
5657 pflag .StringVarP (& casing , "casing" , "c" , casing , "set the casing of the generated name <title|upper|lower>" )
5758 pflag .StringVarP (& delimiter , "delimiter" , "d" , delimiter , "set the delimiter used to join words" )
59+ pflag .StringVarP (& format , "format" , "f" , format , "set the output format <plain|json>" )
5860 pflag .IntVarP (& quantity , "quantity" , "q" , quantity , "set the number of names to generate" )
5961 pflag .UintVarP (& size , "size" , "z" , size , "set the number of words in the generated name (minimum 2, maximum 4)" )
60- pflag .Int64VarP (& seed , "seed" , "s" , seed , "random generator seed" )
62+ pflag .Int64VarP (& seed , "seed" , "s" , 0 , "random generator seed" )
6163 pflag .BoolVarP (& help , "help" , "h" , help , "show fname usage" )
6264 pflag .BoolVarP (& ver , "version" , "v" , ver , "show fname version" )
6365 pflag .Parse ()
@@ -72,27 +74,49 @@ func main() {
7274 os .Exit (0 )
7375 }
7476
75- c , err := fname .CasingFromString (casing )
77+ if quantity <= 0 {
78+ log .Fatalf ("error: quantity must be greater than 0, got %d" , quantity )
79+ }
80+
81+ if format != "plain" && format != "json" {
82+ log .Fatalf ("error: invalid format %q, must be plain or json" , format )
83+ }
84+
85+ c , err := fname .ParseCasing (casing )
7686 handleError (err )
7787
7888 opts := []fname.GeneratorOption {
7989 fname .WithCasing (c ),
8090 fname .WithDelimiter (delimiter ),
8191 }
8292
83- if seed != - 1 {
93+ if pflag . Lookup ( " seed" ). Changed {
8494 opts = append (opts , fname .WithSeed (seed ))
8595 }
8696 if size != 2 {
87- opts = append (opts , fname .WithSize (size ))
97+ sizeOpt , err := fname .WithSize (size )
98+ handleError (err )
99+ opts = append (opts , sizeOpt )
88100 }
89101
90102 rng := fname .NewGenerator (opts ... )
91103
104+ names := make ([]string , 0 , quantity )
92105 for i := 0 ; i < quantity ; i ++ {
93106 name , err := rng .Generate ()
94107 handleError (err )
95- fmt .Println (name )
108+ names = append (names , name )
109+ }
110+
111+ switch format {
112+ case "json" :
113+ out , err := json .Marshal (names )
114+ handleError (err )
115+ fmt .Println (string (out ))
116+ default :
117+ for _ , name := range names {
118+ fmt .Println (name )
119+ }
96120 }
97121}
98122
0 commit comments