package interpreter;

import java.io.InputStream;
import java.io.PrintStream;
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 setPromptDecorator(Function<String, String> decorator);

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

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

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

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

    LispInterpreter build();

    default void reset() {}

}
