diff --git a/codegen/generate.go b/codegen/generate.go index c375da34..c92563df 100644 --- a/codegen/generate.go +++ b/codegen/generate.go @@ -5,8 +5,6 @@ import ( "os" "github.com/urfave/cli/v2" - - "github.com/sumup/sumup-py/codegen/pkg/builder" ) func Generate() *cli.Command { @@ -23,25 +21,15 @@ func Generate() *cli.Command { return fmt.Errorf("empty argument, path to openapi specs expected") } - specs := c.Args().First() - if err := os.MkdirAll(out, os.ModePerm); err != nil { return fmt.Errorf("create output directory %q: %w", out, err) } - spec, err := loadOpenAPIDocument(specs) + builder, err := loadBuilder(c.Args().First(), out) if err != nil { return err } - builder := builder.New(builder.Config{ - Out: out, - }) - - if err := builder.Load(spec); err != nil { - return fmt.Errorf("load spec: %w", err) - } - if err := builder.Build(); err != nil { return fmt.Errorf("build sdk: %w", err) } diff --git a/codegen/load.go b/codegen/load.go new file mode 100644 index 00000000..38b3020a --- /dev/null +++ b/codegen/load.go @@ -0,0 +1,37 @@ +package main + +import ( + "fmt" + "os" + + "github.com/pb33f/libopenapi" + + "github.com/sumup/sumup-py/codegen/pkg/builder" +) + +func loadBuilder(specs, out string) (*builder.Builder, error) { + spec, err := os.ReadFile(specs) + if err != nil { + return nil, fmt.Errorf("read specs: %w", err) + } + + doc, err := libopenapi.NewDocument(spec) + if err != nil { + return nil, fmt.Errorf("load openapi document: %w", err) + } + + model, err := doc.BuildV3Model() + if err != nil { + return nil, fmt.Errorf("build openapi v3 model: %w", err) + } + + b := builder.New(builder.Config{ + Out: out, + }) + + if err := b.Load(&model.Model); err != nil { + return nil, fmt.Errorf("load spec: %w", err) + } + + return b, nil +} diff --git a/codegen/openapi.go b/codegen/openapi.go deleted file mode 100644 index 827ec0dc..00000000 --- a/codegen/openapi.go +++ /dev/null @@ -1,27 +0,0 @@ -package main - -import ( - "fmt" - "os" - - "github.com/pb33f/libopenapi" - v3 "github.com/pb33f/libopenapi/datamodel/high/v3" -) - -func loadOpenAPIDocument(filename string) (*v3.Document, error) { - spec, err := os.ReadFile(filename) - if err != nil { - return nil, fmt.Errorf("read specs: %w", err) - } - - document, err := libopenapi.NewDocument(spec) - if err != nil { - return nil, fmt.Errorf("load openapi document: %w", err) - } - - model, err := document.BuildV3Model() - if err != nil { - return nil, fmt.Errorf("build openapi v3 model: %w", err) - } - return &model.Model, nil -} diff --git a/codegen/samples.go b/codegen/samples.go index d67ed609..4c6142e4 100644 --- a/codegen/samples.go +++ b/codegen/samples.go @@ -9,8 +9,6 @@ import ( "regexp" "github.com/urfave/cli/v2" - - "github.com/sumup/sumup-py/codegen/pkg/builder" ) var versionPattern = regexp.MustCompile(`(?m)^__version__\s*=\s*["']([^"']+)["']`) @@ -38,15 +36,10 @@ func Samples() *cli.Command { return fmt.Errorf("missing SDK version: set --sdk-version or --sdk-version-file") } - spec, err := loadOpenAPIDocument(c.Args().First()) + generator, err := loadBuilder(c.Args().First(), "") if err != nil { return err } - - generator := builder.New(builder.Config{}) - if err := generator.Load(spec); err != nil { - return fmt.Errorf("load spec: %w", err) - } catalog, err := generator.Samples(sdkVersion) if err != nil { return fmt.Errorf("generate samples: %w", err)