using System; using System.Diagnostics.CodeAnalysis; using System.Runtime.InteropServices; using JetBrains.Annotations; namespace Foodsoft.Alpm.Marshalling { internal readonly struct UTF8In : ICustomMarshaler { private static readonly UTF8In _instance = default; public void CleanUpManagedData(object managedObj) { } public void CleanUpNativeData(IntPtr pNativeData) { if (pNativeData == IntPtr.Zero) return; Marshal.FreeCoTaskMem(pNativeData); } public int GetNativeDataSize() { return -1; } public IntPtr MarshalManagedToNative(object? managedObj) { return Marshal.StringToCoTaskMemUTF8((string?) managedObj); } public object MarshalNativeToManaged(IntPtr pNativeData) { return Marshal.PtrToStringUTF8(pNativeData)!; } [UsedImplicitly] private static ICustomMarshaler GetInstance(string cookie) { return _instance; } } }