scanner: add enum verification checks

This commit is contained in:
Peter Hutterer 2023-02-07 14:53:19 +10:00
parent 8d2da0d857
commit 91ec792d74

View file

@ -70,6 +70,7 @@ class Argument:
name: str = attr.ib()
signature: str = attr.ib(converter=proto_to_type)
summary: str = attr.ib()
enum: Optional["Enum"] = attr.ib()
@property
def as_arg(self) -> str:
@ -105,9 +106,10 @@ class Argument:
assert value in types, f"Failed to parse signature {value}"
@classmethod
def create(cls, name: str, signature: str, summary: str = "") -> "Argument":
# FIXME: enum value checks
return cls(name, signature, summary)
def create(
cls, name: str, signature: str, summary: str = "", enum: Optional["Enum"] = None
) -> "Argument":
return cls(name, signature, summary, enum)
@attr.s
@ -313,7 +315,12 @@ class Protocol(xml.sax.handler.ContentHandler):
name = attrs["name"]
sig = attrs["type"]
summary = attrs.get("summary", "")
arg = Argument.create(name=name, signature=sig, summary=summary)
enum = attrs.get("enum", None)
if enum is not None:
assert enum in [
e.name for e in self.current_interface.enums
], f"Failed to find enum '{self.current_interface.name}.{enum}'"
arg = Argument.create(name=name, signature=sig, summary=summary, enum=enum)
self.current_message.add_argument(arg)
elif element == "entry":
assert self.current_interface is not None