{"""Code generators for different programming languages.""" from abc import ABC, abstractmethod from typing import Dict, Callable from curlconverter.parser import ParsedCurl class Generator(ABC): """Base class for code generators.""" @property @abstractmethod def language(self) -> str: """Return the language name.""" pass @abstractmethod def generate(self, parsed: ParsedCurl) -> str: """Generate code from parsed curl data.""" pass _generators: Dict[str, Callable[[ParsedCurl], str]] = {} def register_generator(name: str): """Decorator to register a generator function.""" def decorator(func: Callable[[ParsedCurl], str]): _generators[name.lower()] = func return func return decorator def generate_code(parsed: ParsedCurl, language: str) -> str: """Generate code for the given language.""" lang = language.lower() if lang not in _generators: supported = ", ".join(sorted(_generators.keys())) raise ValueError(f"Unsupported language: {language}. Supported: {supported}") return _generators[lang](parsed) def get_supported_languages() -> list: """Return list of supported language names.""" return sorted(_generators.keys()) def get_language_display_name(lang: str) -> str: """Return display name for a language.""" names = { "python": "Python (requests)", "javascript": "JavaScript (fetch)", "go": "Go (net/http)", "ruby": "Ruby (Net::HTTP)", "php": "PHP (cURL)" } return names.get(lang.lower(), lang.capitalize()) from curlconverter.generators import python # noqa: E402, F401 from curlconverter.generators import javascript # noqa: E402, F401 from curlconverter.generators import go # noqa: E402, F401 from curlconverter.generators import ruby # noqa: E402, F401 from curlconverter.generators import php # noqa: E402, F401