58 lines
1.3 KiB
Perl
58 lines
1.3 KiB
Perl
package CryptX;
|
|
|
|
use strict;
|
|
use warnings ;
|
|
our $VERSION = '0.069';
|
|
|
|
require XSLoader;
|
|
XSLoader::load('CryptX', $VERSION);
|
|
|
|
use Carp;
|
|
my $has_json;
|
|
|
|
BEGIN {
|
|
if (eval { require Cpanel::JSON::XS }) {
|
|
Cpanel::JSON::XS->import(qw(encode_json decode_json));
|
|
$has_json = 1;
|
|
}
|
|
elsif (eval { require JSON::XS }) {
|
|
JSON::XS->import(qw(encode_json decode_json));
|
|
$has_json = 2;
|
|
}
|
|
elsif (eval { require JSON::PP }) {
|
|
JSON::PP->import(qw(encode_json decode_json));
|
|
$has_json = 3;
|
|
}
|
|
else {
|
|
$has_json = 0;
|
|
}
|
|
}
|
|
|
|
sub _croak {
|
|
die @_ if ref $_[0] || !$_[-1];
|
|
if ($_[-1] =~ /^(.*)( at .+ line .+\n$)/s) {
|
|
pop @_;
|
|
push @_, $1;
|
|
}
|
|
die Carp::shortmess @_;
|
|
}
|
|
|
|
sub _decode_json {
|
|
croak "FATAL: cannot find JSON::PP or JSON::XS or Cpanel::JSON::XS" if !$has_json;
|
|
decode_json(shift);
|
|
}
|
|
|
|
sub _encode_json {
|
|
croak "FATAL: cannot find JSON::PP or JSON::XS or Cpanel::JSON::XS" if !$has_json;
|
|
my $data = shift;
|
|
my $rv = encode_json($data); # non-canonical fallback
|
|
return(eval { Cpanel::JSON::XS->new->canonical->encode($data) } || $rv) if $has_json == 1;
|
|
return(eval { JSON::XS->new->canonical->encode($data) } || $rv) if $has_json == 2;
|
|
return(eval { JSON::PP->new->canonical->encode($data) } || $rv) if $has_json == 3;
|
|
return($rv);
|
|
}
|
|
|
|
1;
|
|
|
|
#line 136
|