@Override public CompatibilityResult<T> ensureCompatibility(TypeSerializerConfigSnapshot configSnapshot) { if (configSnapshot instanceof NullableSerializerConfigSnapshot) { List<Tuple2<TypeSerializer<?>, TypeSerializerConfigSnapshot>> previousKvSerializersAndConfigs = ((NullableSerializerConfigSnapshot) configSnapshot).getNestedSerializersAndConfigs(); CompatibilityResult<T> compatResult = CompatibilityUtil.resolveCompatibilityResult( previousKvSerializersAndConfigs.get(0).f0, UnloadableDummyTypeSerializer.class, previousKvSerializersAndConfigs.get(0).f1, originalSerializer); if (!compatResult.isRequiresMigration()) { return CompatibilityResult.compatible(); } else if (compatResult.getConvertDeserializer() != null) { return CompatibilityResult.requiresMigration( new NullableSerializer<>( new TypeDeserializerAdapter<>(compatResult.getConvertDeserializer()), padNullValue())); } } return CompatibilityResult.requiresMigration(); }
@Override public NullableSerializerConfigSnapshot<T> snapshotConfiguration() { return new NullableSerializerConfigSnapshot<>(originalSerializer); }
@Override public TypeSerializerSchemaCompatibility<T> resolveSchemaCompatibility(TypeSerializer<T> newSerializer) { NullableSerializer<T> previousSerializer = (NullableSerializer<T>) restoreSerializer(); NullableSerializerSnapshot<T> newCompositeSnapshot = new NullableSerializerSnapshot<>(previousSerializer.nullPaddingLength()); return CompositeTypeSerializerUtil.delegateCompatibilityCheckToNewSnapshot( newSerializer, newCompositeSnapshot, getSingleNestedSerializerAndConfig().f1 ); } }