view Lib/IMPL/Object/PublicSerializable.pm @ 182:adc7669172c4

sync
author sergey
date Mon, 26 Mar 2012 02:01:05 +0400
parents d1676be8afcc
children 4d0e1962161c
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;