schema.py 779 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. from dataclasses import dataclass
  2. from pycparser import c_ast
  3. @dataclass
  4. class StructField:
  5. type: str
  6. name: str
  7. desc: str | None = None
  8. @dataclass
  9. class EnumValue:
  10. name: str
  11. value: int | None
  12. desc: str | None = None
  13. @dataclass
  14. class Struct:
  15. name: str
  16. desc: str | None = None
  17. fields: list[StructField] | None = None
  18. @dataclass
  19. class Enum:
  20. name: str
  21. values: list[EnumValue]
  22. desc: str | None = None
  23. @dataclass
  24. class FunctionParam:
  25. type: str
  26. name: str
  27. @dataclass
  28. class Function:
  29. name: str
  30. params: list[FunctionParam]
  31. ret_type: str
  32. desc: str | None = None
  33. def signature(self) -> str:
  34. return f'{self.ret_type} {self.name}({", ".join([f"{param.type} {param.name}" for param in self.params])})'