diff --git a/pkg/sdk/generators/generator.go b/pkg/sdk/generators/generator.go new file mode 100644 index 00000000..eafe1fed --- /dev/null +++ b/pkg/sdk/generators/generator.go @@ -0,0 +1,67 @@ +// Package generators provides SDK code generators for different languages. +package generators + +import ( + "context" +) + +// Options holds common generation options. +type Options struct { + // SpecPath is the path to the OpenAPI spec file. + SpecPath string + // OutputDir is where to write the generated SDK. + OutputDir string + // PackageName is the package/module name. + PackageName string + // Version is the SDK version. + Version string +} + +// Generator defines the interface for SDK generators. +type Generator interface { + // Language returns the generator's target language identifier. + Language() string + + // Generate creates SDK from OpenAPI spec. + Generate(ctx context.Context, opts Options) error + + // Available checks if generator dependencies are installed. + Available() bool + + // Install returns instructions for installing the generator. + Install() string +} + +// Registry holds available generators. +type Registry struct { + generators map[string]Generator +} + +// NewRegistry creates a registry with all available generators. +func NewRegistry() *Registry { + r := &Registry{ + generators: make(map[string]Generator), + } + // Generators will be registered in subsequent tasks + return r +} + +// Get returns a generator by language. +func (r *Registry) Get(lang string) (Generator, bool) { + g, ok := r.generators[lang] + return g, ok +} + +// Register adds a generator to the registry. +func (r *Registry) Register(g Generator) { + r.generators[g.Language()] = g +} + +// Languages returns all registered language identifiers. +func (r *Registry) Languages() []string { + langs := make([]string, 0, len(r.generators)) + for lang := range r.generators { + langs = append(langs, lang) + } + return langs +}