Coverage for src / lexigram / contracts / cli / generators.py: 94%
18 statements
« prev ^ index » next coverage.py v7.13.5, created at 2026-08-19 05:41 +0800
« prev ^ index » next coverage.py v7.13.5, created at 2026-08-19 05:41 +0800
1"""Code generator contracts for Lexigram CLI extensions."""
3from __future__ import annotations
5from dataclasses import dataclass, field
6import json
7from pathlib import Path
8from typing import Any, Protocol, runtime_checkable
11def _json_dumps(data: dict[str, Any], sort_keys: bool = False) -> bytes:
12 """Serialize dict to JSON bytes using the stdlib json module."""
13 return json.dumps(data, sort_keys=sort_keys).encode("utf-8")
16@dataclass(slots=True, frozen=True)
17class GenerationResult:
18 """Result of a generation operation."""
20 files_created: list[Path] = field(default_factory=list)
21 files_skipped: list[Path] = field(default_factory=list)
22 files_overwritten: list[Path] = field(default_factory=list)
25@runtime_checkable
26class GeneratorProtocol(Protocol):
27 """Protocol for code generators used by CLI extensions."""
29 name: str
30 description: str
32 def generate(self, name: str, **kwargs: Any) -> GenerationResult:
33 """Generate files for the given name.
35 Args:
36 name: The name to generate code for (e.g. module name, provider name).
37 **kwargs: Additional generation parameters.
39 Returns:
40 A ``GenerationResult`` describing which files were created/skipped.
41 """
42 ...
45__all__ = ["GenerationResult", "GeneratorProtocol"]