App-Context
view release on metacpan or search on metacpan
lib/App/Serializer.pm view on Meta::CPAN
an => 'arbitrary',
collection => [ 'of', 'data', ],
of => {
arbitrary => 'depth',
},
};
$serialized_data = $serializer->serialize($data);
=cut
sub serialize {
my ($self, $data) = @_;
$self->dump($data);
}
#############################################################################
# deserialize()
#############################################################################
=head2 deserialize()
* Signature: $serialized_data = $serializer->deserialize($data);
* Signature: $serialized_data = App::Serializer->deserialize($data);
* Param: $data ref
* Return: $serialized_data binary
* Throws: App::Exception::Serializer
* Since: 0.01
Sample Usage:
$context = App->context();
$serializer = $context->service("Serializer"); # or ...
$serializer = $context->serializer();
$data = $serializer->deserialize($serialized_data);
print $serializer->dump($data), "\n";
=cut
sub deserialize {
my ($self, $serialized_data) = @_;
my ($data, $serializer_class);
$data = {};
$serializer_class = "";
if ($self eq "App::Serializer") { # static method call
if ($serialized_data =~ s/#Serializer +([^ ]+) +\((.*)\)\n//) {
$serializer_class = $1;
}
elsif ($serialized_data =~ /^<!DOCTYPE/i) {
$serializer_class = "App::Serializer::XML";
}
elsif ($serialized_data =~ /^</) {
$serializer_class = "App::Serializer::XMLSimple";
}
}
if ($serializer_class) {
eval "use $serializer_class;";
if ($@) {
App::Exception::Serializer->throw(
error => "create(): error loading $serializer_class serializer class\n"
);
}
$data = $serializer_class->deserialize($serialized_data);
}
else {
if ($serialized_data =~ /^\$[a-zA-Z][a-zA-Z0-9_]* *= *(.*)$/s) {
$serialized_data = "\$data = $1"; # untainted now
eval($serialized_data);
die "Deserialization Error: $@" if ($@);
}
else {
die "Deserialization Error: Data didn't have \"\$var = {...};\" or \"\$var = [ ... ];\" format.";
}
}
$data;
}
#############################################################################
# serialized_content_type()
#############################################################################
=head2 serialized_content_type()
* Signature: $serialized_content_type = $service->serialized_content_type();
* Param: void
* Return: $serialized_content_type string
* Throws: App::Exception
* Since: 0.01
Sample Usage:
$serialized_content_type = $service->serialized_content_type();
=cut
sub serialized_content_type {
'text/plain';
}
#############################################################################
# dump()
#############################################################################
=head2 dump()
* Signature: $perl = $serializer->dump($data);
* Param: $data ref
* Return: $perl text
* Throws: App::Exception::Serializer
* Since: 0.01
Sample Usage:
$context = App->context();
$serializer = $context->service("Serializer"); # or ...
$serializer = $context->serializer();
$data = $serializer->deserialize($serialized_data);
print $serializer->dump($data), "\n";
( run in 0.463 second using v1.01-cache-2.11-cpan-39bf76dae61 )