aboutsummaryrefslogtreecommitdiffstats
path: root/tests/tst_qtdotnet/uri.h
blob: 8ddd89c044cffd8cdc493a577291f49e447db476 (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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
/***************************************************************************************************
 Copyright (C) 2023 The Qt Company Ltd.
 SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
***************************************************************************************************/

#pragma once

#include <qdotnetarray.h>
#include <qdotnetmarshal.h>
#include <qdotnetobject.h>

struct UriPrivate;

namespace QDotNetTypes
{
    namespace System
    {
        enum class UriHostNameType
        {
            Unknown = 0,
            Basic = 1,
            Dns = 2,
            IPv4 = 3,
            IPv6 = 4
        };

        enum class UriKind
        {
            RelativeOrAbsolute = 0,
            Absolute = 1,
            Relative = 2
        };
    }
}

template<>
struct QDotNetTypeOf<QDotNetTypes::System::UriHostNameType>
{
    static inline const QString TypeName = QString("System.UriHostNameType, System");
    static inline UnmanagedType MarshalAs = UnmanagedType::I4;
};

template<>
struct QDotNetTypeOf<QDotNetTypes::System::UriKind>
{
    static inline const QString TypeName = QString("System.UriKind, System");
    static inline UnmanagedType MarshalAs = UnmanagedType::I4;
};

class Uri : public QDotNetObject
{
public:
    Q_DOTNET_OBJECT(Uri, "System.Uri, System");
    Uri();
    Uri(const char *uriString) : Uri(QString(uriString)) {}
    Uri(
        const QString &uriString,
        QDotNetTypes::System::UriKind uriKind = QDotNetTypes::System::UriKind::Absolute);
    Uri(const Uri &baseUri, const QString &relativeUri);
    Uri(const Uri &baseUri, const Uri &relativeUri);
    ~Uri() override;

    QString absolutePath() const;
    QString absoluteUri() const;
    QString authority() const;
    QString dnsSafeHost() const;
    QString fragment() const;
    QString host() const;
    QDotNetTypes::System::UriHostNameType hostNameType() const;
    QString idnHost() const;
    bool isAbsoluteUri() const;
    bool isDefaultPort() const;
    bool isFile() const;
    bool isLoopback() const;
    bool isUnc() const;
    QString localPath() const;
    QString originalString() const;
    QString pathAndQuery() const;
    qint32 port() const;
    QString query() const;
    QString scheme() const;
    QDotNetArray<QString> segments() const;
    bool userEscaped() const;
    QString userInfo() const;


private:
    UriPrivate *d;
};