package interpreter;

import java.io.*;
import java.util.function.Function;

public interface LispInterpreterBuilder {

    void setInput(InputStream inputStream, String inputName);

    void setOutput(PrintStream outputStream);

    void setErrorOutput(PrintStream errorOutputStream);

    void setTerminationFunction(Runnable terminationFunction);

    void setErrorTerminationFunction(Runnable errorTerminationFunction);

    void setNotInteractive();

    void useFile(String fileName);

    void setOutputDecorator(Function<String, String> outputDecorator);

    void setValueOutputDecorator(Function<String, String> valueOutputDecorator);

    void setWarningOutputDecorator(Function<String, String> warningOutputDecorator);

    void setErrorOutputDecorator(Function<String, String> errorOutputDecorator);

    void setCriticalOutputDecorator(Function<String, String> criticalOutputDecorator);

    LispInterpreter build();

    default void reset() {}

}
