From 6f165a262b5095f0d80ddfcb974ac4fd24a7498a Mon Sep 17 00:00:00 2001 From: Tobias Ulmer Date: Wed, 26 Jun 2019 16:58:39 +0200 Subject: [PATCH] result: provide deregister_result_class() to unload plugins also deregister_type_detection() Signed-off-by: Tobias Ulmer --- local/result.lua | 34 ++++++++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/local/result.lua b/local/result.lua index 60fe0d7..9c3d431 100644 --- a/local/result.lua +++ b/local/result.lua @@ -778,13 +778,26 @@ end function result.register_type_detection(func) assertIsFunction(func) for _,fn in ipairs(type_detection_fns) do - assert(fn ~= func, err.new("result type detection already registered")) + assert(fn ~= func, "result type detection already registered") end table.insert(type_detection_fns, 1, func) return true end +--- Deregister a type detection function. +-- @param func Function in the form function(rawres)...end +function result.deregister_type_detection(func) + assertIsFunction(func) + for idx=1,#type_detection_fns do + if type_detection_fns[idx] == func then + table.remove(type_detection_fns, idx) + return true + end + end + assert(false, "deregister_type_detection: func wasn't registered") +end + --- Register a result class. A type can only be registered once. -- @param typ Source type name. -- @param result_class Class derived from basic_result. @@ -794,13 +807,30 @@ function result.register_result_class(typ, result_class) assertIsStringN(typ) assertIsTable(result_class) assert(result_types[typ] == nil, - err.new("result %q already registered", typ)) + string.format("result class %q already registered", typ)) result_types[typ] = result_class return true end +--- Deregister a result class. +-- @param typ Source type name. +-- @param result_class Class derived from basic_result. +-- @return True on success, false on error. +-- @return Error object on failure. +function result.deregister_result_class(typ, result_class) + assertIsStringN(typ) + assertIsTable(result_class) + assert(result_types[typ] ~= nil, + string.format("result class %q not registered", typ)) + + result_types[typ] = nil + + return true +end + + --- Iterate over registered result classes. -- @return Iterator function that returns a sorted type, result class pair. function result.iterate_result_classes() -- 2.39.5