Software /
code /
prosody
Changeset
13212:3e6e98cc63e9
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].
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Mon, 17 Jul 2023 00:37:44 +0200 |
parents | 13211:4d4f9e42bcf8 |
children | 13213:50324f66ca2a |
files | core/moduleapi.lua |
diffstat | 1 files changed, 27 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- 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, ...)