new remote code
[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 sub progress {
11   my ($self, @report) = @_;
12   if (my $cb = $self->on_progress) {
13     $cb->(@report);
14   }
15 }
16
17 sub result {
18   my ($self, $type, @data) = @_;
19   $self->on_result->(Tak::Result->new(type => $type, data => \@data));
20 }
21
22 sub flatten {
23   my ($self) = @_;
24   return ($self->type, @{$self->data});
25 }
26
27 sub success { shift->result(success => @_) }
28 sub mistake { shift->result(mistake => @_) }
29 sub failure { shift->result(failure => @_) }
30 sub fatal { shift->result(fatal => @_) }
31
32 1;