You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Adapts parts of design of preexisting purely-functional HTTP libraries (Http4s, ZIO-Http) for the new effect system.
Design
Services are defined as values of type:
typeService[U] =Response[U] !! (RequestEffect&U)
Which should be read as: "Computation, that returnsResponse and requests effects: RequestEffect and U".
Where U means user selected set of effects involved in computing the response.
RequestEffect is an instance of Turbolift's Reader effect, predefined in Enterprise.
Examples of ptional effects, predefined in Enterprise, are:
ResponseError - An instance of Turbolift's Error effect. Allows interruption of processing of the request, returning given Response value.
RouterEffect - An instance of Turbolift's Choice effect. Allows defining routes by partial functions. Composition can be done with Turbolift's ++! operator (similar to <|> of Alternative).
Such effects can be handled at:
Request scope: before .serve call (i.e. once per each served request).
Server scope: after .serve call (i.e. once per server launch).
Multiple handlers can be chained, using Turbolift's &&&! operator.
Example
Run the server with scala-cli:
Important
Turbolift requires Java 11 or newer.
//>usingscala"3.3.7"//>usingdep"io.github.marcinzh::enterprise-core:0.12.0"packageexamplesimportturbolift.!!importturbolift.Extensions._importenterprise.{Response, Router}
importenterprise.DSL._importenterprise.server.Syntax._importenterprise.server.undertow.UndertowServer@main defmain=Router:caseGET/"sarcastic"/ text =>valtext2= text.zipWithIndex.map((c, i) =>if i %2==0then c.toLower else c.toUpper).mkString
Response.text(text2).pure_!!
.handleWith(Router.handler)
.serve
.handleWith(UndertowServer.handler)
.handleWith(Config.localhost(9000).handler)
.runIO
Query the server with HTTPie:
http GET "https://localhost:9000/sarcastic/Resistance is futile"