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) !! (),
],
);
}
}