Aion-Enum

 view release on metacpan or  search on metacpan

lib/Aion/Enum.pm  view on Meta::CPAN

# Получить case по имени
sub tryFromName {
	my ($cls, $name) = @_;
	my ($case) = grep { $_->{name} ~~ $name } $cls->cases;
	$case
}

# Получить case по значению c исключением
sub fromValue {
	my ($cls, $value) = @_;
	my $case = $cls->tryFromValue($value);
    die "Did not case with value `$value`!" unless defined $case;
	$case
}

# Получить case по значению
sub tryFromValue {
	my ($cls, $value) = @_;
	my ($case) = grep { $_->{value} ~~ $value } $cls->cases;
	$case
}

# Получить case по значению c исключением
sub fromStash {
	my ($cls, $stash) = @_;
	my $case = $cls->tryFromStash($stash);
    die "Did not case with stash `$stash`!" unless defined $case;
	$case
}

# Получить case по значению
sub tryFromStash {
	my ($cls, $stash) = @_;
	my ($case) = grep { $_->{stash} ~~ $stash } $cls->cases;
	$case
}

# Получить case по псевдониму c исключением
sub fromAlias {
	my ($cls, $alias) = @_;
	my $case = $cls->tryFromAlias($alias);
    die "Did not case with alias `$alias`!" unless defined $case;
	$case
}

# Получить case по псевдониму
sub tryFromAlias {
	my ($cls, $alias) = @_;
	my ($case) = grep { $_->{alias} ~~ $alias } $cls->cases;
	$case
}

1;

__END__

=encoding utf-8

=head1 NAME

Aion :: Enum - Listing in the style of OOP, when each renewal is an object

=head1 VERSION

0.0.3

=head1 SYNOPSIS

File lib/StatusEnum.pm:

	package StatusEnum;
	
	use Aion::Enum;
	
	# Active status
	case active => 1, 'Active';
	
	# Passive status
	case passive => 2, 'Passive';
	
	1;



	use StatusEnum;
	
	&StatusEnum::active->does('Aion::Enum') # => 1
	
	StatusEnum->active->name   # => active
	StatusEnum->passive->value # => 2
	StatusEnum->active->alias  # => Active status
	StatusEnum->passive->stash # => Passive
	
	[ StatusEnum->cases   ] # --> [StatusEnum->active, StatusEnum->passive]
	[ StatusEnum->names   ] # --> [qw/active passive/]
	[ StatusEnum->values  ] # --> [qw/1 2/]
	[ StatusEnum->aliases ] # --> ['Active status', 'Passive status']
	[ StatusEnum->stashes ] # --> [qw/Active Passive/]

=head1 DESCRIPTION

C<Aion :: Enum> allows you to create transfers-objects. These transfers may contain additional methods and properties. You can add roles to them (using C<with>) or use them as a role.

An important feature is the preservation of the procedure for listing.

C<Aion::Enum> is similar to php8 enums, but has the additional properties C<alias> and C<stash>.

=head1 SUBROUTINES

=head2 case ($name, [$value, [$stash]])

Creates a listing: his constant.

	package OrderEnum {
	    use Aion::Enum;
	
	    case 'first';
	    case second => 2;
	    case other  => 3, {data => 123};
	}
	



( run in 1.472 second using v1.01-cache-2.11-cpan-b16cb0d3907 )