File Coverage

src/xs/uri.h
Criterion Covered Total %
statement 10 19 52.6
branch 21 42 50.0
condition n/a
subroutine n/a
pod n/a
total 31 61 50.8


line stmt bran cond sub pod time code
1             #pragma once
2             #include
3             #include
4             #include
5             #include
6              
7             namespace xs {
8             namespace uri {
9             void data_attach (Sv& sv);
10             Stash get_perl_class (const panda::uri::URI* uri);
11              
12             struct URIx {
13             using URI = panda::uri::URI;
14             URI* uri;
15 19           URIx () : uri(nullptr) {}
16             URIx (URI* uri) : uri(uri) {}
17             URI* operator-> () const { return uri; }
18             URI& operator* () const { return *uri; }
19 76           operator URI* () const { return uri; }
20 38           URIx& operator= (URI* uri) { this->uri = uri; return *this; }
21             };
22             }
23              
24             template struct Typemap : TypemapObject {
25 4           static panda::string_view package () { return "URI::XS"; }
26              
27 135           static Sv create (const TYPE& var, const Sv& proto = Sv()) {
28 135           auto ret = TypemapObject::create(var, proto);
29 135 50         if (ret.defined()) xs::uri::data_attach(ret);
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
30 135           return ret;
31             }
32             };
33              
34             template
35             struct Typemap> : Typemap {
36             using Super = Typemap;
37             static panda::iptr in (const Sv& arg) {
38             if (!arg.defined()) return {};
39             if (!arg.is_object_ref()) return new TYPE(xs::in(arg));
40             return Super::in(arg);
41             }
42             };
43              
44             template <> struct Typemap : Typemap {
45 19           static Sv out (xs::uri::URIx var, const Sv& = Sv()) {
46 19 50         return Typemap::out(var, xs::uri::get_perl_class(var));
47             }
48             };
49              
50             template struct Typemap : Typemap {
51 0           static panda::string_view package () { return "URI::XS::http"; }
52             };
53              
54             template struct Typemap : Typemap {
55 0           static panda::string_view package () { return "URI::XS::https"; }
56             };
57              
58             template struct Typemap : Typemap {
59 0           static panda::string_view package () { return "URI::XS::ws"; }
60             };
61              
62             template struct Typemap : Typemap {
63 0           static panda::string_view package () { return "URI::XS::wss"; }
64             };
65              
66             template struct Typemap : Typemap {
67 0           static panda::string_view package () { return "URI::XS::ftp"; }
68             };
69              
70             template struct Typemap : Typemap {
71 0           static panda::string_view package () { return "URI::XS::socks"; }
72             };
73              
74             template struct Typemap : Typemap {
75 0           static panda::string_view package () { return "URI::XS::ssh"; }
76             };
77              
78             template struct Typemap : Typemap {
79 0           static panda::string_view package () { return "URI::XS::telnet"; }
80             };
81              
82             template struct Typemap : Typemap {
83 0           static panda::string_view package () { return "URI::XS::sftp"; }
84             };
85             }