Skip to content

Commit 35867d8

Browse files
authored
Improve various generator features (#28)
* Added detailed debug logging for everything * Refactored to a more structured code * Removed copy-pasted code * Actually handle all errors without silently swallowing them * Handle when `allOf` is taking an array definition from another type * Added more documentation
1 parent d365c2f commit 35867d8

File tree

10 files changed

+668
-288
lines changed

10 files changed

+668
-288
lines changed

cmd/openapi-generator-go/cmd/models.go

Lines changed: 53 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -23,38 +23,81 @@ package cmd
2323

2424
import (
2525
"bytes"
26+
"context"
2627
"io/ioutil"
2728
"os"
29+
"time"
2830

2931
"github.com/contiamo/openapi-generator-go/pkg/generators/models"
32+
"github.com/rs/zerolog"
3033
"github.com/rs/zerolog/log"
3134
"github.com/spf13/cobra"
3235
)
3336

3437
// modelsCmd represents the models command
3538
var modelsCmd = &cobra.Command{
3639
Use: "models",
37-
Short: "generate a models",
38-
Long: `generate a models.`,
40+
Short: "Generate Go code for models",
41+
Long: `This generates Go files for each model resolved from the given API spec.`,
3942
Run: func(cmd *cobra.Command, args []string) {
40-
file, _ := cmd.Flags().GetString("spec")
41-
outputDirectory, _ := cmd.Flags().GetString("output")
42-
packageName, _ := cmd.Flags().GetString("package-name")
43-
bs, err := ioutil.ReadFile(file)
43+
ctx, cancel := context.WithTimeout(context.Background(), time.Minute)
44+
defer cancel()
45+
46+
// human-readable
47+
log := log.Output(zerolog.ConsoleWriter{
48+
Out: cmd.OutOrStderr(),
49+
})
50+
51+
spec, err := cmd.Flags().GetString("spec")
52+
if err != nil {
53+
log.Fatal().Err(err).Msg("wrong value for `spec`")
54+
}
55+
output, err := cmd.Flags().GetString("output")
56+
if err != nil {
57+
log.Fatal().Err(err).Msg("wrong value for `output`")
58+
}
59+
packageName, err := cmd.Flags().GetString("package-name")
60+
if err != nil {
61+
log.Fatal().Err(err).Msg("wrong value for `package-name`")
62+
}
63+
64+
log = log.
65+
With().
66+
Str("spec", spec).
67+
Str("output", output).
68+
Str("package_name", packageName).
69+
Logger()
70+
71+
log.Debug().Msg("Loading the spec file...")
72+
bs, err := ioutil.ReadFile(spec)
4473
if err != nil {
45-
log.Fatal().Str("spec-file", file).Err(err).Msg("failed to read the spec file")
74+
log.Fatal().Err(err).Msg("failed to read the spec file")
4675
}
47-
err = os.MkdirAll(outputDirectory, 0755)
76+
log.Debug().Msg("The spec file has been loaded.")
77+
78+
log.Debug().Msg("Initializing the output directory...")
79+
err = os.MkdirAll(output, 0755)
4880
if err != nil {
49-
log.Fatal().Str("output", outputDirectory).Err(err).Msg("failed to create output folder")
81+
log.Fatal().Err(err).Msg("failed to create output folder")
5082
}
83+
log.Debug().Msg("Output directory has been initialized.")
84+
85+
log.Debug().Msg("Generating files...")
5186
reader := bytes.NewReader(bs)
52-
err = models.Generate(reader, outputDirectory, models.Options{
87+
g, err := models.NewGenerator(reader, models.Options{
5388
PackageName: packageName,
89+
Destination: output,
90+
Logger: log,
5491
})
92+
if err != nil {
93+
log.Fatal().Err(err).Msg("failed to initialize the generator")
94+
}
95+
err = g.Generate(ctx)
5596
if err != nil {
5697
log.Fatal().Err(err).Msg("failed to generate models")
5798
}
99+
100+
log.Debug().Msg("Files have been generated.")
58101
},
59102
}
60103

0 commit comments

Comments
 (0)