-
Notifications
You must be signed in to change notification settings - Fork 5.3k
Open
Labels
api-approvedAPI was approved in API review, it can be implementedAPI was approved in API review, it can be implementedarea-System.Globalizationin-prThere is an active PR which will close this issue when it is mergedThere is an active PR which will close this issue when it is merged
Milestone
Description
The current IdnMapping API accepts/returns strings and throws on invalid input. I propose a set of Span-based APIs to avoid allocations.
namespace System.Globalization
{
public sealed class IdnMapping
{
// Existing API
public string GetAscii(string unicode);
public string GetAscii(string unicode, int index);
public string GetAscii(string unicode, int index, int count);
public string GetUnicode(string ascii);
public string GetUnicode(string ascii, int index);
public string GetUnicode(string ascii, int index, int count);
// Proposed API
public string GetAscii(ReadOnlySpan<char> unicode);
public bool TryGetAscii(ReadOnlySpan<char> unicode, Span<char> destination, out int charsWritten);
public string GetUnicode(ReadOnlySpan<char> ascii);
public bool TryGetUnicode(ReadOnlySpan<char> ascii, Span<char> destination, out int charsWritten);
}
}Both Get and TryGet* methods would throw on invalid input.
TryGet* would return false on insufficient space in the destination span.
This new API would simplify call sites and remove allocations throughout code dealing with internationalized domain names, like Uri and Markdig.
cc: @tarekgh
Copilot
Metadata
Metadata
Assignees
Labels
api-approvedAPI was approved in API review, it can be implementedAPI was approved in API review, it can be implementedarea-System.Globalizationin-prThere is an active PR which will close this issue when it is mergedThere is an active PR which will close this issue when it is merged