package Getopt::Dakkar::Role::Piece;
use Getopt::Dakkar::Style qw(role);
has name => ( is => 'ro', isa => Str, required => 1 );
has aliases => ( is => 'ro', isa => ArrayRef[Str], default => sub { [] } );
has matching_strings => (
is => 'lazy',
isa => ArrayRef[Str],
init_arg => 'matches',
);
sub _build_matching_strings($self) { [ $self->name, $self->aliases->@* ] }
has class => ( is => 'ro', isa => ClassName, default => 'Getopt::Dakkar::Stash' );
has object => ( is => 'ro', isa => Object );
has op => ( is => 'ro', isa => Str|CodeRef );
sub make_stash($self,$argpack) {
if (my $o = $self->object) { return $o }
my $class = use_module($self->class);
if (my $from_argpack = $class->can('new_from_argpack')) {
return $class->$from_argpack($argpack);
}
else {
return $class->new();
}
}
requires qw(parse match);