Protocol::XMLRPC::Value::Struct - XML-RPC struct


Protocol-XMLRPC documentation Contained in the Protocol-XMLRPC distribution.

Index


Code Index:

NAME

Top

Protocol::XMLRPC::Value::Struct - XML-RPC struct

SYNOPSIS

Top

    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'));

DESCRIPTION

Top

XML-RPC struct

METHODS

Top

new

Creates new Protocol::XMLRPC::Value::Struct instance. Elements can be provided as a hash or as a hash reference.

type

Returns '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.

AUTHOR

Top

Viacheslav Tykhanovskyi, vti@cpan.org.

COPYRIGHT

Top


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__