summaryrefslogtreecommitdiff
path: root/submodules/battleNetApi/src/apiUrl.cpp
blob: 3de13cd76e1e053faa7cb3988725badf63f7f732 (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
#include "apiUrl.hpp"
#include <format>

ApiUrl::ApiUrl(const std::string &iContentType, const std::string &iRegion)
    : mContentType{iContentType}, mRegion{iRegion} {}
void ApiUrl::setRegion(const std::string &iRegion) {
    if (not iRegion.empty()) {
        mRegion = iRegion; //!< The region of the data to receive, e.g. "eu"
    }
}
void ApiUrl::setLocale(const std::string &iLocale) {
    if (not iLocale.empty()) {
        aParameters["locale"] = iLocale; //!< The locale to reflect in localized data, e.g. "fr_FR" or "ko_KR"
                                         //!< If you do not supply a value, all translations are returned.
    }
}
void ApiUrl::setGameMode(const std::string &iGameMode) {
    if (not iGameMode.empty()) {
        aParameters["gameMode"] =
            iGameMode; //!< A recognized game mode, e.g. "constructed"
                       //!< @see https://community.developer.battle.net/documentation/hearthstone/guides/game-modes
    }
}
void ApiUrl::setPageSize(const std::string &iPageSize) {
    if (not iPageSize.empty()) {
        aParameters["pageSize"] = iPageSize; //!< The number of results to choose per page, e.g. "40"
    }
}
std::string ApiUrl::operator()() const {
    std::string aFormattedParameters;
    for (const auto &[key, value] : aParameters) {
        aFormattedParameters += std::format("&{}={}", key, value);
    }
    if (not aFormattedParameters.empty()) {
        aFormattedParameters[0] = '?';
    }
    aFormattedParameters =
        std::format("https://{}.api.blizzard.com/hearthstone/{}/{}", mRegion, mContentType, aFormattedParameters);
    return aFormattedParameters;
}