/** * Since this coder uses elementCoders.get(index) and coders that are known to run in constant * time, we defer the return value to that coder. */ @Override public boolean isRegisterByteSizeObserverCheap(RawUnionValue union, Context context) { int index = getIndexForEncoding(union); @SuppressWarnings("unchecked") Coder<Object> coder = (Coder<Object>) elementCoders.get(index); return coder.isRegisterByteSizeObserverCheap(union.getValue(), context); }
/** Notifies ElementByteSizeObserver about the byte size of the encoded value using this coder. */ @Override public void registerByteSizeObserver( RawUnionValue union, ElementByteSizeObserver observer, Context context) throws Exception { int index = getIndexForEncoding(union); // Write out the union tag. observer.update(VarInt.getLength(index)); // Write out the actual value. @SuppressWarnings("unchecked") Coder<Object> coder = (Coder<Object>) elementCoders.get(index); coder.registerByteSizeObserver(union.getValue(), observer, context); }
@SuppressWarnings("unchecked") @Override public void encode(RawUnionValue union, OutputStream outStream, Context context) throws IOException, CoderException { int index = getIndexForEncoding(union); // Write out the union tag. VarInt.encode(index, outStream); // Write out the actual value. Coder<Object> coder = (Coder<Object>) elementCoders.get(index); coder.encode(union.getValue(), outStream, context); }