aboutsummaryrefslogtreecommitdiff
path: root/gtad/operation.h.mustache
blob: 135eee55cd946e6f4c0d79837bd06fb495ad1948 (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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
{{!
SPDX-FileCopyrightText: 2020 Kitsune Ral <Kitsune-Ral@users.sf.net>
SPDX-License-Identifier: LGPL-2.1-or-later
}}
{{>preamble}}
#pragma once

#include "jobs/basejob.h"
{{#imports}}
#include {{_}}{{/imports}}
{{#operations.producesNonJson?}}
#include <QtNetwork/QNetworkReply>{{/operations.producesNonJson?}}

namespace Quotient {
{{#operations.operation}}

/*!{{>docCommentSummary}}{{#description}}
 * {{_}}{{/description}}
 */
class {{camelCaseOperationId}}Job : public BaseJob {
public:
    {{#models}}
    // Inner data structures
        {{#model}}

    {{>docCommentShort}}
    struct {{name}}{{#parents?}} :
        {{#parents}}{{name}}{{>cjoin}}{{/parents}}{{/parents?}}
    {
            {{#vars}}
        {{>docCommentShort}}
        {{>maybeOmittableType}} {{nameCamelCase}};
            {{/vars}}
            {{#propertyMap}}
        {{>docCommentShort}}
        {{>maybeOmittableType}} {{nameCamelCase}};
            {{/propertyMap}}
    };
        {{/model}}

    // Construction/destruction

    {{/models}}
    {{#allParams?}}
    /*!{{>docCommentSummary}}
        {{#allParams}}
     * \param {{nameCamelCase}}{{#description}}
     *   {{_}}{{/description}}{{#_join}}
     * {{/_join}}
        {{/allParams}}
     */
    {{/allParams?}}{{^allParams?}}
        {{#summary}}
    /// {{summary}}
        {{/summary}}
    {{/allParams?}}
    explicit {{camelCaseOperationId}}Job({{#allParams}}{{>joinedParamDecl}}{{/allParams}});
    {{^hasBody?}}

    /*! \brief Construct a URL without creating a full-fledged job object
     *
     * This function can be used when a URL for {{camelCaseOperationId}}Job
     * is necessary but the job itself isn't.
     */
    static QUrl makeRequestUrl(QUrl baseUrl{{#allParams?}},
                    {{#allParams}}{{>joinedParamDecl}}{{/allParams}}{{/allParams?}});
    {{/hasBody?}}
    {{#responses}}{{#normalResponse?}}{{#allProperties?}}

    // Result properties
        {{#headers}}

    {{>nonInlineResponseSignature}}
    {
        return reply()->rawHeader("{{baseName}}");
    }
        {{/headers}}{{#inlineResponse}}

    {{>docCommentShort}}
    {{dataType.name}} {{paramName}}()
    {{^moveOnly}}{{^producesNonJson?}} const{{/producesNonJson?}}{{/moveOnly}}
    {
        return {{#producesNonJson?}}reply(){{/producesNonJson?}}
            {{^producesNonJson?
                }}fromJson<{{dataType.name}}>(jsonData()){{/producesNonJson?
            }};
    }
        {{/inlineResponse}}{{#properties}}

    {{!there's nothing in #properties if the response is inline}}
    {{>nonInlineResponseSignature}}
    {
        return {{>takeOrLoad}}FromJson<{{>maybeOmittableType}}>("{{baseName}}"_ls);
    }
        {{/properties}}
    {{/allProperties?}}{{/normalResponse?}}{{/responses}}
};
    {{#models.model}}

template <> struct JsonObjectConverter<{{qualifiedName}}> {
        {{#in?}}
    static void dumpTo(QJsonObject& jo, const {{qualifiedName}}& pod)
        {   {{#propertyMap}}
        fillJson(jo, pod.{{nameCamelCase}});
            {{/propertyMap}}{{#parents}}
        fillJson<{{name}}>(jo, pod);
            {{/parents}}{{#vars}}
        addParam<{{^required?}}IfNotEmpty{{/required?}}>(jo,
                    QStringLiteral("{{baseName}}"), pod.{{nameCamelCase}});
            {{/vars}}
    }
        {{/in?}}
        {{#out?}}
    static void fillFrom({{>maybeCrefJsonObject}} jo, {{qualifiedName}}& result)
        {   {{#parents}}
        fillFromJson<{{name}}{{!of the parent!}}>(jo, result);
            {{/parents}}{{#vars}}
        fromJson(jo.{{>takeOrValue}}("{{baseName}}"_ls),
                 result.{{nameCamelCase}});
            {{/vars}}{{#propertyMap}}
        fromJson(jo, result.{{nameCamelCase}});
            {{/propertyMap}}
    }
        {{/out?}}
};
    {{/models.model}}
{{/operations.operation}}

} // namespace Quotient