SerializableFST.java

package org.wikimedia.search.glent.fst;

import java.io.IOException;
import java.io.InvalidObjectException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.ObjectStreamException;
import java.io.Serializable;

import org.apache.lucene.store.InputStreamDataInput;
import org.apache.lucene.store.OutputStreamDataOutput;
import org.apache.lucene.util.fst.FST;
import org.apache.lucene.util.fst.NoOutputs;

public class SerializableFST implements Serializable {

    private FST<Object> automaton;

    private SerializableFST() {
        // Only for deserialization
    }

    SerializableFST(FST<Object> automaton) {
        this.automaton = automaton;
    }

    FST<Object> getFST() {
        return automaton;
    }

    private void writeObject(ObjectOutputStream out) throws IOException {
        OutputStreamDataOutput osdo = new OutputStreamDataOutput(out);
        automaton.save(osdo);
    }

    private void readObject(ObjectInputStream in) throws IOException {
        automaton = new FST<>(new InputStreamDataInput(in), NoOutputs.getSingleton());
    }

    private void readObjectNoData() throws ObjectStreamException {
        throw new InvalidObjectException("SerializableFST cannot be empty");
    }
}