moduleapi: Add :get_option_integer()

Many options in Prosody that are treated as numbers don't make sense as
floats, e.g. sizes and limits measured in bytes.

Simplified implementation based on an earlier attempt dating back to 2020
This commit is contained in:
Kim Alvefur 2023-07-17 00:09:41 +02:00
parent c222b08005
commit 210f608086
4 changed files with 17 additions and 0 deletions

View file

@ -75,6 +75,7 @@ files["plugins/"] = {
"module.get_option_boolean",
"module.get_option_enum",
"module.get_option_inherited_set",
"module.get_option_integer",
"module.get_option_number",
"module.get_option_path",
"module.get_option_period",

View file

@ -43,6 +43,7 @@ TRUNK
- Config interface API can require that string values be picked from a provided set
- Acceptable interval can be specified for number options
- Method for parsing time periods / intervals from config
- Method for retrieving integer settings from config
## Changes

View file

@ -20,5 +20,6 @@ return {
"getopt-enum";
"getopt-interval";
"getopt-period";
"getopt-integer";
};
};

View file

@ -254,6 +254,20 @@ function api:get_option_number(name, default_value, min, max)
return ret;
end
function api:get_option_integer(name, default_value, min, max)
local value = self:get_option_number(name, default_value, min or math.mininteger or 2 ^ 53, max or math.maxinteger or -2 ^ 52);
if value == default_value then
-- pass default trough unaltered, violates ranges sometimes
return value;
end
if math.type(value) == "float" then
self:log("warn", "Config option '%s' expected an integer, not a float (%g)", name, value)
return math.floor(value);
end
-- nil or an integer
return value;
end
function api:get_option_period(name, default_value)
local value = self:get_option_scalar(name, default_value);
if type(value) == "number" then