package AnyEvent::RPC::Enc::YAML; use common::sense 2; m{ use strict; use warnings; }; # Until cpants will know it make strict use parent 'AnyEvent::RPC::Enc'; use Carp; require AnyEvent::RPC; our $VERSION = $AnyEvent::RPC::VERSION; =head1 NAME AnyEvent::RPC::Enc::YAML - YAML Encoder for AE::RPC =head1 DESCRIPTION Uses YAML::Syck in unicode mode for encoding requests end decode response =head1 SYNOPSIS use AnyEvent::RPC; my $rpc = AnyEvent::RPC->new( ... type => 'YAML', # or type => '+AnyEvent::RPC::Enc::YAML', ) =cut BEGIN { if (eval {require YAML::Syck; 1}) { $YAML::Syck::ImplicitUnicode = 1; *Dump = \&YAML::Syck::Dump; *Load = \&YAML::Syck::Load; } else { croak "Cant load YAML::Syck. Install one to use YAML encoder"; } } sub request { my $self = shift; my $rpc = shift; my %args = @_; $args{data} = Dump( $args{data} ) if $args{data} and ref $args{data}; $args{headers}{'Content-Type'} = 'text/x-yaml'; $self->next::method($rpc,%args); } sub decode_response { my $self = shift; my $res = shift; my $data = $res->decoded_content( charset => 'none' ); if ( my $doc = eval { Load( $data ) } ) { return $doc; } else { die "$@"; } } 1;