--Copyright 2021 The casbin Authors. All Rights Reserved.
--
--Licensed under the Apache License, Version 2.0 (the "License");
--you may not use this file except in compliance with the License.
--You may obtain a copy of the License at
--
--    http://www.apache.org/licenses/LICENSE-2.0
--
--Unless required by applicable law or agreed to in writing, software
--distributed under the License is distributed on an "AS IS" BASIS,
--WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
--See the License for the specific language governing permissions and
--limitations under the License.

local BuiltInFunctions = require("src.util.BuiltInFunctions")

local FunctionMap = {
    ["keyMatch"] = BuiltInFunctions.keyMatchFunc,
    ["keyGet"] = BuiltInFunctions.keyGetFunc,
    ["keyMatch2"] = BuiltInFunctions.keyMatch2Func,
    ["keyGet2"] = BuiltInFunctions.keyGet2Func,
    ["keyMatch3"] = BuiltInFunctions.keyMatch3Func,
    ["keyMatch4"] = BuiltInFunctions.keyMatch4Func,
    ["keyMatch5"] = BuiltInFunctions.keyMatch4Func,
    ["regexMatch"] = BuiltInFunctions.regexMatchFunc,
    ["IPMatch"] = BuiltInFunctions.IPMatchFunc,
    ["globMatch"] = BuiltInFunctions.globMatchFunc,
}

-- FunctionMap provides a set of built in functions
function FunctionMap:new()
    local o = {}
    for k, v in pairs(FunctionMap) do
        o[k] = v
    end
    return o
end

-- Add new built-in function to FunctionMap
function FunctionMap:addFunction(key, func)
    if not self[key] then
        self[key] = func
    end
end

return FunctionMap