From 263e87473b4f1195adc93dd4b69fa6557c8d9be8 Mon Sep 17 00:00:00 2001 From: franck cuny Date: Tue, 8 Dec 2009 16:13:42 +0100 Subject: method to deserialize --- lib/MooseX/Net/API/Role/Deserialize.pm | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) (limited to 'lib') 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; -- cgit 1.4.1