use v6.d.PREVIEW; use Cro::HTTP::Server; use Cro::HTTP::Request; use Cro::HTTP::Response; class Ultramarine::Server { has $.authentication is required; has @.serialisers is required; has $.set-content-type is required; has $.controller is required; has $.host = 'localhost'; has $.port = 8080; has $.do-trace = False; my class Trace does Cro::Transform { has $.type is required; method consumes() { $!type } method produces() { $!type } method transformer(Supply $input --> Supply) { supply whenever $input -> $thing { say $thing.trace-output,"\n"; say (await $thing.body-text).indent(2); emit $thing; } } } method server() { return Cro::HTTP::Server.new( :$!host, :$!port, application => $!controller, before => [ $.do-trace ?? Trace.new(type=>Cro::HTTP::Request) !! (), $.authentication, ], add-body-serializers => @.serialisers, after => [ $.set-content-type, $.do-trace ?? Trace.new(type=>Cro::HTTP::Response) !! (), ], ); } }