File Coverage

blib/lib/Protocol/Sys/Virt/TypedParams.pm
Criterion Covered Total %
statement 72 88 81.8
branch 18 22 81.8
condition n/a
subroutine 15 21 71.4
pod 13 13 100.0
total 118 144 81.9


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   265802 use v5.14.1;
  1         5  
14 1     1   6 use warnings;
  1         3  
  1         60  
15 1     1   801 use Syntax::Operator::Elem qw( elem_str );
  1         3112  
  1         10  
16              
17             package Protocol::Sys::Virt::TypedParams v12.1.0;
18              
19              
20 1     1   6475 use Carp qw(croak);
  1         1  
  1         103  
21 1     1   8 use Exporter 'import';
  1         2  
  1         51  
22 1     1   587 use Log::Any qw($log);
  1         14240  
  1         7  
23              
24             # copied from Protocol::Sys::Virt::Remote::XDR, with VIR_ prefix stripped
25             use constant {
26 1         1962 TYPED_PARAM_INT => 1,
27             TYPED_PARAM_UINT => 2,
28             TYPED_PARAM_LLONG => 3,
29             TYPED_PARAM_ULLONG => 4,
30             TYPED_PARAM_DOUBLE => 5,
31             TYPED_PARAM_BOOLEAN => 6,
32             TYPED_PARAM_STRING => 7,
33 1     1   3030 };
  1         3  
34              
35             my %value_field_name = (
36             1 => 'i',
37             2 => 'ui',
38             3 => 'l',
39             4 => 'ul',
40             5 => 'd',
41             6 => 'b',
42             7 => 's'
43             );
44              
45              
46             our @EXPORT = qw(
47             typed_params_new
48             typed_field_new
49             typed_value_new
50              
51             typed_params_check_fields_only
52             typed_params_field
53             typed_params_fields
54              
55             typed_params_field_int_value
56             typed_params_field_uint_value
57             typed_params_field_long_value
58             typed_params_field_ulong_value
59             typed_params_field_double_value
60             typed_params_field_boolean_value
61             typed_params_field_string_value
62              
63             TYPED_PARAM_INT
64             TYPED_PARAM_UINT
65             TYPED_PARAM_LLONG
66             TYPED_PARAM_ULLONG
67             TYPED_PARAM_DOUBLE
68             TYPED_PARAM_BOOLEAN
69             TYPED_PARAM_STRING
70              
71             );
72              
73              
74             sub typed_params_check_fields_only {
75 0     0 1 0 my ( $params, @fields ) = @_;
76              
77 0         0 for my $param (@{ $params }) {
  0         0  
78 0 0       0 unless (elem_str( $param->{field}, @fields )) {
79 0         0 croak "Unexpected parameter $param->{field}";
80             }
81             }
82 0         0 return 1;
83             }
84              
85             sub typed_params_field {
86 4     4 1 675 my ( $params, $name, @rest ) = @_;
87 4 50       9 return unless $params;
88              
89 4         3 for my $param (@{ $params }) {
  4         8  
90 4 100       10 next unless $param->{field} eq $name;
91              
92 2 100       4 if (@rest) {
93 1         1 my $new_entry = shift @rest;
94 1         4 $param = { field => $name, value => $new_entry };
95 1         10 return $param;
96             }
97 1         4 return $param;
98             }
99 2 100       6 if (@rest) {
100 1         21 my $new_entry = shift @rest;
101 1         3 my $param = { field => $name, value => $new_entry };
102 1         2 push @{ $params }, $param;
  1         1  
103 1         4 return $param;
104             }
105 1         3 return undef;
106             }
107              
108             sub typed_params_fields {
109 2     2 1 387 my ( $params, $name ) = @_;
110 2         3 return [ grep { $_->{field} eq $name } @{ $params } ];
  4         12  
  2         5  
111             }
112              
113             sub typed_value_new {
114 19     19 1 235749 my ( $type, $value ) = @_;
115 19         91 return { type => $type, $value_field_name{$type} => $value };
116             }
117              
118             sub typed_field_new {
119 10     10 1 18 my ( $name, $value ) = @_;
120 10         37 return { field => $name, value => $value };
121             }
122              
123             sub typed_params_new {
124 9     9 1 507 my ( $from ) = @_;
125 9 100       23 $from = [] unless $from;
126              
127 9         14 return [ map { { %{ $_ } } } @{ $from } ];
  9         12  
  9         43  
  9         16  
128             }
129              
130             sub _typed_params_field_value {
131 6     6   13 my ( $params, $name, $type, @rest ) = @_;
132 6 50       16 return unless $params;
133              
134 6         8 for my $param (@{ $params }) {
  6         14  
135 6 100       16 next unless $param->{field} eq $name;
136             croak "TypedParam type mismatch: expected $type, found $param->{value}->{type}"
137 4 100       339 if $type != $param->{value}->{type};
138              
139 2 100       5 if (@rest) {
140 1         2 my $new_value = shift @rest;
141             $param = {
142             field => $name,
143             value => {
144             type => $type,
145 1         4 $value_field_name{$type} => $new_value }
146             };
147 1         3 return $new_value;
148             }
149              
150 1         4 return $param->{value}->{$value_field_name{$type}};
151             }
152              
153 2 100       6 if (@rest) {
154 1         3 my $new_value = shift @rest;
155 1         7 push @{ $params }, {
156             field => $name,
157             value => {
158             type => $type,
159 1         2 $value_field_name{$type} => $new_value }
160             };
161              
162 1         5 return $new_value;
163             }
164              
165 1         3 return undef;
166             }
167              
168             sub typed_params_field_int_value {
169 4     4 1 382 my ( $params, $name, @rest ) = @_;
170 4         8 return _typed_params_field_value( $params, $name, TYPED_PARAM_INT, @rest );
171             }
172              
173             sub typed_params_field_uint_value {
174 0     0 1 0 my ( $params, $name, @rest ) = @_;
175 0         0 return _typed_params_field_value( $params, $name, TYPED_PARAM_UINT, @rest );
176             }
177              
178             sub typed_params_field_long_value {
179 0     0 1 0 my ( $params, $name, @rest ) = @_;
180 0         0 return _typed_params_field_value( $params, $name, TYPED_PARAM_LLONG, @rest );
181             }
182              
183             sub typed_params_field_ulong_value {
184 0     0 1 0 my ( $params, $name, @rest ) = @_;
185 0         0 return _typed_params_field_value( $params, $name, TYPED_PARAM_ULLONG, @rest );
186             }
187              
188             sub typed_params_field_double_value {
189 0     0 1 0 my ( $params, $name, @rest ) = @_;
190 0         0 return _typed_params_field_value( $params, $name, TYPED_PARAM_DOUBLE, @rest );
191             }
192              
193             sub typed_params_field_boolean_value {
194 2     2 1 1999 my ( $params, $name, @rest ) = @_;
195 2         5 return _typed_params_field_value( $params, $name, TYPED_PARAM_BOOLEAN, @rest );
196             }
197              
198             sub typed_params_field_string_value {
199 0     0 1   my ( $params, $name, @rest ) = @_;
200 0           return _typed_params_field_value( $params, $name, TYPED_PARAM_STRING, @rest );
201             }
202              
203              
204              
205             1;
206              
207             __END__