File Coverage

blib/lib/ZMQ/FFI/ErrorHelper.pm
Criterion Covered Total %
statement 12 31 38.7
branch 0 4 0.0
condition n/a
subroutine 4 9 44.4
pod 0 4 0.0
total 16 48 33.3


line stmt bran cond sub pod time code
1             package ZMQ::FFI::ErrorHelper;
2             $ZMQ::FFI::ErrorHelper::VERSION = '0.17';
3 14     14   7921 use Moo;
  14         160248  
  14         88  
4 14     14   24112 use namespace::autoclean;
  14         134729  
  14         78  
5              
6 14     14   785 use Carp;
  14         21  
  14         777  
7 14     14   74 use FFI::Raw;
  14         16  
  14         3950  
8              
9             has soname => (
10             is => 'ro',
11             required => 1,
12             );
13              
14             has _err_ffi => (
15             is => 'ro',
16             lazy => 1,
17             builder => '_init_err_ffi',
18             );
19              
20             sub BUILD {
21 0     0 0   my $self = shift;
22 0           $self->_err_ffi;
23             }
24              
25             sub check_error {
26 0     0 0   my ($self, $func, $rc) = @_;
27              
28 0 0         if ( $rc == -1 ) {
29 0           $self->fatal($func);
30             }
31             }
32              
33             sub check_null {
34 0     0 0   my ($self, $func, $obj) = @_;
35              
36 0 0         unless ($obj) {
37 0           $self->fatal($func);
38             }
39             }
40              
41             sub fatal {
42 0     0 0   my ($self, $func) = @_;
43              
44 0           my $ffi = $self->_err_ffi;
45              
46 0           my $errno = $ffi->{zmq_errno}->();
47 0           my $strerr = $ffi->{zmq_strerror}->($errno);
48              
49 0           confess "$func: $strerr";
50             }
51              
52             sub _init_err_ffi {
53 0     0     my $self = shift;
54              
55 0           my $ffi = {};
56 0           my $soname = $self->soname;
57              
58 0           $ffi->{zmq_errno} = FFI::Raw->new(
59             $soname => 'zmq_errno',
60             FFI::Raw::int # returns errno
61             # void
62             );
63              
64 0           $ffi->{zmq_strerror} = FFI::Raw->new(
65             $soname => 'zmq_strerror',
66             FFI::Raw::str, # returns error str
67             FFI::Raw::int # errno
68             );
69              
70 0           return $ffi;
71             }
72              
73             1;
74              
75             __END__