aboutsummaryrefslogtreecommitdiff
path: root/lib/Cro/BodyParser/VlcXML.rakumod
blob: 0750c9a9c1fe57927e69ec7e095ca0415428f6e6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
use v6.d;
use Cro::BodyParser;
use Cro::HTTP::Message;
use XML;
 
class Cro::BodyParser::VlcXML does Cro::BodyParser {
     method is-applicable(Cro::HTTP::Message $message --> Bool{
        with $message.content-type {
            .type eq 'application'|'text' && .subtype eq 'xml' || .suffix eq 'json'
        }
        else {
            False
        }
    }
 
    method parse(Cro::HTTP::Message $message --> Promise{
        Promise(
            supply {
                my $payload = Blob.new;
 
                whenever $message.body-byte-stream -> $blob {
                    $payload ~= $blob;
                    LAST emit from-xml($payload.decode('utf-8'));
                }
 
                # if we had LibXML 
 
                # my LibXML::PushParser $parser .= new(); 
                # 
                # whenever $message.body-byte-stream -> $blob { 
                #     $parser.push($blob); 
                #     $payload ~= $blob; 
                #     LAST emit $parser.finish-push; 
                # } 
            }
        )
    }
}