use v6.d.PREVIEW; use Cro::HTTP::Router; class Ultramarine::Controller { has $.license is required; has $.authorisation is required; sub respond(*@body) { response.status = 200; response.set-body(@body); } submethod inner-routes() { return route { # this needs to be here, not in the Server because its # short-circuited "unauthorised" response will be emited # in an 'after' middleware, but the # ResponseSerializerExtension is applied just before those # middlewares, so our serialised won't be seen by the # "unauthorised" response before $!authorisation; post -> 'ping.view' { respond [] } post -> 'getLicense.view' { respond [ license => [ |%($!license.status) ] ], } } } method routes() { return route { include rest => self.inner-routes(), } } }