require
5.008;
our
$VERSION
=
'2.20231031'
;
sub
_HAS_CHILDREN{
return
1; }
sub
_ALLOWED_CHILDREN {
my
(
$self
,
$child
) =
@_
;
return
1
if
ref
$child
eq
'Mail::AuthenticationResults::Header'
;
return
1
if
ref
$child
eq
'Mail::AuthenticationResults::Header::AuthServID'
;
return
1
if
ref
$child
eq
'Mail::AuthenticationResults::Header::Comment'
;
return
1
if
ref
$child
eq
'Mail::AuthenticationResults::Header::Entry'
;
return
1
if
ref
$child
eq
'Mail::AuthenticationResults::Header::Group'
;
return
1
if
ref
$child
eq
'Mail::AuthenticationResults::Header::SubEntry'
;
return
1
if
ref
$child
eq
'Mail::AuthenticationResults::Header::Version'
;
return
0;
}
sub
add_child {
my
(
$self
,
$child
) =
@_
;
croak
'Cannot add child'
if
!
$self
->_ALLOWED_CHILDREN(
$child
);
croak
'Cannot add a class as its own parent'
if
refaddr
$self
== refaddr
$child
;
if
(
ref
$child
eq
'Mail::AuthenticationResults::Header::Group'
) {
foreach
my
$subchild
( @{
$child
->children() } ) {
$self
->add_child(
$subchild
);
}
}
else
{
foreach
my
$current_child
( @{
$self
->children() } ) {
if
(
$current_child
==
$child
) {
return
$child
;
}
}
$self
->SUPER::add_child(
$child
);
}
return
$child
;
}
sub
build_string {
my
(
$self
,
$header
) =
@_
;
my
$sep
= 0;
foreach
my
$child
( @{
$self
->children() } ) {
$header
->separator(
';'
)
if
$sep
;
$header
->space(
"\n"
)
if
$sep
;
$sep
= 1;
$child
->build_string(
$header
);
}
return
;
}
1;