Cherry pick everything bar the use parent change from 25d49c2, fixing RT#46680
[catagits/Catalyst-Action-REST.git] / lib / Catalyst / Action / Deserialize / Data / Serializer.pm
1 package Catalyst::Action::Deserialize::Data::Serializer;
2
3 use strict;
4 use warnings;
5
6 use base 'Catalyst::Action';
7 use Data::Serializer;
8
9 sub execute {
10     my $self = shift;
11     my ( $controller, $c, $serializer ) = @_;
12
13     my $sp = $serializer;
14     $sp =~ s/::/\//g;
15     $sp .= ".pm";
16     eval {
17         require $sp
18     };
19     if ($@) {
20         $c->log->debug("Could not load $serializer, refusing to serialize: $@")
21             if $c->debug;
22         return 0;
23     }
24     my $body = $c->request->body;
25     if ($body) {
26         my $rbody;
27         if ( -f $c->request->body ) {
28             open( BODY, "<", $c->request->body );
29             while ( my $line = <BODY> ) {
30                 $rbody .= $line;
31             }
32             close(BODY);
33         }
34         my $dso = Data::Serializer->new( serializer => $serializer );
35         my $rdata;
36         eval {
37             $rdata = $dso->raw_deserialize($rbody);
38         };
39         if ($@) {
40             return $@;
41         }
42         $c->request->data($rdata);
43     } else {
44         $c->log->debug(
45             'I would have deserialized, but there was nothing in the body!')
46                 if $c->debug;
47     }
48     return 1;
49 }
50
51 1;