File Coverage

blib/lib/Sys/Async/Virt/Callback.pm
Criterion Covered Total %
statement 29 68 42.6
branch 0 8 0.0
condition n/a
subroutine 10 17 58.8
pod 2 5 40.0
total 41 98 41.8


line stmt bran cond sub pod time code
1             ####################################################################
2             #
3             # This file was generated using XDR::Parse version v1.0.1
4             # and LibVirt version v12.1.0
5             #
6             # Don't edit this file, use the source template instead
7             #
8             # ANY CHANGES HERE WILL BE LOST !
9             #
10             ####################################################################
11              
12              
13 1     1   11 use v5.26;
  1         2  
14 1     1   4 use warnings;
  1         1  
  1         45  
15 1     1   3 use experimental qw/ signatures /;
  1         1  
  1         6  
16 1     1   157 use Feature::Compat::Try;
  1         3  
  1         9  
17 1     1   83 use Future::AsyncAwait;
  1         2  
  1         7  
18 1     1   67 use Object::Pad 0.821;
  1         10  
  1         59  
19              
20             class Sys::Async::Virt::Callback v0.6.1;
21              
22              
23 1     1   268 use Carp qw(croak);
  1         3  
  1         97  
24 1     1   838 use Future::Queue;
  1         2008  
  1         192  
25 1     1   9 use Log::Any qw($log);
  1         2  
  1         9  
26              
27 1     1   286 use Protocol::Sys::Virt::Remote::XDR v12.1.0;
  1         12  
  1         1462  
28             my $remote = 'Protocol::Sys::Virt::Remote::XDR';
29              
30 0     0 0   field $_rpc_id :reader :param;
  0            
31 0     0 0   field $_client :reader :param;
  0            
32             field $_deregister_call :param;
33             field $_queue;
34             field $_cancelled;
35              
36             ADJUST :params (:$queue_len //= 12, :$factory) {
37             $_queue = Future::Queue->new(
38             max_items => $queue_len,
39             prototype => $factory
40             );
41             }
42              
43 0     0 1   async method next_event() {
  0            
  0            
  0            
44 0 0         return unless $_queue; # simulate an empty queue
45 0           return await $_queue->shift;
46             }
47              
48 0     0 1   async method cancel() {
  0            
  0            
  0            
49 0 0         return await $_cancelled if $_cancelled;
50              
51 0           $_cancelled = $_client->loop->new_future;
52 0           $self->cleanup;
53 0           await $_cancelled;
54              
55 0           return;
56             }
57              
58 0     0 0   method cleanup() {
  0            
  0            
59 0 0         return unless $_queue;
60              
61 0           $_queue->finish;
62 0           $_queue = undef;
63 0           $_client->_deregister_callback(
64             $_cancelled,
65             $_deregister_call,
66             $_rpc_id );
67              
68 0           return;
69             }
70              
71 0     0     method _dispatch_event($event) {
  0            
  0            
  0            
72 0 0         return if $_cancelled;
73              
74 0           try {
75 0           $_queue->push($event);
76             }
77             catch ($e) {
78 0           $self->cleanup;
79             }
80             }
81              
82 0     0     method DESTROY() {
  0            
  0            
83 0           $self->cleanup;
84             }
85              
86              
87             1;
88              
89             __END__