gekitchen icon indicating copy to clipboard operation
gekitchen copied to clipboard

Refactor ERD encode/decode methods

Open ajmarks opened this issue 5 years ago • 0 comments

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.

ajmarks avatar Nov 29 '20 18:11 ajmarks