feat(batch5): implement jetstream error constructors group08
This commit is contained in:
@@ -920,6 +920,94 @@ public static partial class JsApiErrors
|
||||
return Clone(RequiredApiLevel);
|
||||
}
|
||||
|
||||
public static JsApiError NewJSSnapshotDeliverSubjectInvalidError(params ErrorOption[] opts)
|
||||
{
|
||||
if (ParseOpts(opts) is JsApiError overridden)
|
||||
return Clone(overridden);
|
||||
|
||||
return Clone(SnapshotDeliverSubjectInvalid);
|
||||
}
|
||||
|
||||
public static JsApiError NewJSSourceDuplicateDetectedError(params ErrorOption[] opts)
|
||||
{
|
||||
if (ParseOpts(opts) is JsApiError overridden)
|
||||
return Clone(overridden);
|
||||
|
||||
return Clone(SourceDuplicateDetected);
|
||||
}
|
||||
|
||||
public static JsApiError NewJSSourceInvalidStreamNameError(params ErrorOption[] opts)
|
||||
{
|
||||
if (ParseOpts(opts) is JsApiError overridden)
|
||||
return Clone(overridden);
|
||||
|
||||
return Clone(SourceInvalidStreamName);
|
||||
}
|
||||
|
||||
public static JsApiError NewJSSourceMaxMessageSizeTooBigError(params ErrorOption[] opts)
|
||||
{
|
||||
if (ParseOpts(opts) is JsApiError overridden)
|
||||
return Clone(overridden);
|
||||
|
||||
return Clone(SourceMaxMessageSizeTooBig);
|
||||
}
|
||||
|
||||
public static JsApiError NewJSSourceMultipleFiltersNotAllowedError(params ErrorOption[] opts)
|
||||
{
|
||||
if (ParseOpts(opts) is JsApiError overridden)
|
||||
return Clone(overridden);
|
||||
|
||||
return Clone(SourceMultipleFiltersNotAllowed);
|
||||
}
|
||||
|
||||
public static JsApiError NewJSSourceOverlappingSubjectFiltersError(params ErrorOption[] opts)
|
||||
{
|
||||
if (ParseOpts(opts) is JsApiError overridden)
|
||||
return Clone(overridden);
|
||||
|
||||
return Clone(SourceOverlappingSubjectFilters);
|
||||
}
|
||||
|
||||
public static JsApiError NewJSSourceWithMsgSchedulesError(params ErrorOption[] opts)
|
||||
{
|
||||
if (ParseOpts(opts) is JsApiError overridden)
|
||||
return Clone(overridden);
|
||||
|
||||
return Clone(SourceWithMsgSchedules);
|
||||
}
|
||||
|
||||
public static JsApiError NewJSStorageResourcesExceededError(params ErrorOption[] opts)
|
||||
{
|
||||
if (ParseOpts(opts) is JsApiError overridden)
|
||||
return Clone(overridden);
|
||||
|
||||
return Clone(StorageResourcesExceeded);
|
||||
}
|
||||
|
||||
public static JsApiError NewJSStreamDuplicateMessageConflictError(params ErrorOption[] opts)
|
||||
{
|
||||
if (ParseOpts(opts) is JsApiError overridden)
|
||||
return Clone(overridden);
|
||||
|
||||
return Clone(StreamDuplicateMessageConflict);
|
||||
}
|
||||
|
||||
public static JsApiError NewJSStreamExpectedLastSeqPerSubjectInvalidError(params ErrorOption[] opts)
|
||||
{
|
||||
if (ParseOpts(opts) is JsApiError overridden)
|
||||
return Clone(overridden);
|
||||
|
||||
return Clone(StreamExpectedLastSeqPerSubjectInvalid);
|
||||
}
|
||||
|
||||
public static JsApiError NewJSStreamExpectedLastSeqPerSubjectNotReadyError(params ErrorOption[] opts)
|
||||
{
|
||||
if (ParseOpts(opts) is JsApiError overridden)
|
||||
return Clone(overridden);
|
||||
|
||||
return Clone(StreamExpectedLastSeqPerSubjectNotReady);
|
||||
}
|
||||
|
||||
public static JsApiError NewJSAtomicPublishTooLargeBatchError(object? size, params ErrorOption[] opts)
|
||||
{
|
||||
if (ParseOpts(opts) is JsApiError overridden)
|
||||
@@ -1088,4 +1176,76 @@ public static partial class JsApiErrors
|
||||
return NewWithTags(RaftGeneralErr, "{err}", err);
|
||||
}
|
||||
|
||||
public static JsApiError NewJSSequenceNotFoundError(ulong seq, params ErrorOption[] opts)
|
||||
{
|
||||
if (ParseOpts(opts) is JsApiError overridden)
|
||||
return Clone(overridden);
|
||||
|
||||
return NewWithTags(SequenceNotFound, "{seq}", seq);
|
||||
}
|
||||
|
||||
public static JsApiError NewJSSourceConsumerSetupFailedError(Exception err, params ErrorOption[] opts)
|
||||
{
|
||||
if (ParseOpts(opts) is JsApiError overridden)
|
||||
return Clone(overridden);
|
||||
|
||||
return NewWithTags(SourceConsumerSetupFailed, "{err}", err);
|
||||
}
|
||||
|
||||
public static JsApiError NewJSSourceInvalidSubjectFilterError(Exception err, params ErrorOption[] opts)
|
||||
{
|
||||
if (ParseOpts(opts) is JsApiError overridden)
|
||||
return Clone(overridden);
|
||||
|
||||
return NewWithTags(SourceInvalidSubjectFilter, "{err}", err);
|
||||
}
|
||||
|
||||
public static JsApiError NewJSSourceInvalidTransformDestinationError(Exception err, params ErrorOption[] opts)
|
||||
{
|
||||
if (ParseOpts(opts) is JsApiError overridden)
|
||||
return Clone(overridden);
|
||||
|
||||
return NewWithTags(SourceInvalidTransformDestination, "{err}", err);
|
||||
}
|
||||
|
||||
public static JsApiError NewJSStreamAssignmentError(Exception err, params ErrorOption[] opts)
|
||||
{
|
||||
if (ParseOpts(opts) is JsApiError overridden)
|
||||
return Clone(overridden);
|
||||
|
||||
return NewWithTags(StreamAssignment, "{err}", err);
|
||||
}
|
||||
|
||||
public static JsApiError NewJSStreamCreateError(Exception err, params ErrorOption[] opts)
|
||||
{
|
||||
if (ParseOpts(opts) is JsApiError overridden)
|
||||
return Clone(overridden);
|
||||
|
||||
return NewWithTags(StreamCreate, "{err}", err);
|
||||
}
|
||||
|
||||
public static JsApiError NewJSStreamDeleteError(Exception err, params ErrorOption[] opts)
|
||||
{
|
||||
if (ParseOpts(opts) is JsApiError overridden)
|
||||
return Clone(overridden);
|
||||
|
||||
return NewWithTags(StreamDelete, "{err}", err);
|
||||
}
|
||||
|
||||
public static JsApiError NewJSStreamExternalApiOverlapError(object? prefix, object? subject, params ErrorOption[] opts)
|
||||
{
|
||||
if (ParseOpts(opts) is JsApiError overridden)
|
||||
return Clone(overridden);
|
||||
|
||||
return NewWithTags(StreamExternalApiOverlap, "{prefix}", prefix, "{subject}", subject);
|
||||
}
|
||||
|
||||
public static JsApiError NewJSStreamExternalDelPrefixOverlapsError(object? prefix, object? subject, params ErrorOption[] opts)
|
||||
{
|
||||
if (ParseOpts(opts) is JsApiError overridden)
|
||||
return Clone(overridden);
|
||||
|
||||
return NewWithTags(StreamExternalDelPrefixOverlaps, "{prefix}", prefix, "{subject}", subject);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -234,4 +234,37 @@ public sealed class JetStreamErrorsGeneratedConstructorsTests
|
||||
fromOverride.Description.ShouldBe(expected.Description);
|
||||
ReferenceEquals(fromOverride, expected).ShouldBeFalse();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ConstructorSurface_Group08()
|
||||
{
|
||||
JsApiErrors.NewJSSnapshotDeliverSubjectInvalidError().ErrCode.ShouldBe(JsApiErrors.SnapshotDeliverSubjectInvalid.ErrCode);
|
||||
JsApiErrors.NewJSSourceDuplicateDetectedError().ErrCode.ShouldBe(JsApiErrors.SourceDuplicateDetected.ErrCode);
|
||||
JsApiErrors.NewJSSourceInvalidStreamNameError().ErrCode.ShouldBe(JsApiErrors.SourceInvalidStreamName.ErrCode);
|
||||
JsApiErrors.NewJSSourceMaxMessageSizeTooBigError().ErrCode.ShouldBe(JsApiErrors.SourceMaxMessageSizeTooBig.ErrCode);
|
||||
JsApiErrors.NewJSSourceMultipleFiltersNotAllowedError().ErrCode.ShouldBe(JsApiErrors.SourceMultipleFiltersNotAllowed.ErrCode);
|
||||
JsApiErrors.NewJSSourceOverlappingSubjectFiltersError().ErrCode.ShouldBe(JsApiErrors.SourceOverlappingSubjectFilters.ErrCode);
|
||||
JsApiErrors.NewJSSourceWithMsgSchedulesError().ErrCode.ShouldBe(JsApiErrors.SourceWithMsgSchedules.ErrCode);
|
||||
JsApiErrors.NewJSStorageResourcesExceededError().ErrCode.ShouldBe(JsApiErrors.StorageResourcesExceeded.ErrCode);
|
||||
JsApiErrors.NewJSStreamDuplicateMessageConflictError().ErrCode.ShouldBe(JsApiErrors.StreamDuplicateMessageConflict.ErrCode);
|
||||
JsApiErrors.NewJSStreamExpectedLastSeqPerSubjectInvalidError().ErrCode.ShouldBe(JsApiErrors.StreamExpectedLastSeqPerSubjectInvalid.ErrCode);
|
||||
JsApiErrors.NewJSStreamExpectedLastSeqPerSubjectNotReadyError().ErrCode.ShouldBe(JsApiErrors.StreamExpectedLastSeqPerSubjectNotReady.ErrCode);
|
||||
|
||||
JsApiErrors.NewJSSequenceNotFoundError(9UL).Description.ShouldBe("sequence 9 not found");
|
||||
JsApiErrors.NewJSSourceConsumerSetupFailedError(new InvalidOperationException("source setup failed")).Description.ShouldBe("source setup failed");
|
||||
JsApiErrors.NewJSSourceInvalidSubjectFilterError(new InvalidOperationException("bad filter")).Description.ShouldBe("source transform source: bad filter");
|
||||
JsApiErrors.NewJSSourceInvalidTransformDestinationError(new InvalidOperationException("bad destination")).Description.ShouldBe("source transform: bad destination");
|
||||
JsApiErrors.NewJSStreamAssignmentError(new InvalidOperationException("assignment failed")).Description.ShouldBe("assignment failed");
|
||||
JsApiErrors.NewJSStreamCreateError(new InvalidOperationException("create failed")).Description.ShouldBe("create failed");
|
||||
JsApiErrors.NewJSStreamDeleteError(new InvalidOperationException("delete failed")).Description.ShouldBe("delete failed");
|
||||
JsApiErrors.NewJSStreamExternalApiOverlapError("api", "foo").Description.ShouldBe("stream external api prefix api must not overlap with foo");
|
||||
JsApiErrors.NewJSStreamExternalDelPrefixOverlapsError("dlv", "foo").Description.ShouldBe("stream external delivery prefix dlv overlaps with stream subject foo");
|
||||
|
||||
var expected = new JsApiError { Code = 492, ErrCode = 9097, Description = "override-8" };
|
||||
var fromOverride = JsApiErrors.NewJSSnapshotDeliverSubjectInvalidError(JsApiErrors.Unless(expected));
|
||||
fromOverride.Code.ShouldBe(expected.Code);
|
||||
fromOverride.ErrCode.ShouldBe(expected.ErrCode);
|
||||
fromOverride.Description.ShouldBe(expected.Description);
|
||||
ReferenceEquals(fromOverride, expected).ShouldBeFalse();
|
||||
}
|
||||
}
|
||||
|
||||
BIN
porting.db
BIN
porting.db
Binary file not shown.
@@ -119,6 +119,17 @@ simple_methods=(
|
||||
"NewJSNotEnabledForAccountError|NotEnabledForAccount"
|
||||
"NewJSReplicasCountCannotBeNegativeError|ReplicasCountCannotBeNegative"
|
||||
"NewJSRequiredApiLevelError|RequiredApiLevel"
|
||||
"NewJSSnapshotDeliverSubjectInvalidError|SnapshotDeliverSubjectInvalid"
|
||||
"NewJSSourceDuplicateDetectedError|SourceDuplicateDetected"
|
||||
"NewJSSourceInvalidStreamNameError|SourceInvalidStreamName"
|
||||
"NewJSSourceMaxMessageSizeTooBigError|SourceMaxMessageSizeTooBig"
|
||||
"NewJSSourceMultipleFiltersNotAllowedError|SourceMultipleFiltersNotAllowed"
|
||||
"NewJSSourceOverlappingSubjectFiltersError|SourceOverlappingSubjectFilters"
|
||||
"NewJSSourceWithMsgSchedulesError|SourceWithMsgSchedules"
|
||||
"NewJSStorageResourcesExceededError|StorageResourcesExceeded"
|
||||
"NewJSStreamDuplicateMessageConflictError|StreamDuplicateMessageConflict"
|
||||
"NewJSStreamExpectedLastSeqPerSubjectInvalidError|StreamExpectedLastSeqPerSubjectInvalid"
|
||||
"NewJSStreamExpectedLastSeqPerSubjectNotReadyError|StreamExpectedLastSeqPerSubjectNotReady"
|
||||
)
|
||||
|
||||
templated_methods=(
|
||||
@@ -143,6 +154,18 @@ templated_methods=(
|
||||
"NewJSMirrorInvalidTransformDestinationError|Exception|err|MirrorInvalidTransformDestination|{err}"
|
||||
"NewJSPedanticError|Exception|err|Pedantic|{err}"
|
||||
"NewJSRaftGeneralError|Exception|err|RaftGeneralErr|{err}"
|
||||
"NewJSSequenceNotFoundError|ulong|seq|SequenceNotFound|{seq}"
|
||||
"NewJSSourceConsumerSetupFailedError|Exception|err|SourceConsumerSetupFailed|{err}"
|
||||
"NewJSSourceInvalidSubjectFilterError|Exception|err|SourceInvalidSubjectFilter|{err}"
|
||||
"NewJSSourceInvalidTransformDestinationError|Exception|err|SourceInvalidTransformDestination|{err}"
|
||||
"NewJSStreamAssignmentError|Exception|err|StreamAssignment|{err}"
|
||||
"NewJSStreamCreateError|Exception|err|StreamCreate|{err}"
|
||||
"NewJSStreamDeleteError|Exception|err|StreamDelete|{err}"
|
||||
)
|
||||
|
||||
templated_methods_two_args=(
|
||||
"NewJSStreamExternalApiOverlapError|object?|prefix|object?|subject|StreamExternalApiOverlap|{prefix}|{subject}"
|
||||
"NewJSStreamExternalDelPrefixOverlapsError|object?|prefix|object?|subject|StreamExternalDelPrefixOverlaps|{prefix}|{subject}"
|
||||
)
|
||||
|
||||
{
|
||||
@@ -184,6 +207,20 @@ EOF
|
||||
return NewWithTags(${field}, "${placeholder}", ${arg_name});
|
||||
}
|
||||
|
||||
EOF
|
||||
done
|
||||
|
||||
for entry in "${templated_methods_two_args[@]}"; do
|
||||
IFS='|' read -r method arg1_type arg1_name arg2_type arg2_name field placeholder1 placeholder2 <<<"$entry"
|
||||
cat <<EOF
|
||||
public static JsApiError ${method}(${arg1_type} ${arg1_name}, ${arg2_type} ${arg2_name}, params ErrorOption[] opts)
|
||||
{
|
||||
if (ParseOpts(opts) is JsApiError overridden)
|
||||
return Clone(overridden);
|
||||
|
||||
return NewWithTags(${field}, "${placeholder1}", ${arg1_name}, "${placeholder2}", ${arg2_name});
|
||||
}
|
||||
|
||||
EOF
|
||||
done
|
||||
|
||||
|
||||
Reference in New Issue
Block a user