The Perl and Raku Conference 2025: Greenville, South Carolina - June 27-29 Learn more

#!perl
subtest "format fields" => sub {
my ( $s, $buf );
ok(
lives {
$s = Data::Record::Serialize->new(
encode => 'ddump',
output => \$buf,
format_fields => {
a => 'aAa: %s',
b => 'bBb: %s',
c => sub { qq(cCc: $_[0]) }
},
);
},
"constructor"
) or diag $@;
$s->send( { a => 1, b => 2, c => 'nyuck nyuck', d => 'niagara falls' } );
my $VAR1;
ok( lives { $VAR1 = eval $buf }, 'deserialize record' ) or diag $@;
is(
$VAR1,
{
a => 'aAa: 1',
b => 'bBb: 2',
c => 'cCc: nyuck nyuck',
d => 'niagara falls'
},
'properly formatted'
);
};
subtest "format types" => sub {
my ( $s, $buf );
ok(
lives {
$s = Data::Record::Serialize->new(
encode => 'ddump',
output => \$buf,
types => {
a => 'N',
b => 'I',
c => 'S',
},
format_types => {
N => 'number: %s',
I => 'integer: %s',
S => sub { qq(string: $_[0]) },
},
);
},
"constructor"
) or diag $@;
$s->send( { a => 1, b => 2, c => 3 } );
my $VAR1;
ok( lives { $VAR1 = eval $buf }, 'deserialize record' ) or diag $@;
is(
$VAR1,
{
a => 'number: 1',
b => 'integer: 2',
c => 'string: 3',
},
'properly formatted'
);
};
subtest "format types w/o specifying them" => sub {
my ( $s, $buf );
ok(
lives {
$s = Data::Record::Serialize->new(
encode => 'ddump',
output => \$buf,
format_types => {
N => 'number: %s',
I => 'integer: %s',
S => sub { qq(string: $_[0]) },
},
);
},
"constructor"
) or diag $@;
$s->send( { a => 1.1, b => 2, c => 'nyuck' } );
my $VAR1;
ok( lives { $VAR1 = eval $buf }, 'deserialize record' ) or diag $@;
is(
$VAR1,
{
a => 'number: 1.1',
b => 'integer: 2',
c => 'string: nyuck',
},
'properly formatted'
);
};
subtest "format fields overrides types" => sub {
my ( $s, $buf );
ok(
lives {
$s = Data::Record::Serialize->new(
encode => 'ddump',
output => \$buf,
types => {
a => 'N',
b => 'I',
c => 'S',
d => 'S',
},
format_types => {
N => 'number: %s',
I => 'integer: %s',
S => sub { qq(string: $_[0]) },
},
format_fields => {
a => 'aAa: %s',
b => 'bBb: %s',
c => sub { qq(cCc: $_[0]) }
},
);
},
"constructor"
) or diag $@;
$s->send( { a => 1, b => 2, c => 3, d => 4 } );
my $VAR1;
ok( lives { $VAR1 = eval $buf }, 'deserialize record' ) or diag $@;
is(
$VAR1,
{
a => 'aAa: 1',
b => 'bBb: 2',
c => 'cCc: 3',
d => 'string: 4',
},
'properly formatted'
);
};
done_testing;