File Coverage

blib/lib/LibYAML/FFI/YPP/Parser.pm
Criterion Covered Total %
statement 33 33 100.0
branch 4 6 66.6
condition n/a
subroutine 6 6 100.0
pod 0 1 0.0
total 43 46 93.4


line stmt bran cond sub pod time code
1             # ABSTRACT: Parser glue between YAML::PP and LibYAML::FFI
2             package LibYAML::FFI::YPP::Parser;
3 1     1   7 use strict;
  1         4  
  1         29  
4 1     1   4 use warnings;
  1         2  
  1         23  
5              
6 1     1   442 use LibYAML::FFI;
  1         4  
  1         63  
7 1     1   10 use LibYAML::FFI::YPP;
  1         3  
  1         61  
8 1     1   9 use base 'YAML::PP::Parser';
  1         2  
  1         349  
9              
10             our $VERSION = 'v0.0.1'; # VERSION
11              
12             sub parse {
13 1     1 0 110 my ($self) = @_;
14 1         6 my $reader = $self->reader;
15 1         12 my $parser;
16 1         4 my $events = [];
17 1         2 if (0 and $reader->can('open_handle')) {
18             # if (openhandle($reader->input)) {
19             # my $test = YAML::LibYAML::API::XS::parse_filehandle_events($reader->open_handle, $events);
20             # }
21             # else {
22             # my $test = YAML::LibYAML::API::XS::parse_file_events($reader->input, $events);
23             # }
24             }
25             else {
26 1         10 $parser = LibYAML::FFI::Parser->new;
27 1 50       42 my $ok = $parser->yaml_parser_initialize or die "Could not create parser";
28 1         60 my $yaml = $reader->read;
29 1         27 $parser->yaml_parser_set_input_string($yaml, length($yaml));
30 1         31 my $event = LibYAML::FFI::Event->new;
31 1         21 while (1) {
32 17         60 my $ok = $parser->yaml_parser_parse($event);
33 17         456 my $type = $event->type;
34 17         188 my $event_hash = $event->to_hash;
35 17         44 my $name = $event_hash->{name};
36 17         62 $self->callback->( $self, $name => $event_hash );
37 17 50       1013 last unless $ok;
38 17 100       70 last if $type == LibYAML::FFI::event_type::YAML_STREAM_END_EVENT;
39             }
40             }
41             }
42              
43             1;