view Lib/IMPL/Object/PublicSerializable.pm @ 115:5edc2ac5231c

minor fix to the serialization mechanism
author wizard
date Wed, 26 May 2010 02:32:22 +0400
parents 8d0ae27d15c1
children d1676be8afcc
line wrap: on
line source

package IMPL::Object::PublicSerializable;
use strict;

use IMPL::Class::Member;

sub restore {
    my ($class,$data,$refSurrogate) = @_;
    
    if ($refSurrogate) {
        $refSurrogate->callCTOR(@$data);
        return $refSurrogate;
    } else {
        return $class->new(@$data);
    }
}

sub save {
	my ($this,$ctx) = @_;
	
	my %seen;
	
	my $val;
	
	defined($val = $this->$_()) and $ctx->AddVar($_,$val) foreach
		map $_->Name,$this->get_meta(
			'IMPL::Class::PropertyInfo',
			sub {
				$_->Access == IMPL::Class::Member::MOD_PUBLIC and
				$_->canGet and
				not $_->ownerSet and
				not $seen{$_->Name} ++
			},
			1
		);
}

1;