The Perl and Raku Conference 2025: Greenville, South Carolina - June 27-29 Learn more

use Carp;
attr 'router' => sub { croak 'router is required' };
attr 'parent' => sub { croak 'parent is required' };
sub add
{
my ($self, $pattern, $descr, $parent_data) = @_;
my $parent = $self->parent;
croak "Cannot chain 'add' calls because the parent route was not parsed correctly"
unless $parent;
# discard $parent_data from args
$parent_data = {
($parent->has_name ? (name => $parent->name) : ()),
pattern => $parent->pattern,
};
# parent is a bridge now (even if the add call fails)
$parent->bridge(1);
return $self->router->add($pattern, $descr, $parent_data);
}
1;
# internal only
# It's not a router reimplementation! It's just a facade for the add method of
# the router. Developers will interact with it without even knowing.