@Override protected TypeSerializer<?>[] getNestedSerializers(EitherSerializer outerSerializer) { return new TypeSerializer<?>[]{ outerSerializer.getLeftSerializer(), outerSerializer.getRightSerializer() }; } }
@Override public TypeSerializerSchemaCompatibility<Either<L, R>> resolveSchemaCompatibility( TypeSerializer<Either<L, R>> newSerializer) { checkState(nestedSnapshot != null); if (newSerializer instanceof EitherSerializer) { EitherSerializer<L, R> serializer = (EitherSerializer<L, R>) newSerializer; return nestedSnapshot.resolveCompatibilityWithNested( TypeSerializerSchemaCompatibility.compatibleAsIs(), serializer.getLeftSerializer(), serializer.getRightSerializer()); } else { return TypeSerializerSchemaCompatibility.incompatible(); } } }
@SuppressWarnings("unchecked") private TypeSerializerSchemaCompatibility<Either<L, R>> checkJavaSerializerCompatibility( EitherSerializer<L, R> serializer) { TypeSerializer<L> leftSerializer = serializer.getLeftSerializer(); TypeSerializer<R> rightSerializer = serializer.getRightSerializer(); TypeSerializerSnapshot<L> leftSnapshot = (TypeSerializerSnapshot<L>) getNestedSerializersAndConfigs().get(0).f1; TypeSerializerSnapshot<R> rightSnapshot = (TypeSerializerSnapshot<R>) getNestedSerializersAndConfigs().get(1).f1; TypeSerializerSchemaCompatibility<?> leftCompatibility = leftSnapshot.resolveSchemaCompatibility(leftSerializer); TypeSerializerSchemaCompatibility<?> rightCompatibility = rightSnapshot.resolveSchemaCompatibility(rightSerializer); if (leftCompatibility.isCompatibleAsIs() && rightCompatibility.isCompatibleAsIs()) { return TypeSerializerSchemaCompatibility.compatibleAsIs(); } if (leftCompatibility.isCompatibleAfterMigration() && rightCompatibility.isCompatibleAfterMigration()) { return TypeSerializerSchemaCompatibility.compatibleAfterMigration(); } return TypeSerializerSchemaCompatibility.incompatible(); } }