in src/DotPulsar/MessageId.cs [164:212]
public static bool TryParse(string s, out MessageId result)
{
result = Earliest;
if (string.IsNullOrWhiteSpace(s))
return false;
var input = s.AsMemory();
var startOfNextEntry = 0;
var index = 0;
var field = 0;
ulong ledgerId = 0;
ulong entryId = 0;
int partition = 0;
int batchIndex = 0;
var topic = string.Empty;
while (index <= s.Length)
{
if (index == s.Length || s[index] == ':')
{
var length = index - startOfNextEntry;
if (length == 0)
return false;
var value = input.Slice(startOfNextEntry, length);
if (field == 0 && !TryParse(value.Span, out ledgerId))
return false;
else if (field == 1 && !TryParse(value.Span, out entryId))
return false;
else if (field == 2 && !TryParse(value.Span, out partition))
return false;
else if (field == 3)
{
if (!TryParse(value.Span, out batchIndex))
return false;
if (index + 1 < s.Length)
topic = s.Substring(index + 1);
break;
}
startOfNextEntry = index + 1;
++field;
}
++index;
}
result = new MessageId(ledgerId, entryId, partition, batchIndex, topic);
return true;
}