aboutsummaryrefslogtreecommitdiffstats
path: root/util/human
diff options
context:
space:
mode:
authorMatthew Wild <mwild1@gmail.com>2023-04-07 14:14:53 +0100
committerMatthew Wild <mwild1@gmail.com>2023-04-07 14:14:53 +0100
commit7dc9f9ab2ad061b0b8be08e3a27cfe3056f1a76c (patch)
treedcd4943b166a7b8060b3bcefd483f26b0c3e09dc /util/human
parent2fa6a010180e8879e1eaab6612d86ff74cbed182 (diff)
downloadprosody-7dc9f9ab2ad061b0b8be08e3a27cfe3056f1a76c.tar.gz
prosody-7dc9f9ab2ad061b0b8be08e3a27cfe3056f1a76c.zip
util.human.io: Add parse_duration() method to parse a duration string
Similar logic occurs throughout various modules in the codebase. We might even want a module:get_option_duration()??
Diffstat (limited to 'util/human')
-rw-r--r--util/human/io.lua12
1 files changed, 12 insertions, 0 deletions
diff --git a/util/human/io.lua b/util/human/io.lua
index 8a903d38..c2ed4904 100644
--- a/util/human/io.lua
+++ b/util/human/io.lua
@@ -197,6 +197,17 @@ local function new_table(col_specs, max_width)
end, max_width;
end
+local day = 86400;
+local multipliers = {
+ d = day, w = day * 7, m = 31 * day, mo = 31 * day, y = 365.2425 * day;
+ s = 1, mi = 60, h = 3600
+};
+local function parse_duration(duration_string)
+ local n, m = duration_string:lower():match("(%d+)%s*([dwmy]?.?)");
+ if not n then return nil; end
+ return tonumber(n) * ( multipliers[m] or 1 );
+end
+
return {
getchar = getchar;
getline = getline;
@@ -210,4 +221,5 @@ return {
term_width = term_width;
ellipsis = ellipsis;
table = new_table;
+ parse_duration = parse_duration;
};