These text parsers are very convenient when parsing text based protocols (like HTTP/1.1 and RESP). It would be great to have overloads of the existing APIs that support ReadOnlySequence<byte>. I end up writing code like this:
private static bool TryParse(in ReadOnlySequence<byte> bytes, out int value, out int bytesConsumed)
{
if (bytes.IsSingleSegment)
{
if (!Utf8Parser.TryParse(bytes.FirstSpan, out value, out bytesConsumed))
{
return false;
}
}
else
{
Span<byte> textSpan= stackalloc byte[128];
bytes.CopyTo(textSpan);
if (!Utf8Parser.TryParse(textSpan, out value, out bytesConsumed))
{
return false;
}
}
return true;
}
I would be great if this was built into the existing parser.
public partial static class Utf8Parser
{
public static bool TryParse(in ReadOnlySequence<byte> source, out bool value, char standardFormat = '\0');
public static bool TryParse(in ReadOnlySequence<byte> source, out byte value, char standardFormat = '\0');
public static bool TryParse(in ReadOnlySequence<byte> source, out DateTime value, char standardFormat = '\0');
public static bool TryParse(in ReadOnlySequence<byte> source, out DateTimeOffset value, char standardFormat = '\0');
public static bool TryParse(in ReadOnlySequence<byte> source, out decimal value, char standardFormat = '\0');
public static bool TryParse(in ReadOnlySequence<byte> source, out double value, char standardFormat = '\0');
public static bool TryParse(in ReadOnlySequence<byte> source, out Guid value, char standardFormat = '\0');
public static bool TryParse(in ReadOnlySequence<byte> source, out short value, char standardFormat = '\0');
public static bool TryParse(in ReadOnlySequence<byte> source, out int value, char standardFormat = '\0');
public static bool TryParse(in ReadOnlySequence<byte> source, out long value, char standardFormat = '\0');
public static bool TryParse(in ReadOnlySequence<byte> source, out sbyte value, char standardFormat = '\0');
public static bool TryParse(in ReadOnlySequence<byte> source, out float value, char standardFormat = '\0');
public static bool TryParse(in ReadOnlySequence<byte> source, out TimeSpan value, char standardFormat = '\0');
public static bool TryParse(in ReadOnlySequence<byte> source, out ushort value, char standardFormat = '\0');
public static bool TryParse(in ReadOnlySequence<byte> source, out uint value, char standardFormat = '\0');
public static bool TryParse(in ReadOnlySequence<byte> source, out ulong value, char standardFormat = '\0');
}
cc @ahsonkhan @GrabYourPitchforks
These text parsers are very convenient when parsing text based protocols (like HTTP/1.1 and RESP). It would be great to have overloads of the existing APIs that support
ReadOnlySequence<byte>. I end up writing code like this:I would be great if this was built into the existing parser.
cc @ahsonkhan @GrabYourPitchforks