Pcore
view release on metacpan or search on metacpan
lib/Pcore/Util/Data.pm view on Meta::CPAN
package Pcore::Util::Data;
use Pcore -const, -export;
use Pcore::Util::Text qw[decode_utf8 encode_utf8 escape_perl trim];
use Pcore::Util::List qw[pairs];
use Sort::Naturally qw[nsort];
use Pcore::Util::Scalar qw[is_ref is_blessed_ref is_plain_scalarref is_plain_arrayref is_plain_hashref];
our $EXPORT = {
ALL => [qw[encode_data decode_data]],
PERL => [qw[to_perl from_perl]],
JSON => [qw[to_json from_json]],
CBOR => [qw[to_cbor from_cbor]],
YAML => [qw[to_yaml from_yaml]],
XML => [qw[to_xml from_xml]],
INI => [qw[to_ini from_ini]],
B64 => [qw[to_b64 to_b64u from_b64 from_b64u]],
URI => [qw[to_uri to_uri_component to_uri_scheme to_uri_path to_uri_query to_uri_query_frag from_uri from_uri_utf8 from_uri_query from_uri_query_utf8]],
XOR => [qw[to_xor from_xor]],
CONST => [qw[$DATA_ENC_B64 $DATA_ENC_HEX $DATA_COMPRESS_ZLIB $DATA_CIPHER_DES]],
TYPE => [qw[$DATA_TYPE_PERL $DATA_TYPE_JSON $DATA_TYPE_CBOR $DATA_TYPE_YAML $DATA_TYPE_XML $DATA_TYPE_INI]],
};
const our $DATA_TYPE_PERL => 1;
const our $DATA_TYPE_JSON => 2;
const our $DATA_TYPE_CBOR => 3;
const our $DATA_TYPE_YAML => 4;
const our $DATA_TYPE_XML => 5;
const our $DATA_TYPE_INI => 6;
const our $DATA_ENC_B64 => 1;
const our $DATA_ENC_HEX => 2;
const our $DATA_COMPRESS_ZLIB => 1;
const our $DATA_CIPHER_DES => 1;
const our $CIPHER_NAME => { #
$DATA_CIPHER_DES => 'DES',
};
our $JSON_CACHE;
# JSON is used by default
# JSON can't serialize ScalarRefs
# objects should have TO_JSON method, otherwise object will be serialized as null
# base64 encoder is used by default, it generates more compressed data
sub encode_data ( $type, $data, @args ) {
my %args = (
readable => undef, # make serialized data readable for humans
compress => undef, # use compression
secret => undef, # crypt data if defined, can be ArrayRef
secret_index => 0, # index of secret to use in secret array, if secret is ArrayRef
encode => undef, # 0 - disable
token => undef, # attach informational token
compress_threshold => 100, # min data length in bytes to perform compression, only if compress = 1
cipher => $DATA_CIPHER_DES, # cipher to use
json => undef, # HashRef with additional params for Cpanel::JSON::XS
xml => undef, # HashRef with additional params for XML::Hash::XS
@args,
);
if ( $args{readable} && $type != $DATA_TYPE_CBOR ) {
$args{compress} = undef;
$args{secret} = undef;
$args{encode} = undef;
( run in 0.837 second using v1.01-cache-2.11-cpan-56fb94df46f )