using System; using System.Runtime.InteropServices; using System.Text; namespace Foodsoft.Alpm { internal readonly struct UTF8InMarshaler : ICustomMarshaler { private static readonly UTF8InMarshaler _instance = default; public void CleanUpManagedData(object managedObj) { } public void CleanUpNativeData(IntPtr pNativeData) { if (pNativeData == IntPtr.Zero) return; Marshal.FreeCoTaskMem(pNativeData); } public int GetNativeDataSize() => -1; public IntPtr MarshalManagedToNative(object? managedObj) { return Marshal.StringToCoTaskMemUTF8((string?) managedObj); } public object MarshalNativeToManaged(IntPtr pNativeData) { return Marshal.PtrToStringUTF8(pNativeData)!; } // ReSharper disable once UnusedMember.Local // ReSharper disable once UnusedParameter.Local private static ICustomMarshaler GetInstance(string cookie) { return _instance; } } }