X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FTak%2FRequest.pm;h=abb5ad593f24d80cd2c58d9451c646db17037daa;hb=ac3e780c183dfb0a70dfce38f4766cfd587a3575;hp=2ba8262358821aa02bdeb2f6578672521933ec1d;hpb=ca30c15e4b434c7ba6dbe61ed2df9125806d93ab;p=scpubgit%2FTak.git diff --git a/lib/Tak/Request.pm b/lib/Tak/Request.pm index 2ba8262..abb5ad5 100644 --- a/lib/Tak/Request.pm +++ b/lib/Tak/Request.pm @@ -1,16 +1,35 @@ package Tak::Request; +use Tak::Result; use Moo; -has tag => (is => 'ro', required => 1); +has on_progress => (is => 'ro'); -has respond_to => (is => 'ro', required => 1, weak_ref => 1); +has on_result => (is => 'ro', required => 1); -has respond_with => (is => 'ro', required => 1); +has is_done => (is => 'rw', default => sub { 0 }); -sub respond { - my $self = shift; - $self->respond_to->${\$self->respond_with}($self->tag => @_); +sub progress { + my ($self, @report) = @_; + if (my $cb = $self->on_progress) { + $cb->(@report); + } } +sub result { + my ($self, $type, @data) = @_; + $self->is_done(1); + $self->on_result->(Tak::Result->new(type => $type, data => \@data)); +} + +sub flatten { + my ($self) = @_; + return ($self->type, @{$self->data}); +} + +sub success { shift->result(success => @_) } +sub mistake { shift->result(mistake => @_) } +sub failure { shift->result(failure => @_) } +sub fatal { shift->result(fatal => @_) } + 1;