ResponseStatusClassifier
using System.ClientModel.Internal;
using System.Runtime.CompilerServices;
namespace System.ClientModel.Primitives
{
internal class ResponseStatusClassifier : PipelineMessageClassifier
{
private BitVector640 _successCodes;
public ResponseStatusClassifier(ReadOnlySpan<ushort> successStatusCodes)
{
_successCodes = default(BitVector640);
ReadOnlySpan<ushort> readOnlySpan = successStatusCodes;
foreach (int statusCode in readOnlySpan) {
AddClassifier(statusCode, false);
}
}
[System.Runtime.CompilerServices.NullableContext(1)]
public override bool TryClassify(PipelineMessage message, out bool isError)
{
Argument.AssertNotNull(message, "message");
message.AssertResponse();
isError = !_successCodes[message.Response.Status];
return true;
}
[System.Runtime.CompilerServices.NullableContext(1)]
public override bool TryClassify(PipelineMessage message, [System.Runtime.CompilerServices.Nullable(2)] Exception exception, out bool isRetriable)
{
Argument.AssertNotNull(message, "message");
PipelineMessageClassifier.Default.TryClassify(message, exception, out isRetriable);
return true;
}
private void AddClassifier(int statusCode, bool isError)
{
Argument.AssertInRange(statusCode, 0, 639, "statusCode");
_successCodes[statusCode] = !isError;
}
}
}