AnyEvent-Serialize

 view release on metacpan or  search on metacpan

lib/AnyEvent/Serialize.pm  view on Meta::CPAN

            unless $bs > 0;
        $block_size = $bs;
        splice @arg, $_, 2;
        last;
    }

    return $class->export_to_level(1, $class,  @arg);
}


sub serialize($&) {
    require Data::StreamSerializer;
    no warnings 'redefine';
    no strict 'refs';

    *{ __PACKAGE__ . '::serialize' } = sub ($&) {
        my ($obj, $cb) = @_;
        my $sr = new Data::StreamSerializer $obj;
        $sr->block_size($block_size);

        my $str = $sr->next;

lib/AnyEvent/Serialize.pm  view on Meta::CPAN

            if ($sr->is_eof) {
                stop_aggressive_idle $pid;
                $cb->($str, $sr->recursion_detected);
            }
        };
    };

    goto &serialize;
}

sub deserialize($&) {
    require Data::StreamDeserializer;
    no warnings 'redefine';
    no strict 'refs';

    *{ __PACKAGE__ . '::deserialize' } = sub ($&) {
        my ($data, $cb) = @_;
        my $dsr = new Data::StreamDeserializer
            data => $data, block_size => $block_size;

        if ($dsr->next_object) {

t/serialize.t  view on Meta::CPAN

local $Data::Dumper::Terse    = 1;
local $Data::Dumper::Useqq    = 1;
local $Data::Dumper::Deepcopy = 1;

use Test::More tests => 54;
BEGIN {
    use_ok 'AnyEvent';
    use_ok('AnyEvent::Serialize', ':all', 'block_size' => 10);
};

sub rand_array($);
sub compare_object($$);
sub rand_hash($);

my @a;
for (0 .. 9) {
    push @a, (50 < rand 100) ? rand_hash 6 : rand_array 6;
#     push @a, (50 < rand 100) ? [1,2] : {1,2};
}

$_ = { str => Dumper($_), orig => $_ } for @a;

{

t/serialize.t  view on Meta::CPAN

    }


    ok grep({$res[$_]{time} < $res[$_+1]{time} } 0 .. $#res - 1) > 0,
        "Random finish time";
    ok grep({$res[$_]{order} < $res[$_+1]{order} } 0 .. $#res - 1) > 0,
        "Random order";
}


sub rand_string()
{
    my $rstr = '';
    my @letters = (
        qw(й ц у к е н г ш щ з х ъ ф ы в а п р о л д ж э я ч с м и т ь б ю),
        map { chr $_ } 0x20 .. 0x7e
    );
    $rstr .= $letters[rand @letters] for  0 .. -1 + int rand 20;
    return $rstr;
}

sub rand_hash($)
{
    my ($deep) = @_;
    my %h;
    return rand_string if $deep <= 0;
    for ( 0 .. $deep ) {
        my $key = rand_string;
        if (3 > rand 10) {
            $h{$key} =  rand_string;
        } elsif (5 > rand 10) {
            $h{$key} =  rand_hash($deep - 1);
        } else {
            $h{$key} =  rand_array($deep - 1);
        }
    }
    return \%h;
}


sub rand_array($)
{
    my @array;
    my ($count) = @_;
    return rand_string if $count <= 0;
    for (0 .. $count) {
        if (3 > rand 10) {
            push @array, rand_string;
        } elsif (5 > rand 10) {
            push @array, rand_hash($count - 1);
        } else {
            push @array, rand_array($count - 1);
        }

    }
    return \@array;
}

sub compare_object($$)
{
    my ($o1, $o2) = @_;
    return 0 unless ref($o1) eq ref $o2;
    return $o1 eq $o2 unless ref $o1;                        # SCALAR
    return compare_object $$o1, $$o2 if 'SCALAR' eq ref $o1; # SCALARREF
    return compare_object $$o1, $$o2 if 'REF' eq ref $o1;    # REF

    if ('ARRAY' eq ref $o1) {
        return 0 unless @$o1 == @$o2;
        for (0 .. $#$o1) {



( run in 0.839 second using v1.01-cache-2.11-cpan-65fba6d93b7 )