From d98a3af2652a734a64bdbdca3f809f20d9ed9245 Mon Sep 17 00:00:00 2001 From: Metee Tanathip Date: Fri, 9 Feb 2024 16:22:12 +0700 Subject: [PATCH] feat: add TypeCheck to check value types --- [core]/es_extended/common/functions.lua | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/[core]/es_extended/common/functions.lua b/[core]/es_extended/common/functions.lua index f6414bdc..86f1b910 100644 --- a/[core]/es_extended/common/functions.lua +++ b/[core]/es_extended/common/functions.lua @@ -106,3 +106,25 @@ end function ESX.Round(value, numDecimalPlaces) return ESX.Math.Round(value, numDecimalPlaces) end + +function ESX.TypeCheck(value, ...) + local types = { ... } + + if (#types == 0) then return true end + + local mapType = {} + for i = 1, #types, 1 do + mapType[types[i]] = true + end + + local valueType = type(value) + local requireTypes = table.concat(types, " or ") + local errorMessage = ("bad value (%s expected, got %s)"):format(requireTypes, valueType) + local matches = mapType[valueType] ~= nil + + -- Need feedback on this one, should we assert or return false and error message? + -- i prefer assert, but i'm open to suggestions + assert(matches, errorMessage) + + return matches, errorMessage +end