public static int enumFromInt(IntPtr luaState)
{
ObjectTranslator translator = ObjectTranslator.FromState(luaState);
Type t = translator.typeOf(luaState, 1);
if (t == null || !t.IsEnum)
{
return(translator.pushError(luaState, "not an enum"));
}
object res = null;
LuaTypes lt = LuaDLL.lua_type(luaState, 2);
if (lt == LuaTypes.LUA_TNUMBER)
{
int ival = (int)LuaDLL.lua_tonumber(luaState, 2);
res = Enum.ToObject(t, ival);
}
else
if (lt == LuaTypes.LUA_TSTRING)
{
string sflags = LuaDLL.lua_tostring(luaState, 2);
string err = null;
try
{
res = Enum.Parse(t, sflags);
}
catch (ArgumentException e)
{
err = e.Message;
}
if (err != null)
{
return(translator.pushError(luaState, err));
}
}
else
{
return(translator.pushError(luaState, "second argument must be a integer or a string"));
}
translator.pushObject(luaState, res, "luaNet_metatable");
return(1);
}