gen

package
v0.0.0-...-93f7656 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 16, 2024 License: MIT Imports: 9 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var GenCmd = &cobra.Command{
	Use:   "gen",
	Short: "Generate openapi and ogen files",
	RunE: func(_ *cobra.Command, _ []string) error {
		if flagGenType != genTypeOAPI && outputPath == "" {
			return errors.New("flag 'output' should be specified for generating ogen files")
		}

		if flagGenType != genTypeOAPI {
			_, err := exec.LookPath("ogen")
			if err != nil {
				return errors.New(`ogen not found, install it via "go install -v github.com/ogen-go/ogen/cmd/ogen@latest"`)
			}
		}

		data, err := os.ReadFile(inputPath)
		if err != nil {
			return err
		}

		document, err := parser.ParseDocument(data)
		if err != nil {
			fmt.Println(err)
			os.Exit(1)
		}
		if verbose {
			parser.PrettyPrint(document)
		}
		spec, err := gen.GenerateSpec(document)
		if err != nil {
			fmt.Println(err)
			os.Exit(1)
		}

		switch {
		case outputPath == "":
			fmt.Println(spec)
		case flagGenType == genTypeOAPI:
			err := os.WriteFile(outputPath, []byte(spec), 0644)
			if err != nil {
				return err
			}
		default:
			swaggerPath := filepath.Join(outputPath, "server")
			err := os.MkdirAll(swaggerPath, os.ModePerm)
			if err != nil {
				return err
			}
			specPath := filepath.Join(swaggerPath, "openapi.yml")
			err = os.WriteFile(specPath, []byte(spec), 0644)
			if err != nil {
				return err
			}
			swaggerGenPath := filepath.Join(swaggerPath, "swagger_gen.go")
			err = os.WriteFile(swaggerGenPath, []byte(swaggerGen), 0644)
			if err != nil {
				return err
			}
			serverGenPath := filepath.Join(swaggerPath, "server_gen.go")
			serverGenFinal := strings.ReplaceAll(serverGen, "${URL}", document.Settings.URL)
			err = os.WriteFile(serverGenPath, []byte(serverGenFinal), 0644)
			if err != nil {
				return err
			}

			ogenPath := filepath.Join(outputPath, "oapi")

			ogen := exec.Command(
				"ogen",
				"--target", ogenPath,
				"--package", "oapi",
				"--clean",
				specPath,
			)
			ogen.Stdout = os.Stdout
			ogen.Stderr = os.Stdout

			err = ogen.Run()
			if err != nil {
				return err
			}
		}

		return nil
	},
}

Functions

This section is empty.

Types

This section is empty.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL