protected ShardedKeyCoder(Coder<KeyT> keyCoder) { this.keyCoder = keyCoder; this.shardNumberCoder = VarIntCoder.of(); }
@Override public void snapshotKeyGroupState(int keyGroupIndex, DataOutputStream out) throws Exception { Set<ByteBuffer> ids = dedupingCache.get(keyGroupIndex).asMap().keySet(); VarIntCoder.of().encode(ids.size(), out, Context.NESTED); for (ByteBuffer id : ids) { ByteArrayCoder.of().encode(id.array(), out, Context.NESTED); } }
@Override public void verifyDeterministic() { VarIntCoder.of().verifyDeterministic(); VarLongCoder.of().verifyDeterministic(); }
@Override public BigDecimal decode(InputStream inStream, Context context) throws IOException, CoderException { int scale = VAR_INT_CODER.decode(inStream); BigInteger bigInteger = BIG_INT_CODER.decode(inStream, context); return new BigDecimal(bigInteger, scale); }
@Override public void encode(BigDecimal value, OutputStream outStream, Context context) throws IOException, CoderException { checkNotNull(value, String.format("cannot encode a null %s", BigDecimal.class.getSimpleName())); VAR_INT_CODER.encode(value.scale(), outStream); BIG_INT_CODER.encode(value.unscaledValue(), outStream, context); }
@Override public void verifyDeterministic() throws NonDeterministicException { VAR_INT_CODER.verifyDeterministic(); BIG_INT_CODER.verifyDeterministic(); }
@Override public ShardedKey<KeyT> decode(InputStream inStream) throws IOException { return ShardedKey.of(keyCoder.decode(inStream), shardNumberCoder.decode(inStream)); }
@Override public void encode(CustomWindow window, OutputStream outStream) throws IOException { INTERVAL_WINDOW_CODER.encode(window, outStream); VAR_INT_CODER.encode(window.isBig ? 1 : 0, outStream); }
@Override public void verifyDeterministic() throws NonDeterministicException { INTERVAL_WINDOW_CODER.verifyDeterministic(); VAR_INT_CODER.verifyDeterministic(); } }
@Override public Coder<Integer> getStateCoder() { return VarIntCoder.of(); }
@Override public MyInteger decode(InputStream inStream) throws CoderException, IOException { return new MyInteger(delegate.decode(inStream)); } }
@Override public void encode(ShardedKey<KeyT> key, OutputStream outStream) throws IOException { keyCoder.encode(key.getKey(), outStream); shardNumberCoder.encode(key.getShardNumber(), outStream); }
@Override public KafkaRecord<K, V> decode(InputStream inStream) throws IOException { return new KafkaRecord<>( stringCoder.decode(inStream), intCoder.decode(inStream), longCoder.decode(inStream), longCoder.decode(inStream), KafkaTimestampType.forOrdinal(intCoder.decode(inStream)), (Headers) toHeaders(headerCoder.decode(inStream)), kvCoder.decode(inStream)); }
@Override public void encode(MyInteger value, OutputStream outStream) throws CoderException, IOException { delegate.encode(value.getValue(), outStream); }