Release commit for 0.001004
[scpubgit/Tak.git] / lib / Tak / Request.pm
1 package Tak::Request;
2
3 use Tak::Result;
4 use Moo;
5
6 has on_progress => (is => 'ro');
7
8 has on_result => (is => 'ro', required => 1);
9
10 has is_done => (is => 'rw', default => sub { 0 });
11
12 sub progress {
13   my ($self, @report) = @_;
14   if (my $cb = $self->on_progress) {
15     $cb->(@report);
16   }
17 }
18
19 sub result {
20   my ($self, $type, @data) = @_;
21   $self->is_done(1);
22   $self->on_result->(Tak::Result->new(type => $type, data => \@data));
23 }
24
25 sub flatten {
26   my ($self) = @_;
27   return ($self->type, @{$self->data});
28 }
29
30 sub success { shift->result(success => @_) }
31 sub mistake { shift->result(mistake => @_) }
32 sub failure { shift->result(failure => @_) }
33 sub fatal { shift->result(fatal => @_) }
34
35 1;