ajmarks / gekitchen

Python SDK for GE smart appliances
MIT License
54 stars 37 forks source link

Refactor ERD encode/decode methods #4

Open ajmarks opened 4 years ago

ajmarks commented 4 years ago

Many of the ERD code values are represented by Enums, NamedTuples, or similar. Currently, translation between those occurs in a bunch of tiny functions in erd_utils.py. This is gross and cumbersome. Rather, we should have a protocol like

class ErdValueP(Generic[T]):
    def erd_encode(self, value: T) -> bytes: ...
    def erd_decode(self, raw_value: bytes) -> T: ...

and have each of those special types implement the protocol. Unencodable values can simply raise a NotImplementedError or similar. The Appliance.{encode/decode}_erd_value methods can then be updated to simply dispatch to the correct object's method.

We'll also probably need a register_erd_type(erd_code: ErdType) decorator to set up dispatch to the correct decoded.