File Coverage

blib/lib/DR/Msgpuck/Str.pm
Criterion Covered Total %
statement 26 33 78.7
branch 10 14 71.4
condition 1 3 33.3
subroutine 7 10 70.0
pod 0 2 0.0
total 44 62 70.9


line stmt bran cond sub pod time code
1 2     2   1513 use utf8;
  2         2  
  2         8  
2 2     2   44 use strict;
  2         2  
  2         31  
3 2     2   5 use warnings;
  2         2  
  2         48  
4              
5             package DR::Msgpuck::Str;
6 2     2   4 use Carp;
  2         2  
  2         236  
7             use overload
8 0 0   0   0 bool => sub { ${ $_[0] } ? 1 : 0 },
  0         0  
9 0     0   0 int => sub { int ${ $_[0] } },
  0         0  
10 0     0   0 '""' => sub { ${ $_[0] } },
  0         0  
11 2     2   8 ;
  2         1  
  2         14  
12              
13             sub TO_MSGPACK {
14 10     10 0 10 my ($self) = @_;
15 10         29 my $len = length $$self;
16 10 100       36 return pack 'Ca*', 0xA0| $len, $$self if $len < 0x20;
17 6 100       20 return pack 'CCa*', 0xD9, $len, $$self if $len < 0x1_00;
18 4 100       48 return pack 'Cs>a*', 0xDA, $len, $$self if $len < 0x1_0000;
19 2 50       2386 return pack 'Cl>a*', 0xDB, $len, $$self if $len <= 0xFFFF_FFFF;
20 0         0 croak "Too long line ($len bytes) can't be packed as msgpack";
21             }
22              
23             sub new {
24 10     10 0 20959 my ($class, $v) = @_;
25 10 50       24 croak 'usage DR::Msgpuck::Str->new($str)' unless defined $v;
26 10         631 $v = "$v";
27 10 100       28 utf8::encode $v if utf8::is_utf8 $v;
28 10   33     50 bless \$v => ref($class) || $class;
29             }
30              
31             1;
32              
33             __END__