package api_gen import ( "fmt" "os" "path/filepath" ) type Config struct { InputDir string OutputDir string Module string Formats []string // OpenAPI document metadata. Title string Version string Description string ServerURL string ServerDescription string } func Run(cfg Config) error { pkg, err := parseAPIFiles(cfg.Module) if err != nil { return fmt.Errorf("failed to parse API files: %w", err) } absOutput, err := filepath.Abs(cfg.OutputDir) if err != nil { return fmt.Errorf("failed to resolve output dir: %w", err) } if err := os.MkdirAll(absOutput, 0755); err != nil { return fmt.Errorf("failed to create output dir: %w", err) } // Generate each requested format. for _, format := range cfg.Formats { var err error switch format { case "openapi": err = generateOpenAPI(absOutput, pkg, cfg) case "docs": err = generateDocs(absOutput, pkg) case "client": err = generateClient(absOutput, pkg) case "jsclient": err = generateJSClient(absOutput, pkg) // case "tstypes": // err = generateTSTypes(absOutput, pkg) case "tsclient": err = generateTSClientTypes(absOutput, pkg) default: err = fmt.Errorf("unknown format: %s", format) } if err != nil { return err } } fmt.Printf("Generated %d API endpoints to %s\n", len(pkg.Endpoints), absOutput) return nil }