# HG changeset patch # User Kim Alvefur # Date 1689547064 -7200 # Node ID 3e6e98cc63e92ec28495a28988a0da636582cf37 # Parent 4d4f9e42bcf8758c1d480a599eaa85625a77c1de core.moduleapi: Add min/max range support to :get_option_period To match :get_option_number etc, specifying the allowed interval. Default is essentially (0, inf]. diff -r 4d4f9e42bcf8 -r 3e6e98cc63e9 core/moduleapi.lua --- a/core/moduleapi.lua Mon Jul 17 00:09:41 2023 +0200 +++ b/core/moduleapi.lua Mon Jul 17 00:37:44 2023 +0200 @@ -268,27 +268,43 @@ return value; end -function api:get_option_period(name, default_value) +function api:get_option_period(name, default_value, min, max) local value = self:get_option_scalar(name, default_value); - if type(value) == "number" then - if value < 0 then - self:log("debug", "Treating negative period as infinity"); - return math.huge; - end - -- assume seconds - return value; - elseif value == "never" or value == false then + + local ret; + if value == "never" or value == false then -- usually for disabling some periodic thing return math.huge; + elseif type(value) == "number" then + -- assume seconds + ret = value; elseif type(value) == "string" then - local ret = human_io.parse_duration(value); + ret = human_io.parse_duration(value); if value ~= nil and ret == nil then self:log("error", "Config option '%s' not understood, expecting a period (e.g. \"2 days\")", name); end - return ret; elseif value ~= nil then self:log("error", "Config option '%s' expects a number or a period description string (e.g. \"3 hours\"), not %s", name, type(value)); + return nil; + else + return nil; end + + if ret < 0 then + self:log("debug", "Treating negative period as infinity"); + return math.huge; + end + + if min and ret < min then + self:log("warn", "Config option '%s' out of bounds %g < %g", name, ret, min); + return min; + end + if max and ret > max then + self:log("warn", "Config option '%s' out of bounds %g > %g", name, ret, max); + return max; + end + + return ret; end function api:get_option_boolean(name, ...)