]> source.dussan.org Git - rspamd.git/commitdiff
[Minor] Add generic routine to override default settings
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Thu, 5 Apr 2018 11:44:59 +0000 (12:44 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Thu, 5 Apr 2018 11:44:59 +0000 (12:44 +0100)
lualib/lua_util.lua

index d97f58175cb255680be8d60355175eb245b8849e..5af09d3166b5f824f604a3580dc5e647d2aab080 100644 (file)
@@ -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