DM
use Coro::AnyEvent;
use AnyEvent;
use Promises qw(deferred);
sub handle {
my ($self, $env) = @_;
return deferred->resolve([200, ['content-type' => 'application/json; charset=UTF-8'], ['{"status":"ok"}']])->promise;
}
sub app {
my $self = shift;
return sub {
my $env = shift;
my $promise = $self->handle($env);
return [500, ['content-type' => 'text/plain'], ['internal server error']]
unless blessed $promise && $promise->isa('Promises::Promise');
my $cv = AnyEvent->condvar;
$promise->done(
sub { $cv->send($_[0]) },
sub { $cv->send($_[0]) },
);
return $cv->recv;
}
}