File: versions.h

package info (click to toggle)
libquotient 0.9.5-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 5,588 kB
  • sloc: xml: 39,103; cpp: 25,226; sh: 97; makefile: 10
file content (71 lines) | stat: -rw-r--r-- 2,990 bytes parent folder | download
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
// THIS FILE IS GENERATED - ANY EDITS WILL BE OVERWRITTEN

#pragma once

#include <Quotient/jobs/basejob.h>

namespace Quotient {

//! \brief Gets the versions of the specification supported by the server.
//!
//! Gets the versions of the specification supported by the server.
//!
//! Values will take the form `vX.Y` or `rX.Y.Z` in historical cases. See
//! [the Specification Versioning](../#specification-versions) for more
//! information.
//!
//! The server may additionally advertise experimental features it supports
//! through `unstable_features`. These features should be namespaced and
//! may optionally include version information within their name if desired.
//! Features listed here are not for optionally toggling parts of the Matrix
//! specification and should only be used to advertise support for a feature
//! which has not yet landed in the spec. For example, a feature currently
//! undergoing the proposal process may appear here and eventually be taken
//! off this list once the feature lands in the spec and the server deems it
//! reasonable to do so. Servers can choose to enable some features only for
//! some users, so clients should include authentication in the request to
//! get all the features available for the logged-in user. If no
//! authentication is provided, the server should only return the features
//! available to all users. Servers may wish to keep advertising features
//! here after they've been released into the spec to give clients a chance
//! to upgrade appropriately. Additionally, clients should avoid using
//! unstable features in their stable releases.
class QUOTIENT_API GetVersionsJob : public BaseJob {
public:
    explicit GetVersionsJob();

    //! \brief Construct a URL without creating a full-fledged job object
    //!
    //! This function can be used when a URL for GetVersionsJob
    //! is necessary but the job itself isn't.
    static QUrl makeRequestUrl(const HomeserverData& hsData);

    // Result properties

    //! The supported versions.
    QStringList versions() const { return loadFromJson<QStringList>("versions"_L1); }

    //! Experimental features the server supports. Features not listed here,
    //! or the lack of this property all together, indicate that a feature is
    //! not supported.
    QHash<QString, bool> unstableFeatures() const
    {
        return loadFromJson<QHash<QString, bool>>("unstable_features"_L1);
    }

    struct Response {
        //! The supported versions.
        QStringList versions{};

        //! Experimental features the server supports. Features not listed here,
        //! or the lack of this property all together, indicate that a feature is
        //! not supported.
        QHash<QString, bool> unstableFeatures{};
    };
};

template <std::derived_from<GetVersionsJob> JobT>
constexpr inline auto doCollectResponse<JobT> =
    [](JobT* j) -> GetVersionsJob::Response { return { j->versions(), j->unstableFeatures() }; };

} // namespace Quotient