private unsafe static bool TryConvert <T>(IntPtr intPtr, UIntPtr length, TryReadItem <T> factory, [MaybeNullWhen(false)] out T value) { if (intPtr != IntPtr.Zero) { var span = new ReadOnlySpan <byte>((byte *)intPtr, (int)length); var reader = new BufferReader <byte>(span); return(factory(ref reader, out value)); } value = default !;
public static bool TryReadHexToken <T>(this JsonReader reader, TryReadItem <T> factory, [MaybeNullWhen(false)] out T value) { if (reader.TokenType == JsonToken.String) { var hex = (string)reader.Value; using var memoryOwner = MemoryPool <byte> .Shared.Rent(hex.Length >> 1); if (hex.TryConvertHexString(memoryOwner.Memory.Span, out var bytesWritten)) { var bufferReader = new BufferReader <byte>(memoryOwner.Memory.Span.Slice(0, hex.Length >> 1)); if (factory(ref bufferReader, out value)) { return(true); } } } value = default !;