Example usage:
import sttp.tapir.server.akkahttp._
import com.quasigroup.inc.basic.Entrance
import com.quasigroup.zio.akka.classic
import com.quasigroup.zio.akka.classic.http._
import com.quasigroup.zio.akka.models.BindOn
import zio._
import zio.console._
import scala.concurrent.{ExecutionContext, Future}
object Main extends App {
def run(args: List[String]) = (for {
(name, binding) <- IO.succeed(("test", BindOn("127.0.0.1",8080))) // try using config to populate these
routing <- IO.succeed[ToRoute](ec => Entrance.indexHtml.toRoute(_ => Future(Right("hello world"))(ec)))
_ <- (for {
akka <- classic.start(name)
_ <- classic.http.start(binding,routing).provide(akka)
} yield {}).use(_ => getStrLn)
} yield {}).provideLayer(Console.live).run.exitCode
}
Note: Entrance.indexHtml
is a tapir
endpoint from my other project: https://github.com/neomaclin/endpoints.
Or, if that was too much to get started, just for a quick demo to get a taste of what zio and akka do.
import com.quasigroup.zio.akka.classic
import com.quasigroup.zio.akka.classic.http._
import zio._
import zio.console._
object Main extends App {
def run(args: List[String]) =
(ZIO.environment[Binding] *> getStrLn).provideLayer(Console.live ++ classic.http.demo).exitCode
}