LuaFunction.Create.cs 939 B

1234567891011121314151617181920212223242526272829
  1. namespace Lua;
  2. partial class LuaFunction
  3. {
  4. sealed class AnonymousLuaFunction(Func<LuaValue[], CancellationToken, ValueTask<LuaValue[]>> func) : LuaFunction
  5. {
  6. protected override async ValueTask<int> InvokeAsyncCore(LuaFunctionExecutionContext context, Memory<LuaValue> buffer, CancellationToken cancellationToken)
  7. {
  8. var args = context.ArgumentCount == 0 ? [] : new LuaValue[context.ArgumentCount];
  9. context.Arguments.CopyTo(args);
  10. var result = await func(args, cancellationToken);
  11. if (result != null)
  12. {
  13. result.AsMemory().CopyTo(buffer);
  14. return result.Length;
  15. }
  16. else
  17. {
  18. return 0;
  19. }
  20. }
  21. }
  22. public static LuaFunction Create(Func<LuaValue[], CancellationToken, ValueTask<LuaValue[]>> func)
  23. {
  24. return new AnonymousLuaFunction(func);
  25. }
  26. }