File Coverage

blib/lib/YAML/LibYAML/API.pm
Criterion Covered Total %
statement 42 43 97.6
branch 12 12 100.0
condition 4 6 66.6
subroutine 11 12 91.6
pod 0 7 0.0
total 69 80 86.2


line stmt bran cond sub pod time code
1             # ABSTRACT: Wrapper around the C libyaml library
2             package YAML::LibYAML::API;
3 7     7   1206830 use strict;
  7         18  
  7         285  
4 7     7   36 use warnings;
  7         15  
  7         744  
5              
6             our $VERSION = 'v0.14.0'; # VERSION
7              
8 7         5871 use YAML::PP::Common qw/
9             YAML_ANY_SCALAR_STYLE YAML_PLAIN_SCALAR_STYLE
10             YAML_SINGLE_QUOTED_SCALAR_STYLE YAML_DOUBLE_QUOTED_SCALAR_STYLE
11             YAML_LITERAL_SCALAR_STYLE YAML_FOLDED_SCALAR_STYLE
12             YAML_QUOTED_SCALAR_STYLE
13              
14             YAML_ANY_SEQUENCE_STYLE
15             YAML_BLOCK_SEQUENCE_STYLE YAML_FLOW_SEQUENCE_STYLE
16              
17             YAML_ANY_MAPPING_STYLE
18             YAML_BLOCK_MAPPING_STYLE YAML_FLOW_MAPPING_STYLE
19 7     7   3394 /;
  7         20802  
20              
21             my @scalar_styles = (
22             YAML_ANY_SCALAR_STYLE,
23             YAML_PLAIN_SCALAR_STYLE,
24             YAML_SINGLE_QUOTED_SCALAR_STYLE,
25             YAML_DOUBLE_QUOTED_SCALAR_STYLE,
26             YAML_LITERAL_SCALAR_STYLE,
27             YAML_FOLDED_SCALAR_STYLE,
28             );
29             my %scalar_styles;
30             @scalar_styles{ @scalar_styles } = 0 .. $#scalar_styles;
31              
32             my @sequence_styles = (
33             YAML_ANY_SEQUENCE_STYLE,
34             YAML_BLOCK_SEQUENCE_STYLE,
35             YAML_FLOW_SEQUENCE_STYLE,
36             );
37             my %sequence_styles;
38             @sequence_styles{ @sequence_styles } = 0 .. $#sequence_styles;
39              
40             my @mapping_styles = (
41             YAML_ANY_MAPPING_STYLE,
42             YAML_BLOCK_MAPPING_STYLE,
43             YAML_FLOW_MAPPING_STYLE,
44             );
45             my %mapping_styles;
46             @mapping_styles{ @mapping_styles } = 0 .. @mapping_styles;
47              
48             # deprecated
49             sub parse_events {
50 0     0 0 0 parse_string_events(@_);
51             }
52              
53             sub parse_string_events {
54 8     8 0 1076758 my ($yaml, $events) = @_;
55 8         3468 YAML::LibYAML::API::XS::parse_string_events($yaml, $events);
56 8         72 _numeric_to_string($events);
57             }
58              
59             sub parse_file_events {
60 1     1 0 34270 my ($file, $events) = @_;
61 1         203 YAML::LibYAML::API::XS::parse_file_events($file, $events);
62 1         8 _numeric_to_string($events);
63             }
64              
65             sub parse_filehandle_events {
66 1     1 0 8310 my ($fh, $events) = @_;
67 1         137 YAML::LibYAML::API::XS::parse_filehandle_events($fh, $events);
68 1         7 _numeric_to_string($events);
69             }
70              
71             sub emit_string_events {
72 10     10 0 29926 my ($events, $options) = @_;
73 10   100     73 $options ||= {};
74 10         56 _string_to_numeric($events);
75 10         995 return YAML::LibYAML::API::XS::emit_string_events($events, $options);
76             }
77              
78             sub emit_file_events {
79 1     1 0 6161 my ($file, $events, $options) = @_;
80 1   50     10 $options ||= {};
81 1         6 _string_to_numeric($events);
82 1         386 return YAML::LibYAML::API::XS::emit_file_events($file, $events, $options);
83             }
84              
85             sub emit_filehandle_events {
86 1     1 0 1548 my ($fh, $events, $options) = @_;
87 1   50     6 $options ||= {};
88 1         5 _string_to_numeric($events);
89 1         108 return YAML::LibYAML::API::XS::emit_filehandle_events($fh, $events, $options);
90             }
91              
92             sub _numeric_to_string {
93 10     10   51 my ($events) = @_;
94 10         39 for my $event (@$events) {
95 149 100       617 if ($event->{name} eq 'scalar_event') {
    100          
    100          
96 49         120 $event->{style} = $scalar_styles[ $event->{style} ];
97             }
98             elsif ($event->{name} eq 'sequence_start_event') {
99 15         55 $event->{style} = $sequence_styles[ $event->{style} ];
100             }
101             elsif ($event->{name} eq 'mapping_start_event') {
102 11         41 $event->{style} = $mapping_styles[ $event->{style} ];
103             }
104             }
105             }
106              
107             sub _string_to_numeric {
108 12     12   38 my ($events) = @_;
109 12         34 for my $event (@$events) {
110 165 100       510 if ($event->{name} eq 'scalar_event') {
    100          
    100          
111 53         114 $event->{style} = $scalar_styles{ $event->{style} };
112             }
113             elsif ($event->{name} eq 'sequence_start_event') {
114 16         46 $event->{style} = $sequence_styles{ $event->{style} };
115             }
116             elsif ($event->{name} eq 'mapping_start_event') {
117 13         41 $event->{style} = $mapping_styles{ $event->{style} };
118             }
119             }
120             }
121              
122             1;
123              
124             __END__