diff options
| author | Vaxry <vaxry@vaxry.net> | 2026-04-28 15:48:11 +0100 |
|---|---|---|
| committer | Vaxry <43317083+vaxerski@users.noreply.github.com> | 2026-04-28 16:52:41 +0100 |
| commit | 89e2380da8d432a84ab93345d82389010172adcf (patch) | |
| tree | e06c609dd5776f234dcb65620980cfebe259d0ec /src/desktop/rule/layerRule/LayerRule.cpp | |
| parent | 50b555d86c76987069b68cc4865f955c93161a3a (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.cpp | 36 |
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) { |
