class VersionedBackupProcessorSerializer implements StreamSerializer<VersionedBackupProcessor>, TypedStreamDeserializer<VersionedBackupProcessor> {

    private final int typeId;

    public VersionedBackupProcessorSerializer(int typeId) {
        this.typeId = typeId;
    }
    public VersionedBackupProcessorSerializer() {
        this.typeId = SerializationUtilities.getSerializerTypeId(this.getClass());
    }

    public Class<VersionedBackupProcessor> getSerializableType() {
        return VersionedBackupProcessor.class;
    }

    @Override
    public int getTypeId() {
        return typeId;
    }

    @Override
    public void destroy() {

    }

    @Override
    public void write(ObjectDataOutput out, VersionedBackupProcessor serializable) throws IOException {
        out.writeInt(v_8_10_0.getNumber());
        out.writeByteArray(serializable.getState());
        if (serializable.getTtlMillis() != null) {
            out.writeBoolean(true);
            out.writeLong(serializable.getTtlMillis());
        } else {
            out.writeBoolean(false);
        }
    }

    @Override
    public VersionedBackupProcessor read(ObjectDataInput in) throws IOException {
        return read0(in);
    }

    @Override
    public VersionedBackupProcessor read(ObjectDataInput in, Class aClass) throws IOException {
        return read0(in);
    }

    private VersionedBackupProcessor read0(ObjectDataInput in) throws IOException {<FILL_FUNCTION_BODY>}

}

        int version = in.readInt();
        Versions.check(version, v_8_10_0, v_8_10_0);
        byte[] state = in.readByteArray();
        Long ttlMillis = in.readBoolean() ? in.readLong() : null;
        return new VersionedBackupProcessor(state, ttlMillis);
    
<no_super_class>