r49@latte: adam | 2006-12-03 12:30:40 -0800
[catagits/Catalyst-Action-REST.git] / lib / Catalyst / Action / Deserialize / Data / Serializer.pm
1 #
2 # Catalyst::Action::Deserialize::Data::Serializer.pm
3 # Created by: Adam Jacob, Marchex, <adam@marchex.com>
4 # Created on: 10/12/2006 03:00:32 PM PDT
5 #
6 # $Id$
7
8 package Catalyst::Action::Deserialize::Data::Serializer;
9
10 use strict;
11 use warnings;
12
13 use base 'Catalyst::Action';
14 use Data::Serializer;
15
16 sub execute {
17     my $self = shift;
18     my ( $controller, $c, $serializer ) = @_;
19
20     my $sp = $serializer;
21     $sp =~ s/::/\//g;
22     $sp .= ".pm";
23     eval {
24         require $sp
25     };
26     if ($@) {
27         $c->log->debug("Could not load $serializer, refusing to serialize: $@");
28         return 0;
29     }
30     my $body = $c->request->body;
31     if ($body) {
32         my $rbody;
33         if ( -f $c->request->body ) {
34             open( BODY, "<", $c->request->body );
35             while ( my $line = <BODY> ) {
36                 $rbody .= $line;
37             }
38             close(BODY);
39         }
40         my $dso = Data::Serializer->new( serializer => $serializer );
41         my $rdata;
42         eval {
43             $rdata = $dso->raw_deserialize($rbody);
44         };
45         if ($@) {
46             return $@;
47         }
48         $c->request->data($rdata);
49     } else {
50         $c->log->debug(
51             'I would have deserialized, but there was nothing in the body!');
52     }
53     return 1;
54 }
55
56 1;