// Generated by `wit-bindgen` 0.57.1. DO NOT EDIT! // #nullable enable namespace PluginWorld.wit.Imports.pumpkin.plugin.v0_1_0; public interface IContextImports { /** * A contextual handle for plugin-related operations. */ public class Context: global::System.IDisposable { internal int Handle { get; set; } public readonly record struct THandle(int Handle); public Context(THandle handle) { Handle = handle.Handle; } public void Dispose() { Dispose(true); } [global::System.Runtime.InteropServices.DllImportAttribute("pumpkin:plugin/context@0.1.0", EntryPoint = "[resource-drop]context"), global::System.Runtime.InteropServices.WasmImportLinkageAttribute] private static extern void wasmImportResourceDrop(int p0); protected virtual void Dispose(bool disposing) { if (disposing && Handle != 0) { wasmImportResourceDrop(Handle); Handle = 0; } } public unsafe void RegisterEvent(uint handlerId, global::PluginWorld.wit.Imports.pumpkin.plugin.v0_1_0.IEventImports.EventType eventType, global::PluginWorld.wit.Imports.pumpkin.plugin.v0_1_0.IEventImports.EventPriority eventPriority, bool blocking) { var handle = this.Handle; ContextImportsInterop.Context.RegisterEventWasmInterop.wasmImportRegisterEvent(handle, unchecked((int)(handlerId)), (int)eventType, (int)eventPriority, (blocking ? 1 : 0)); } public unsafe void RegisterCommand(global::PluginWorld.wit.Imports.pumpkin.plugin.v0_1_0.ICommandImports.Command command, string permission) { var cleanups = new global::System.Collections.Generic.List(); var handle = this.Handle; var handle0 = command.Handle; command.Handle = 0; var utf8Bytes = global::System.Text.Encoding.UTF8.GetBytes(permission); var length = utf8Bytes.Length; var gcHandle = global::System.Runtime.InteropServices.GCHandle.Alloc(utf8Bytes, global::System.Runtime.InteropServices.GCHandleType.Pinned); var strPtr = gcHandle.AddrOfPinnedObject(); cleanups.Add(()=> gcHandle.Free()); ContextImportsInterop.Context.RegisterCommandWasmInterop.wasmImportRegisterCommand(handle, handle0, strPtr.ToInt32(), length); foreach (var cleanup in cleanups) { cleanup(); } } public unsafe void RegisterPermission(global::PluginWorld.wit.Imports.pumpkin.plugin.v0_1_0.IPermissionImports.Permission permission) { var cleanups = new global::System.Collections.Generic.List(); var handle = this.Handle; var utf8Bytes = global::System.Text.Encoding.UTF8.GetBytes(permission.node); var length = utf8Bytes.Length; var gcHandle = global::System.Runtime.InteropServices.GCHandle.Alloc(utf8Bytes, global::System.Runtime.InteropServices.GCHandleType.Pinned); var strPtr = gcHandle.AddrOfPinnedObject(); cleanups.Add(()=> gcHandle.Free()); var utf8Bytes1 = global::System.Text.Encoding.UTF8.GetBytes(permission.description); var length2 = utf8Bytes1.Length; var gcHandle3 = global::System.Runtime.InteropServices.GCHandle.Alloc(utf8Bytes1, global::System.Runtime.InteropServices.GCHandleType.Pinned); var strPtr0 = gcHandle3.AddrOfPinnedObject(); cleanups.Add(()=> gcHandle3.Free()); int lowered; int lowered10; switch (permission.@default.Tag) { case 0: { lowered = 0; lowered10 = 0; break; } case 1: { lowered = 1; lowered10 = 0; break; } case 2: { global::PluginWorld.wit.Imports.pumpkin.plugin.v0_1_0.IPermissionImports.PermissionLevel payload9 = permission.@default.AsOp; lowered = 2; lowered10 = (int)payload9; break; } default: throw new global::System.ArgumentException("invalid discriminant: " + permission.@default); } void* address; if ((12 * permission.children.Count) < 1024) { var retArea = stackalloc uint[3 * permission.children.Count + 1]; address = MemoryHelper.AlignStackPtr(retArea, 4); } else { var bufferSize = 12 * (nuint)permission.children.Count; address = global::System.Runtime.InteropServices.NativeMemory.AlignedAlloc(bufferSize, 4); cleanups.Add(() => global::System.Runtime.InteropServices.NativeMemory.AlignedFree(address)); } for (int index = 0; index < permission.children.Count; ++index) { global::PluginWorld.wit.Imports.pumpkin.plugin.v0_1_0.IPermissionImports.PermissionChild element11 = permission.children[index]; int basePtr12 = (int)address + (index * 12); var utf8Bytes14 = global::System.Text.Encoding.UTF8.GetBytes(element11.node); var length15 = utf8Bytes14.Length; var gcHandle16 = global::System.Runtime.InteropServices.GCHandle.Alloc(utf8Bytes14, global::System.Runtime.InteropServices.GCHandleType.Pinned); var strPtr13 = gcHandle16.AddrOfPinnedObject(); cleanups.Add(()=> gcHandle16.Free()); new global::System.Span((void*)((byte*)basePtr12 + 4), 1)[0] = length15; new global::System.Span((void*)((byte*)basePtr12 + 0), 1)[0] = (nint)strPtr13.ToInt32(); *(byte*)(basePtr12 + 8) = (byte)(element11.value ? 1 : 0); } var retArea17 = stackalloc uint[4]; var ptr = (nint)MemoryHelper.AlignStackPtr(retArea17, 4); ContextImportsInterop.Context.RegisterPermissionWasmInterop.wasmImportRegisterPermission(handle, strPtr.ToInt32(), length, strPtr0.ToInt32(), length2, lowered, lowered10, (int)address, permission.children.Count, ptr); Result lifted; switch (new global::System.Span((byte*)ptr + 0, 1)[0]) { case 0: { lifted = Result.Ok(new global::PluginWorld.None()); break; } case 1: { var str = global::System.Text.Encoding.UTF8.GetString((byte*)new global::System.Span((void*)((byte*)ptr + 4), 1)[0], new global::System.Span((void*)((byte*)ptr + 8), 1)[0]); if (new global::System.Span((void*)((byte*)ptr + 8), 1)[0] > 0) { global::System.Runtime.InteropServices.NativeMemory.Free((void*)new global::System.Span((void*)((byte*)ptr + 4), 1)[0]); } lifted = Result.Err(str); break; } default: throw new global::System.ArgumentException("invalid discriminant:" + new global::System.Span((byte*)ptr + 0, 1)[0]); } foreach (var cleanup in cleanups) { cleanup(); } if (lifted.IsOk) { var tmp = lifted.AsOk; return ; } else { throw new WitException(lifted.AsErr!, 0); } } public unsafe string GetDataFolder() { var handle = this.Handle; var retArea = stackalloc uint[3]; var ptr = (nint)MemoryHelper.AlignStackPtr(retArea, 4); ContextImportsInterop.Context.GetDataFolderWasmInterop.wasmImportGetDataFolder(handle, ptr); var str = global::System.Text.Encoding.UTF8.GetString((byte*)new global::System.Span((void*)((byte*)ptr + 0), 1)[0], new global::System.Span((void*)((byte*)ptr + 4), 1)[0]); if (new global::System.Span((void*)((byte*)ptr + 4), 1)[0] > 0) { global::System.Runtime.InteropServices.NativeMemory.Free((void*)new global::System.Span((void*)((byte*)ptr + 0), 1)[0]); } return str; } public unsafe global::PluginWorld.wit.Imports.pumpkin.plugin.v0_1_0.IServerImports.Server GetServer() { var handle = this.Handle; var result = ContextImportsInterop.Context.GetServerWasmInterop.wasmImportGetServer(handle); var resource = new global::PluginWorld.wit.Imports.pumpkin.plugin.v0_1_0.IServerImports.Server(new global::PluginWorld.wit.Imports.pumpkin.plugin.v0_1_0.IServerImports.Server.THandle(result)); return resource; } } }