All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.tonivade.purefun.effect.util.PureConsole Maven / Gradle / Ivy

/*
 * Copyright (c) 2018-2022, Antonio Gabriel Muñoz Conejo 
 * Distributed under the terms of the MIT License
 */
package com.github.tonivade.purefun.effect.util;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.Queue;

import com.github.tonivade.purefun.Unit;
import com.github.tonivade.purefun.effect.RIO;

public interface PureConsole {

   PureConsole.Service console();

  static  RIO readln() {
    return RIO.accessM(env -> env.console().readln());
  }

  static  RIO println(String text) {
    return RIO.accessM(env -> env.console().println(text));
  }

  interface Service {
    RIO readln();

    RIO println(String text);
  }

  static PureConsole test(final Queue input, final Queue output) {
    return new PureConsole() {

      @Override
      public  Service console() {
        return new PureConsole.Service() {

          @Override
          public RIO readln() {
            return RIO.task(input::poll);
          }

          @Override
          public RIO println(String text) {
            return RIO.exec(() -> output.offer(text));
          }
        };
      }
    };
  }

  static PureConsole live() {
    return new PureConsole() {

      @Override
      public  Service console() {
        return new PureConsole.Service() {

          @Override
          public RIO readln() {
            return RIO.task(() -> reader().readLine());
          }

          @Override
          public RIO println(String text) {
            return RIO.exec(() -> writer().println(text));
          }

          private BufferedReader reader() {
            return new BufferedReader(new InputStreamReader(System.in));
          }

          private PrintWriter writer() {
            return new PrintWriter(System.out, true);
          }
        };
      }
    };
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy