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

turbolift.handlers.consoleHandler.scala Maven / Gradle / Ivy

The newest version!
package turbolift.handlers
import java.lang.{System => JConsole}
import java.io.{BufferedReader, InputStreamReader}
import turbolift.!!
import turbolift.effects.{ConsoleSignature, ConsoleEffect, IO}
import turbolift.Extensions._


extension (fx: ConsoleEffect)
  def consoleHandler_blocking: fx.ThisHandler[Identity, Identity, IO] =
    IO(new BufferedReader(new InputStreamReader(JConsole.in))) >>=! { breader =>
      new fx.impl.Proxy[IO] with ConsoleSignature:
        override def readChar: Option[Char] !! ThisEffect = IO.blocking { val n = breader.nn.read(); Option.when(n >= 0)(n.toChar) }
        override def readLine: String !! ThisEffect = IO.blocking(breader.nn.readLine().nn)
        override def print(text: String): Unit !! ThisEffect = IO.blocking(JConsole.out.nn.print(text))
        override def printErr(text: String): Unit !! ThisEffect = IO.blocking(JConsole.err.nn.print(text))
        override def printLine(text: String): Unit !! ThisEffect = IO.blocking(JConsole.out.nn.println(text))
        override def printLineErr(text: String): Unit !! ThisEffect = IO.blocking(JConsole.err.nn.println(text))
      .toHandler
    }


  def consoleHandler_nonBlocking: fx.ThisHandler[Identity, Identity, IO] =
    IO(new BufferedReader(new InputStreamReader(JConsole.in))) >>=! { breader =>
      new fx.impl.Proxy[IO] with ConsoleSignature:
        override def readChar: Option[Char] !! ThisEffect = IO { val n = breader.nn.read(); Option.when(n >= 0)(n.toChar) }
        override def readLine: String !! ThisEffect = IO(breader.nn.readLine().nn)
        override def print(text: String): Unit !! ThisEffect = IO(JConsole.out.nn.print(text))
        override def printErr(text: String): Unit !! ThisEffect = IO(JConsole.err.nn.print(text))
        override def printLine(text: String): Unit !! ThisEffect = IO(JConsole.out.nn.println(text))
        override def printLineErr(text: String): Unit !! ThisEffect = IO(JConsole.err.nn.println(text))
      .toHandler
    }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy