Firewall-Config-Parser
view release on metacpan or search on metacpan
lib/Firewall/Config/Parser/Elements.pm view on Meta::CPAN
package Firewall::Config::Parser::Elements;
#------------------------------------------------------------------------------
# å è½½æ©å±æ¨¡å
#------------------------------------------------------------------------------
use Carp;
use Moose;
use namespace::autoclean;
#------------------------------------------------------------------------------
# å è½½ Firewall::Config::Element å屿§è§è²ï¼å®ç°å±æ§æ ¡éª
#------------------------------------------------------------------------------
use Firewall::Config::Element::Address::Role;
use Firewall::Config::Element::AddressGroup::Role;
use Firewall::Config::Element::DynamicNat::Role;
use Firewall::Config::Element::Interface::Role;
use Firewall::Config::Element::NatPool::Role;
use Firewall::Config::Element::Protocol::Role;
use Firewall::Config::Element::ProtocolGroup::Role;
use Firewall::Config::Element::Route::Role;
use Firewall::Config::Element::Rule::Role;
use Firewall::Config::Element::Schedule::Role;
use Firewall::Config::Element::Service::Role;
use Firewall::Config::Element::ServiceGroup::Role;
use Firewall::Config::Element::ServiceMeta::Role;
use Firewall::Config::Element::StaticNat::Role;
use Firewall::Config::Element::Zone::Role;
#------------------------------------------------------------------------------
# Firewall::Config::Parser::Elements éç¨å±æ§
#------------------------------------------------------------------------------
has natPool => ( is => 'ro', does => 'HashRef[Firewall::Config::Element::NatPool::Role]', default => sub { {} }, );
has zone => ( is => 'ro', does => 'HashRef[Firewall::Config::Element::Zone::Role]', default => sub { {} }, );
has interface => ( is => 'ro', does => 'HashRef[Firewall::Config::Element::Interface::Role]', default => sub { {} }, );
has route => ( is => 'ro', does => 'HashRef[Firewall::Config::Element::Route::Role]', default => sub { {} }, );
has staticNat => ( is => 'ro', does => 'HashRef[Firewall::Config::Element::StaticNat::Role]', default => sub { {} }, );
has dynamicNat =>
( is => 'ro', does => 'HashRef[Firewall::Config::Element::DynamicNat::Role]', default => sub { {} }, );
has address => ( is => 'ro', does => 'HashRef[Firewall::Config::Element::Address::Role]', default => sub { {} }, );
has addressGroup =>
( is => 'ro', does => 'HashRef[Firewall::Config::Element::AddressGroup::Role]', default => sub { {} }, );
has protocolGroup =>
( is => 'ro', does => 'HashRef[Firewall::Config::Element::ProtocolGroup::Role]', default => sub { {} }, );
has schedule => ( is => 'ro', does => 'HashRef[Firewall::Config::Element::Schedule::Role]', default => sub { {} }, );
has service => ( is => 'ro', does => 'HashRef[Firewall::Config::Element::Service::Role]', default => sub { {} }, );
has serviceGroup =>
( is => 'ro', does => 'HashRef[Firewall::Config::Element::ServiceGroup::Role]', default => sub { {} }, );
has rule => ( is => 'ro', does => 'HashRef[Firewall::Config::Element::Rule::Role]', default => sub { {} }, );
#------------------------------------------------------------------------------
# addElement æ°å¢è§£æå¯¹è±¡å
ç´ ç±»å
#------------------------------------------------------------------------------
sub addElement {
my ( $self, $obj ) = @_;
#say dumper $obj;
my $className = ref($obj);
if ( $className =~ /^Firewall::Config::Element::(?<elementType>\w+)::\w+$/o ) {
my $elementType = lcfirst $+{elementType};
$self->setElement( $elementType, $obj->sign, $obj );
}
else {
confess "ERROR: obj must be an object of Firewall::Config::Element::xxxx";
}
}
#------------------------------------------------------------------------------
# setElement 设置解æå¯¹è±¡å
ç´ ç±»å
# https://metacpan.org/pod/distribution/Moose/lib/Moose/Manual/Roles.pod
#------------------------------------------------------------------------------
sub setElement {
my ( $self, $elementType, $sign, $obj ) = @_;
confess "ERROR: elementType can't be Undef" unless defined $elementType;
confess "ERROR: sign can't be Undef" unless defined $sign;
$elementType = lcfirst $elementType;
# 夿å®ä¾å对象 obj æ¯å¦ does(roleName)
my $roleName = 'Firewall::Config::Element::' . ucfirst($elementType) . '::Role';
confess "ERROR: obj must implement Role $roleName" unless $obj->does($roleName);
$self->{$elementType}{$sign} = $obj;
}
#------------------------------------------------------------------------------
# getElement è·å对象å叿 è®°
#------------------------------------------------------------------------------
sub getElement {
my ( $self, $elementType, $sign ) = @_;
confess "ERROR: elementType can't be Undef" unless defined $elementType;
confess "ERROR: sign can't be Undef" unless defined $sign;
$elementType = lcfirst $elementType;
return $self->$elementType->{$sign};
}
__PACKAGE__->meta->make_immutable;
1;
( run in 0.681 second using v1.01-cache-2.11-cpan-39bf76dae61 )