class LengthPrefixBaseCoderImpl(ABC): """ LengthPrefixBaseCoder will be used in Operations and other coders will be the field coder of LengthPrefixBaseCoder. """ def __init__(self, field_coder: 'FieldCoderImpl'): self._field_coder = field_coder self._data_out_stream = OutputStream() def _write_data_to_output_stream(self, out_stream: OutputStream): out_stream.write_var_int64(self._data_out_stream.size()) out_stream.write(self._data_out_stream.get()) self._data_out_stream.clear()
class BeamCoderImpl(StreamCoderImpl): def __init__(self, value_coder): self._value_coder = value_coder self._data_output_stream = OutputStream() def encode_to_stream(self, value, out_stream: create_OutputStream, nested): self._value_coder.encode_to_stream(value, self._data_output_stream) out_stream.write(self._data_output_stream.get()) self._data_output_stream.clear() def decode_from_stream(self, in_stream: create_InputStream, nested): data_input_stream = BeamInputStream(in_stream) return self._value_coder.decode_from_stream(data_input_stream) def __repr__(self): return 'BeamCoderImpl[%s]' % self._value_coder
class FlinkCoderBeamWrapper(StreamCoderImpl): """ Bridge between Beam coder and Flink coder. """ def __init__(self, value_coder): self._value_coder = value_coder self._data_output_stream = OutputStream() def encode_to_stream(self, value, out_stream: create_OutputStream, nested): self._value_coder.encode_to_stream(value, self._data_output_stream) out_stream.write(self._data_output_stream.get()) self._data_output_stream.clear() def decode_from_stream(self, in_stream: create_InputStream, nested): data_input_stream = BeamInputStream(in_stream) return self._value_coder.decode_from_stream(data_input_stream) def __repr__(self): return 'FlinkCoderBeamWrapper[%s]' % self._value_coder