Commit | Line | Data |
31a246e4 |
1 | package Tak::Role::Service; |
2 | |
3 | use Moo::Role; |
4 | |
5 | sub start_request { |
77bf1d9b |
6 | my ($self, $req, $type, @payload) = @_; |
31a246e4 |
7 | unless ($type) { |
8 | $req->mistake(request_type => "No request type given"); |
9 | return; |
10 | } |
11 | if (my $meth = $self->can("handle_${type}")) { |
12 | my @result; |
77bf1d9b |
13 | if (eval { @result = $self->$meth(@payload); 1 }) { |
31a246e4 |
14 | $req->success(@result); |
15 | } else { |
16 | if (ref($@) eq 'ARRAY') { |
17 | $req->result(@{$@}); |
18 | } else { |
19 | $req->failure(exception => $@); |
20 | } |
21 | } |
77bf1d9b |
22 | } elsif ($meth = $self->can("start_${type}_request")) { |
23 | $self->$meth($req => @payload); |
31a246e4 |
24 | } else { |
25 | $req->mistake(request_type => "Unknown request type ${type}"); |
26 | } |
27 | } |
28 | |
77bf1d9b |
29 | sub receive { |
30 | my ($self, $type, @payload) = @_; |
31 | if (my $meth = $self->can("receive_${type}")) { |
32 | $self->$meth(@payload); |
33 | } |
34 | } |
31a246e4 |
35 | |
36 | 1; |