platform.cpp

 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
#include <planet/platform.hpp>
#include <planet/serialise.hpp>

#include <felspar/exceptions/runtime_error.hpp>

#include <utility>


std::string_view planet::to_string(platform const p) noexcept {
    switch (p) {
    case platform::unknown: return "unknown";
    case platform::linux: return "linux";
    case platform::windows: return "windows";
    case platform::macos: return "macos";
    case platform::android: return "android";
    case platform::ios: return "ios";
    }
    std::unreachable();
}
planet::platform planet::platform_from_string(std::string_view const name) {
    if (name == "unknown") {
        return platform::unknown;
    } else if (name == "linux") {
        return platform::linux;
    } else if (name == "windows") {
        return platform::windows;
    } else if (name == "macos") {
        return platform::macos;
    } else if (name == "android") {
        return platform::android;
    } else if (name == "ios") {
        return platform::ios;
    } else {
        throw felspar::stdexcept::runtime_error{
                "Unknown platform name " + std::string{name}};
    }
}


void planet::save(serialise::save_buffer &sb, platform const p) {
    sb.save_box(platform_box, to_string(p));
}
void planet::load(serialise::box &b, platform &p) {
    std::string_view name;
    b.named(platform_box, name);
    p = platform_from_string(name);
}