summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorfranck cuny <franck@lumberjaph.net>2009-12-08 16:13:42 +0100
committerfranck cuny <franck@lumberjaph.net>2009-12-08 16:13:42 +0100
commit263e87473b4f1195adc93dd4b69fa6557c8d9be8 (patch)
treeadf9c598f1aab0852fadccefd6e11277e26b70aa /lib
parentmove serialize into a role (diff)
downloadmoosex-net-api-263e87473b4f1195adc93dd4b69fa6557c8d9be8.tar.gz
method to deserialize
Diffstat (limited to '')
-rw-r--r--lib/MooseX/Net/API/Role/Deserialize.pm30
1 files changed, 29 insertions, 1 deletions
diff --git a/lib/MooseX/Net/API/Role/Deserialize.pm b/lib/MooseX/Net/API/Role/Deserialize.pm
index b83c58a..cf69087 100644
--- a/lib/MooseX/Net/API/Role/Deserialize.pm
+++ b/lib/MooseX/Net/API/Role/Deserialize.pm
@@ -4,13 +4,21 @@ use Moose::Role;
use JSON::XS;
use YAML::Syck;
use XML::Simple;
+use Try::Tiny;
+
+my $reverse_content_type = {
+ 'application/json' => 'json',
+ 'application/x-yaml' => 'yaml',
+ 'text/xml' => 'xml',
+ 'application/xml' => 'xml',
+};
sub _from_json {
return decode_json( $_[1] );
}
sub _from_yaml {
- return Dump $_[1];
+ return Load $_[1];
}
sub _from_xml {
@@ -18,4 +26,24 @@ sub _from_xml {
$xml->XMLin( $_[1] );
}
+sub _do_deserialization {
+ my ( $caller, $raw_content, @content_types ) = @_;
+
+ my $content;
+ foreach my $deserializer (@content_types) {
+ my $method;
+ if ( $reverse_content_type->{$deserializer} ) {
+ $method = '_from_' . $reverse_content_type->{$deserializer};
+ }
+ else {
+ $method = '_from_' . $deserializer;
+ }
+ next if ( !$caller->meta->find_method_by_name($method) );
+ try {
+ $content = $caller->$method($raw_content);
+ };
+ return $content if $content;
+ }
+}
+
1;