HTTPx::Middleware::Unicode

MobircのMiddlewareの仕様にあわせてCatalyst::Plugin::Unicodeをそのまんま移植してみた。

package HTTPx::Middleware::Unicode;
use Mouse;
use utf8;

sub wrap {
    my ( $class, $next ) = @_; 
    sub {
        my $req = shift;
        decode_params($req);
        my $res = $next->($req);
        encode_body($res);
        $res;
    }   
}

sub encode_body {
    my $response = shift;

    if ( $response->body && utf8::is_utf8( $response->body ) ) { 
        utf8::encode( $response->body );
    }   
}

sub decode_params {
    my $request = shift;

    for my $value ( values %{ $request->params } ) { 
        if ( ref $value && ref $value ne 'ARRAY' ) { 
            next;
        }   
        utf8::decode($_) for ( ref($value) ? @{$value} : $value );
    }   
}

1;