1 package Tak::MetaService;
4 use Log::Contextual qw(:log);
7 with 'Tak::Role::Service';
9 has router => (is => 'ro', required => 1, weak_ref => 1);
18 return "Already have ${name}" if $self->router->services->{$name};
19 $self->handle_register(@_);
23 my ($self, $name, $class, %args) = @_;
24 (my $file = $class) =~ s/::/\//g;
26 my $router = $self->router;
27 if (my $expose = delete $args{expose}) {
28 foreach my $name (keys %$expose) {
29 if (my ($svc, @rest) = @{$expose->{$name}}) {
30 die "router has no service ${svc}"
31 unless my $service = $router->services->{$svc};
33 Scalar::Util::isweak($router->services->{$svc})
37 $args{$name} = $client_class->new(service => $service)
40 $args{$name} = Tak::WeakClient->new(service => $router);
44 my $new = $class->new(\%args);
45 $router->register($name => $new);
46 return "Registered ${name}";