Skip to content

Commit f03a296

Browse files
committed
feat(codegen): sample generator
Add a new sub-command for codegen that generates codesamples for each operaion.
1 parent c8ca8d9 commit f03a296

6 files changed

Lines changed: 924 additions & 25 deletions

File tree

internal/cmd/codegen/generate.go

Lines changed: 2 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,7 @@ import (
66
"os"
77
"os/exec"
88

9-
"github.com/pb33f/libopenapi"
109
"github.com/urfave/cli/v2"
11-
12-
"github.com/sumup/sumup-go/internal/cmd/codegen/pkg/builder"
1310
)
1411

1512
func Generate() *cli.Command {
@@ -23,33 +20,13 @@ func Generate() *cli.Command {
2320
return fmt.Errorf("empty argument, path to openapi specs expected")
2421
}
2522

26-
specs := c.Args().First()
27-
2823
if err := os.MkdirAll(out, os.ModePerm); err != nil {
2924
return fmt.Errorf("create output directory %q: %w", out, err)
3025
}
3126

32-
spec, err := os.ReadFile(specs)
33-
if err != nil {
34-
return fmt.Errorf("read specs: %w", err)
35-
}
36-
37-
doc, err := libopenapi.NewDocument(spec)
27+
builder, err := loadBuilder(c.Args().First(), out)
3828
if err != nil {
39-
return fmt.Errorf("load openapi document: %w", err)
40-
}
41-
42-
model, err := doc.BuildV3Model()
43-
if err != nil {
44-
return fmt.Errorf("build openapi v3 model: %w", err)
45-
}
46-
47-
builder := builder.New(builder.Config{
48-
Out: out,
49-
})
50-
51-
if err := builder.Load(&model.Model); err != nil {
52-
return fmt.Errorf("load spec: %w", err)
29+
return err
5330
}
5431

5532
if err := builder.Build(); err != nil {

internal/cmd/codegen/load.go

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
"os"
6+
7+
"github.com/pb33f/libopenapi"
8+
9+
"github.com/sumup/sumup-go/internal/cmd/codegen/pkg/builder"
10+
)
11+
12+
func loadBuilder(specs, out string) (*builder.Builder, error) {
13+
spec, err := os.ReadFile(specs)
14+
if err != nil {
15+
return nil, fmt.Errorf("read specs: %w", err)
16+
}
17+
18+
doc, err := libopenapi.NewDocument(spec)
19+
if err != nil {
20+
return nil, fmt.Errorf("load openapi document: %w", err)
21+
}
22+
23+
model, err := doc.BuildV3Model()
24+
if err != nil {
25+
return nil, fmt.Errorf("build openapi v3 model: %w", err)
26+
}
27+
28+
b := builder.New(builder.Config{
29+
Out: out,
30+
})
31+
32+
if err := b.Load(&model.Model); err != nil {
33+
return nil, fmt.Errorf("load spec: %w", err)
34+
}
35+
36+
return b, nil
37+
}

internal/cmd/codegen/main.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ func App() *cli.App {
2828
},
2929
Commands: []*cli.Command{
3030
Generate(),
31+
Samples(),
3132
},
3233
}
3334
}

0 commit comments

Comments
 (0)