diff --git a/proto/scanner.py b/proto/scanner.py index 5244c3a..d9ab8b8 100755 --- a/proto/scanner.py +++ b/proto/scanner.py @@ -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