1package Net::Amazon::S3::Request::Role::XML::Content;
2# ABSTRACT: Role providing XML content
3$Net::Amazon::S3::Request::Role::XML::Content::VERSION = '0.99';
4use Moose::Role;
5
6with 'Net::Amazon::S3::Request::Role::HTTP::Header::Content_length';
7with 'Net::Amazon::S3::Request::Role::HTTP::Header::Content_type' => { content_type => 'application/xml' };
8
9sub _build_xml {
10	my ($self, $root_name, $root_content) = @_;
11
12	my $ns = Net::Amazon::S3::Constants->S3_NAMESPACE_URI;
13
14	my $xml_doc = XML::LibXML::Document->new ('1.0','UTF-8');
15	my $root_element = $xml_doc->createElementNS ($ns, $root_name);
16	$xml_doc->setDocumentElement ($root_element);
17
18	my @queue = ([ $root_element, $root_content ]);
19	while (my $node = shift @queue) {
20		my ($parent, $content) = @$node;
21
22		for my $tag (@$content) {
23			my ($tag_name, $tag_content) = %$tag;
24			my $tag_node = $parent->addNewChild ($ns, $tag_name);
25
26			if (ref $tag_content) {
27				push @queue, [$tag_node, $tag_content];
28				next;
29			}
30
31			if (defined $tag_content && length $tag_content) {
32				$tag_node->addChild ($xml_doc->createTextNode ($tag_content));
33				next;
34			}
35		}
36	}
37
38	$xml_doc->toString;
39}
40
411;
42
43__END__
44
45=pod
46
47=encoding UTF-8
48
49=head1 NAME
50
51Net::Amazon::S3::Request::Role::XML::Content - Role providing XML content
52
53=head1 VERSION
54
55version 0.99
56
57=head1 AUTHOR
58
59Branislav Zahradník <barney@cpan.org>
60
61=head1 COPYRIGHT AND LICENSE
62
63This software is copyright (c) 2021 by Amazon Digital Services, Leon Brocard, Brad Fitzpatrick, Pedro Figueiredo, Rusty Conover, Branislav Zahradník.
64
65This is free software; you can redistribute it and/or modify it under
66the same terms as the Perl 5 programming language system itself.
67
68=cut
69