summaryrefslogtreecommitdiff
path: root/src/desktop/rule/layerRule/LayerRule.cpp
diff options
context:
space:
mode:
authorVaxry <vaxry@vaxry.net>2026-04-28 15:48:11 +0100
committerVaxry <43317083+vaxerski@users.noreply.github.com>2026-04-28 16:52:41 +0100
commit89e2380da8d432a84ab93345d82389010172adcf (patch)
treee06c609dd5776f234dcb65620980cfebe259d0ec /src/desktop/rule/layerRule/LayerRule.cpp
parent50b555d86c76987069b68cc4865f955c93161a3a (diff)
desktop/rule: use Numeric for number parsing
Diffstat (limited to 'src/desktop/rule/layerRule/LayerRule.cpp')
-rw-r--r--src/desktop/rule/layerRule/LayerRule.cpp36
1 files changed, 27 insertions, 9 deletions
diff --git a/src/desktop/rule/layerRule/LayerRule.cpp b/src/desktop/rule/layerRule/LayerRule.cpp
index 10120d7f..ccff3960 100644
--- a/src/desktop/rule/layerRule/LayerRule.cpp
+++ b/src/desktop/rule/layerRule/LayerRule.cpp
@@ -5,26 +5,44 @@
#include <algorithm>
#include <format>
+#include <hyprutils/string/Numeric.hpp>
using namespace Desktop;
using namespace Desktop::Rule;
+using namespace Hyprutils::String;
+
+static const char* numericParseError(eNumericParseResult r) {
+ switch (r) {
+ case NUMERIC_PARSE_BAD: return "bad input";
+ case NUMERIC_PARSE_GARBAGE: return "garbage input";
+ case NUMERIC_PARSE_OUT_OF_RANGE: return "out of range";
+ case NUMERIC_PARSE_OK: return "ok";
+ default: return "error";
+ }
+}
static std::expected<int64_t, std::string> parseInt(std::string_view effectName, const std::string& raw) {
- try {
- return std::stoll(raw);
- } catch (std::exception& e) { return std::unexpected(std::format("{} rule \"{}\" failed with: {}", effectName, raw, e.what())); }
+ auto parsed = strToNumber<int64_t>(raw);
+ if (!parsed)
+ return std::unexpected(std::format("{} rule \"{}\" failed with: {}", effectName, raw, numericParseError(parsed.error())));
+
+ return *parsed;
}
static std::expected<float, std::string> parseFloat(std::string_view effectName, const std::string& raw) {
- try {
- return std::stof(raw);
- } catch (std::exception& e) { return std::unexpected(std::format("{} rule \"{}\" failed with: {}", effectName, raw, e.what())); }
+ auto parsed = strToNumber<float>(raw);
+ if (!parsed)
+ return std::unexpected(std::format("{} rule \"{}\" failed with: {}", effectName, raw, numericParseError(parsed.error())));
+
+ return *parsed;
}
static std::expected<int64_t, std::string> parseAboveLock(const std::string& raw) {
- try {
- return sc<int64_t>(std::clamp(std::stoull(raw), 0ULL, 2ULL));
- } catch (std::exception& e) { return std::unexpected(std::format("above_lock rule \"{}\" failed with: {}", raw, e.what())); }
+ auto parsed = strToNumber<int64_t>(raw);
+ if (!parsed)
+ return std::unexpected(std::format("above_lock rule \"{}\" failed with: {}", raw, numericParseError(parsed.error())));
+
+ return std::clamp(*parsed, int64_t{0}, int64_t{2});
}
static std::expected<LayerRuleEffectValue, std::string> parseLayerRuleEffect(CLayerRuleEffectContainer::storageType e, const std::string& raw) {