Skip to content

Commit f4e32f6

Browse files
authored
Merge pull request #54 from go-generalize/issue/53
生成先を指定できるようにする #53
2 parents 625f7ec + 12ebf0a commit f4e32f6

File tree

2 files changed

+33
-6
lines changed

2 files changed

+33
-6
lines changed

client_generator/client_generator.go

+4-1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"io/ioutil"
55
"log"
66
"os"
7+
"path/filepath"
78
"sort"
89
"text/template"
910

@@ -38,6 +39,7 @@ type clientGenerator struct {
3839
Imports []importType
3940
clientType
4041
ChildrenClients []*clientType
42+
OutputDir string
4143
}
4244

4345
func (g *clientGenerator) generate() error {
@@ -60,7 +62,8 @@ func (g *clientGenerator) generate() error {
6062

6163
t := template.Must(template.New("tmpl").Parse(string(templ)))
6264

63-
fp, err := os.Create("api_client.ts")
65+
apiTsPath := filepath.Join(g.OutputDir, "./api_client.ts")
66+
fp, err := os.Create(apiTsPath)
6467

6568
if err != nil {
6669
log.Fatalf("failed to create api_client.ts: %+v", err)

client_generator/main.go

+29-5
Original file line numberDiff line numberDiff line change
@@ -279,18 +279,23 @@ func walk(p, url string, generator *clientGenerator, parent *clientType) {
279279
log.Fatalf("failed to get package: %+v", err)
280280
}
281281

282+
classesDir := filepath.Join(generator.OutputDir, "./classes/")
283+
282284
if len(pkgParser.structs) != 0 {
283-
if err = os.MkdirAll("./classes/"+url, 0774); err != nil {
285+
if err = os.MkdirAll(classesDir+url, 0774); err != nil {
284286
log.Fatalf("failed to MkdirAll: %+v", err)
285287
}
286288
}
287289

288290
var b []byte
289291
for i := range pkgParser.structs {
292+
structFilePath := filepath.Join(classesDir,
293+
fmt.Sprintf("/%s/", url),
294+
fmt.Sprintf("/%s.ts", pkgParser.structs[i]))
290295
b, err = exec.Command(
291296
"struct2ts",
292297
"-o",
293-
"./classes/"+url+"/"+pkgParser.structs[i]+".ts",
298+
structFilePath,
294299
goPkg+"."+pkgParser.structs[i],
295300
).CombinedOutput()
296301

@@ -336,6 +341,7 @@ func main() {
336341
}
337342

338343
versionFlag := flag.Bool("v", false, "print version")
344+
outputDir := flag.String("o", "./", "output directory of generated codes")
339345

340346
flag.Parse()
341347

@@ -344,18 +350,36 @@ func main() {
344350
return
345351
}
346352

347-
if err := os.RemoveAll("./classes"); err != nil {
353+
outputFullPath, err := filepath.Abs(*outputDir)
354+
if err != nil {
355+
log.Fatalf("failed to run filepath.Abs: %+v", err)
356+
}
357+
358+
var stat os.FileInfo
359+
if stat, err = os.Stat(outputFullPath); err != nil {
360+
if err = os.MkdirAll(outputFullPath, 0774); err != nil {
361+
log.Fatalf("failed to MkdirAll: %+v", err)
362+
}
363+
} else if !stat.IsDir() {
364+
log.Fatalf("-o specified is not a directory")
365+
}
366+
367+
log.Printf("output dir: %s", outputFullPath)
368+
classesDir := filepath.Join(outputFullPath, "./classes")
369+
370+
if err = os.RemoveAll(classesDir); err != nil {
348371
log.Fatalf("failed to run RemoveAll: %+v", err)
349372
}
350-
if err := os.MkdirAll("./classes", 0774); err != nil {
373+
if err = os.MkdirAll(classesDir, 0774); err != nil {
351374
log.Fatalf("failed to run MkdirAll: %+v", err)
352375
}
353376

354377
generator := &clientGenerator{
355378
AppVersion: common.AppVersion,
379+
OutputDir: outputFullPath,
356380
}
357381

358-
fullPath, err := filepath.Abs(os.Args[1])
382+
fullPath, err := filepath.Abs(flag.Arg(0))
359383
if err != nil {
360384
log.Fatalf("failed to run filepath.Abs: %+v", err)
361385
}

0 commit comments

Comments
 (0)