This should accept a `packer` argument, which has `pack(data)` and `unpack(bytes)` arguments.