package Tak::Router;
use Tak::MetaService;
+use Scalar::Util qw(weaken);
use Moo;
has services => (is => 'ro', default => sub { {} });
sub start_request {
my ($self, $req, $target, @payload) = @_;
- $req->mistake("Reached router with no target")
+ return $req->mistake("Reached router with no target")
unless $target;
- $req->failure("Reached router with invalid target ${target}")
+ return $req->failure("Reached router with invalid target ${target}")
unless my $next = $self->services->{$target};
$next->start_request($req, @payload);
}
$self->services->{$name} = $service;
}
+sub register_weak {
+ my ($self, $name, $service) = @_;
+ weaken($self->services->{$name} = $service);
+}
+
sub deregister {
my ($self, $name) = @_;
delete $self->services->{$name}