VoltMod
C++23 framework for CS2 server plugins
Loading...
Searching...
No Matches
LoadReport.cpp
Go to the documentation of this file.
2#include <algorithm>
3#include <format>
4#include <utility>
5
6namespace VoltMod
7{
8
9bool LoadReport::Optional(std::string_view name, Status result)
10{
11 return Record(name, std::move(result), false);
12}
13
14bool LoadReport::Required(std::string_view name, Status result)
15{
16 return Record(name, std::move(result), true);
17}
18
19bool LoadReport::Record(std::string_view name, Status result, bool required)
20{
21 if (result)
22 {
23 return true;
24 }
25 _failures.push_back({.Name = std::string(name), .Reason = std::move(result.error().Detail), .Required = required});
26 return false;
27}
28
29std::string LoadReport::Summary() const
30{
31 const auto elapsed =
32 std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::steady_clock::now() - _started);
33 std::string out = std::format("Load took {} ms", elapsed.count());
34 if (_failures.empty())
35 {
36 return out;
37 }
38
39 out += std::format("; {} failed:", _failures.size());
40 for (const FailedCheck& failed : _failures)
41 {
42 out += std::format("\n {} {}: {}", failed.Required ? "required" : "optional", failed.Name, failed.Reason);
43 }
44 return out;
45}
46
47std::string LoadReport::AbortReason() const
48{
49 const auto it = std::ranges::find(_failures, true, &FailedCheck::Required);
50 if (it == _failures.end())
51 {
52 return {};
53 }
54 return it->Reason.empty() ? it->Name : std::format("{}: {}", it->Name, it->Reason);
55}
56
57} // namespace VoltMod
std::string Summary() const
std::string AbortReason() const
bool Optional(std::string_view name, Status result)
Definition LoadReport.cpp:9
bool Required(std::string_view name, Status result)
static std::string ReadFile(const std::filesystem::path &path)
Definition Loader.cpp:56
std::expected< void, Error > Status
Definition Result.hpp:67
bool Required
A required failure refuses the plugin.