| Protocol-XMLRPC documentation | Contained in the Protocol-XMLRPC distribution. |
Protocol::XMLRPC::Value::Struct - XML-RPC struct
my $struct = Protocol::XMLRPC::Value::Struct->new(foo => 'bar');
my $struct = Protocol::XMLRPC::Value::Struct->new({foo => 'bar'});
my $struct =
Protocol::XMLRPC::Value::Struct->new(
foo => Protocol::XMLRPC::Value::String->new('bar'));
XML-RPC struct
newCreates new Protocol::XMLRPC::Value::Struct instance. Elements can be provided as a hash or as a hash reference.
typeReturns 'struct'.
add_member $struct->add_member(foo => 'bar');
$struct->add_member({foo => 'bar'});
$struct->add_member(foo => Protocol::XMLRPC::Value::String->new('bar'));
Adds value to the struct. Can be Perl5 scalar or any Protocol::XMLRCP::Value::* instance, including another struct.
members my $struct = Protocol::XMLRPC::Value::Struct->new(foo => 'bar');
my $members = $struct->members;
Returns hash reference where values are objects.
value my $struct = Protocol::XMLRPC::Value::Struct->new(foo => 'bar');
my $structref = $struct->value;
# $structref is now {foo => 'bar'}
Returns serialized Perl5 hash reference.
to_string my $struct = Protocol::XMLRPC::Value::Struct->new(foo => 'bar');
my $string = $struct->to_string;
# <struct>
# <member>
# <name>foo</name>
# <value><string>bar</string></value>
# </member>
# </struct>'
XML-RPC struct string representation.
Viacheslav Tykhanovskyi, vti@cpan.org.
Copyright (C) 2009, Viacheslav Tykhanovskyi.
This program is free software, you can redistribute it and/or modify it under the same terms as Perl 5.10.
| Protocol-XMLRPC documentation | Contained in the Protocol-XMLRPC distribution. |
package Protocol::XMLRPC::Value::Struct; use strict; use warnings; use Protocol::XMLRPC::ValueFactory; use overload '""' => sub { shift->to_string }, fallback => 1; sub type {'struct'} sub new { my $class = shift; my @values; if (@_ == 1) { @values = ref($_[0]) eq 'HASH' ? %{$_[0]} : ($_[0]); } else { @values = @_; } my $self = {}; bless $self, $class; $self->{_members} = []; for (my $i = 0; $i < @values; $i += 2) { my $name = $values[$i]; my $value = $values[$i + 1]; $self->add_member($name => $value); } return $self; } sub add_member { my $self = shift; my ($key, $value) = @_; push @{$self->{_members}}, ($key => Protocol::XMLRPC::ValueFactory->build($value)); } sub members { my $self = shift; return {@{$self->{_members}}}; } sub value { my $self = shift; my $hash = {}; for (my $i = 0; $i < @{$self->{_members}}; $i += 2) { my $name = $self->{_members}->[$i]; my $value = $self->{_members}->[$i + 1]->value; $hash->{$name} = $value; } return $hash; } sub to_string { my $self = shift; my $string = '<struct>'; for (my $i = 0; $i < @{$self->{_members}}; $i += 2) { my $name = $self->{_members}->[$i]; my $value = $self->{_members}->[$i + 1]->to_string; $string .= "<member><name>$name</name><value>$value</value></member>"; } $string .= '</struct>'; return $string; } 1; __END__