From: Vsevolod Stakhov Date: Thu, 5 Apr 2018 11:44:59 +0000 (+0100) Subject: [Minor] Add generic routine to override default settings X-Git-Tag: 1.7.3~30 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=f422d322ec1b36547f4c8f95f13cb631ca387ed4;p=thirdparty%2Frspamd.git [Minor] Add generic routine to override default settings --- diff --git a/lualib/lua_util.lua b/lualib/lua_util.lua index d97f58175c..5af09d3166 100644 --- a/lualib/lua_util.lua +++ b/lualib/lua_util.lua @@ -22,7 +22,7 @@ limitations under the License. local exports = {} local lpeg = require 'lpeg' local rspamd_util = require "rspamd_util" - +local fun = require "fun" local split_grammar = {} local function rspamd_str_split(s, sep) @@ -438,4 +438,41 @@ exports.fold_header = function(task, name, value, stop_chars) return rspamd_util.fold_header(name, value, how, stop_chars) end +--[[[ +-- @function lua_util.override_defaults(defaults, override) +-- Overrides values from defaults with override +--]] +local function override_defaults(def, override) + -- Corner cases + if not override or type(override) ~= 'table' then + return def + end + if not def or type(def) ~= 'table' then + return override + end + + local res = {} + fun.each(function(k, v) + if type(v) == 'table' then + if def[k] and type(def[k]) == 'table' then + -- Recursively override elements + res[k] = override_defaults(def[k], v) + else + res[k] = v + end + else + res[k] = v + end + end, override) + fun.each(function(k, v) + if not res[k] then + res[k] = v + end + end, def) + + return res +end + +exports.override_defaults = override_defaults + return exports