From a587e8e3478a588c7829a0e5e499a51d2b982155 Mon Sep 17 00:00:00 2001 From: Joseph Doherty Date: Sat, 28 Feb 2026 08:47:21 -0500 Subject: [PATCH] feat(batch5): implement jetstream error constructors group07 --- .../JetStreamErrors.GeneratedConstructors.cs | 144 ++++++++++++++++++ ...tStreamErrorsGeneratedConstructorsTests.cs | 33 ++++ porting.db | Bin 6426624 -> 6434816 bytes tools/generate-jetstream-errors.sh | 18 +++ 4 files changed, 195 insertions(+) diff --git a/dotnet/src/ZB.MOM.NatsNet.Server/JetStream/JetStreamErrors.GeneratedConstructors.cs b/dotnet/src/ZB.MOM.NatsNet.Server/JetStream/JetStreamErrors.GeneratedConstructors.cs index 888d750..b8a3887 100644 --- a/dotnet/src/ZB.MOM.NatsNet.Server/JetStream/JetStreamErrors.GeneratedConstructors.cs +++ b/dotnet/src/ZB.MOM.NatsNet.Server/JetStream/JetStreamErrors.GeneratedConstructors.cs @@ -792,6 +792,134 @@ public static partial class JsApiErrors return Clone(MirrorOverlappingSubjectFilters); } + public static JsApiError NewJSMirrorWithAtomicPublishError(params ErrorOption[] opts) + { + if (ParseOpts(opts) is JsApiError overridden) + return Clone(overridden); + + return Clone(MirrorWithAtomicPublish); + } + + public static JsApiError NewJSMirrorWithCountersError(params ErrorOption[] opts) + { + if (ParseOpts(opts) is JsApiError overridden) + return Clone(overridden); + + return Clone(MirrorWithCounters); + } + + public static JsApiError NewJSMirrorWithFirstSeqError(params ErrorOption[] opts) + { + if (ParseOpts(opts) is JsApiError overridden) + return Clone(overridden); + + return Clone(MirrorWithFirstSeq); + } + + public static JsApiError NewJSMirrorWithMsgSchedulesError(params ErrorOption[] opts) + { + if (ParseOpts(opts) is JsApiError overridden) + return Clone(overridden); + + return Clone(MirrorWithMsgSchedules); + } + + public static JsApiError NewJSMirrorWithSourcesError(params ErrorOption[] opts) + { + if (ParseOpts(opts) is JsApiError overridden) + return Clone(overridden); + + return Clone(MirrorWithSources); + } + + public static JsApiError NewJSMirrorWithStartSeqAndTimeError(params ErrorOption[] opts) + { + if (ParseOpts(opts) is JsApiError overridden) + return Clone(overridden); + + return Clone(MirrorWithStartSeqAndTime); + } + + public static JsApiError NewJSMirrorWithSubjectFiltersError(params ErrorOption[] opts) + { + if (ParseOpts(opts) is JsApiError overridden) + return Clone(overridden); + + return Clone(MirrorWithSubjectFilters); + } + + public static JsApiError NewJSMirrorWithSubjectsError(params ErrorOption[] opts) + { + if (ParseOpts(opts) is JsApiError overridden) + return Clone(overridden); + + return Clone(MirrorWithSubjects); + } + + public static JsApiError NewJSNoAccountError(params ErrorOption[] opts) + { + if (ParseOpts(opts) is JsApiError overridden) + return Clone(overridden); + + return Clone(NoAccount); + } + + public static JsApiError NewJSNoLimitsError(params ErrorOption[] opts) + { + if (ParseOpts(opts) is JsApiError overridden) + return Clone(overridden); + + return Clone(NoLimits); + } + + public static JsApiError NewJSNoMessageFoundError(params ErrorOption[] opts) + { + if (ParseOpts(opts) is JsApiError overridden) + return Clone(overridden); + + return Clone(NoMessageFound); + } + + public static JsApiError NewJSNotEmptyRequestError(params ErrorOption[] opts) + { + if (ParseOpts(opts) is JsApiError overridden) + return Clone(overridden); + + return Clone(NotEmptyRequest); + } + + public static JsApiError NewJSNotEnabledError(params ErrorOption[] opts) + { + if (ParseOpts(opts) is JsApiError overridden) + return Clone(overridden); + + return Clone(NotEnabled); + } + + public static JsApiError NewJSNotEnabledForAccountError(params ErrorOption[] opts) + { + if (ParseOpts(opts) is JsApiError overridden) + return Clone(overridden); + + return Clone(NotEnabledForAccount); + } + + public static JsApiError NewJSReplicasCountCannotBeNegativeError(params ErrorOption[] opts) + { + if (ParseOpts(opts) is JsApiError overridden) + return Clone(overridden); + + return Clone(ReplicasCountCannotBeNegative); + } + + public static JsApiError NewJSRequiredApiLevelError(params ErrorOption[] opts) + { + if (ParseOpts(opts) is JsApiError overridden) + return Clone(overridden); + + return Clone(RequiredApiLevel); + } + public static JsApiError NewJSAtomicPublishTooLargeBatchError(object? size, params ErrorOption[] opts) { if (ParseOpts(opts) is JsApiError overridden) @@ -944,4 +1072,20 @@ public static partial class JsApiErrors return NewWithTags(MirrorInvalidTransformDestination, "{err}", err); } + public static JsApiError NewJSPedanticError(Exception err, params ErrorOption[] opts) + { + if (ParseOpts(opts) is JsApiError overridden) + return Clone(overridden); + + return NewWithTags(Pedantic, "{err}", err); + } + + public static JsApiError NewJSRaftGeneralError(Exception err, params ErrorOption[] opts) + { + if (ParseOpts(opts) is JsApiError overridden) + return Clone(overridden); + + return NewWithTags(RaftGeneralErr, "{err}", err); + } + } diff --git a/dotnet/tests/ZB.MOM.NatsNet.Server.Tests/JetStream/JetStreamErrorsGeneratedConstructorsTests.cs b/dotnet/tests/ZB.MOM.NatsNet.Server.Tests/JetStream/JetStreamErrorsGeneratedConstructorsTests.cs index 221311e..22b61ea 100644 --- a/dotnet/tests/ZB.MOM.NatsNet.Server.Tests/JetStream/JetStreamErrorsGeneratedConstructorsTests.cs +++ b/dotnet/tests/ZB.MOM.NatsNet.Server.Tests/JetStream/JetStreamErrorsGeneratedConstructorsTests.cs @@ -201,4 +201,37 @@ public sealed class JetStreamErrorsGeneratedConstructorsTests fromOverride.Description.ShouldBe(expected.Description); ReferenceEquals(fromOverride, expected).ShouldBeFalse(); } + + [Fact] + public void ConstructorSurface_Group07() + { + JsApiErrors.NewJSMirrorWithAtomicPublishError().ErrCode.ShouldBe(JsApiErrors.MirrorWithAtomicPublish.ErrCode); + JsApiErrors.NewJSMirrorWithCountersError().ErrCode.ShouldBe(JsApiErrors.MirrorWithCounters.ErrCode); + JsApiErrors.NewJSMirrorWithFirstSeqError().ErrCode.ShouldBe(JsApiErrors.MirrorWithFirstSeq.ErrCode); + JsApiErrors.NewJSMirrorWithMsgSchedulesError().ErrCode.ShouldBe(JsApiErrors.MirrorWithMsgSchedules.ErrCode); + JsApiErrors.NewJSMirrorWithSourcesError().ErrCode.ShouldBe(JsApiErrors.MirrorWithSources.ErrCode); + JsApiErrors.NewJSMirrorWithStartSeqAndTimeError().ErrCode.ShouldBe(JsApiErrors.MirrorWithStartSeqAndTime.ErrCode); + JsApiErrors.NewJSMirrorWithSubjectFiltersError().ErrCode.ShouldBe(JsApiErrors.MirrorWithSubjectFilters.ErrCode); + JsApiErrors.NewJSMirrorWithSubjectsError().ErrCode.ShouldBe(JsApiErrors.MirrorWithSubjects.ErrCode); + JsApiErrors.NewJSNoAccountError().ErrCode.ShouldBe(JsApiErrors.NoAccount.ErrCode); + JsApiErrors.NewJSNoLimitsError().ErrCode.ShouldBe(JsApiErrors.NoLimits.ErrCode); + JsApiErrors.NewJSNoMessageFoundError().ErrCode.ShouldBe(JsApiErrors.NoMessageFound.ErrCode); + JsApiErrors.NewJSNotEmptyRequestError().ErrCode.ShouldBe(JsApiErrors.NotEmptyRequest.ErrCode); + JsApiErrors.NewJSNotEnabledError().ErrCode.ShouldBe(JsApiErrors.NotEnabled.ErrCode); + JsApiErrors.NewJSNotEnabledForAccountError().ErrCode.ShouldBe(JsApiErrors.NotEnabledForAccount.ErrCode); + JsApiErrors.NewJSPeerRemapError().ErrCode.ShouldBe(JsApiErrors.PeerRemap.ErrCode); + JsApiErrors.NewJSReplicasCountCannotBeNegativeError().ErrCode.ShouldBe(JsApiErrors.ReplicasCountCannotBeNegative.ErrCode); + JsApiErrors.NewJSRequiredApiLevelError().ErrCode.ShouldBe(JsApiErrors.RequiredApiLevel.ErrCode); + + JsApiErrors.NewJSPedanticError(new InvalidOperationException("strict")).Description.ShouldBe("pedantic mode: strict"); + JsApiErrors.NewJSRaftGeneralError(new InvalidOperationException("raft failure")).Description.ShouldBe("raft failure"); + JsApiErrors.NewJSRestoreSubscribeFailedError(new InvalidOperationException("subscribe failed"), "$JS.API.CONSUMER").Description.ShouldBe("JetStream unable to subscribe to restore snapshot $JS.API.CONSUMER: subscribe failed"); + + var expected = new JsApiError { Code = 493, ErrCode = 9096, Description = "override-7" }; + var fromOverride = JsApiErrors.NewJSNoAccountError(JsApiErrors.Unless(expected)); + fromOverride.Code.ShouldBe(expected.Code); + fromOverride.ErrCode.ShouldBe(expected.ErrCode); + fromOverride.Description.ShouldBe(expected.Description); + ReferenceEquals(fromOverride, expected).ShouldBeFalse(); + } } diff --git a/porting.db b/porting.db index 86b1fe521e817b86caa6c352c070a0a565a83e14..938caf025ada6dcf265ad30376755bf96d4d9bfa 100644 GIT binary patch delta 4159 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 Q?ER&dC4GJP7p|n_zuD@3>Hq)$ delta 3451 zcmZve4Nz3q702JZyYC%#-+nw0fxs?`(L|64el#MH0M*+dcscju9X(ltx z63Y-LACCF*&Nyv?lguPdrzSF$r>Pn=LZTA8by90nwVTvxf`-t6|I@y9>hx}|elC)L7S!fN<~m*qCO&Ny{h z-mC=5QKVTU%V1T)N?`@UN?g)2MX=L?Dn=EG}-lelAJhq#*aa+iC)^@@+sB|bT zO0`m`+2qrqvGFU*gp!=XXQ!S_v<`K3O7HvNs*P_C1XT4%)IqV@}Wv~Z@mBJnn zRsyRF2rY*Cgr#b|EMHg(Y?iR;uw-G$Fjd$zOv2Z~l3-)P5@8pF>98{$fvIq2VJ@nPX51P(aHY?7M=XB zVbRI|3KpIGf5D=Y|4&$C@aw`aZuJIK%%%DzOpK-a1uS~s|A2|HR3~83+y0#QjOz0O zvHua8VxNRo#aSaR7SBa~m}p83FwvCiVWKImgo&n97guwI*1Ia^@2wVF#dA>&EZU+P z7HzQ{7Hv@li?*l?zfhaGnt@mH;nTWneq76qan>GZZDBLEWU%M033m4~=_^)l;X{7r z=aZqk#`DBox@mDv$!M3hWH;Ar)3$R`Q7Io zj}KpDzyhp5F@`Uy%g*Mq?UF;vmgGh$+jZReE5|CW+`h;*n_gDeTR*hCgi_|u_Srkv za%VTC@!dyh8b5c0p5xn}q}jR%iX&|G`}ZOZ1merC1nk|cYRB)RmlhSkne zCTH;e0eXk;b(5F(KS?@&cYu=li$5Zpv1@?*jJNk$y?kgJGR_0E#H`zJfG(PK*9_8v z$eQuOAZapxu5iw+-R~RZGk2#Pq+iFB89zw5W@64E+7~Ia`z^{bm&$&JrAW((LzKj4 z9HzU?MB`x^Gh2H1lbvTDAvZ5PMjkU;_$CdC>^yU=X+NDa*IEWBKl1RqTdme~P4Y`} zNb+6<1yfIx~Xbg^0t%duC=neDg++$NW*LI9PG1o5rkyJkM z4r#pPIHISI-?|awx5vpQ$M0Fh^=^-5%s)X{w`CN*bQmYMXL#x{jt$dz{KX2tIx_VU z-0?0=#%Ha({yiLc_^fT~cQ)ZzE4RD(#7WfKa*~|<;Cpo9_A4TZq41W-h+I8MpWnX4 zc^bnK&KjksNxki+t^CnZnjiT%`-0RLOy~>R`hxbppw<_3^aY)LLDyi=EtgoeebNV9 z(e+;%r*z#Vhu<-o4o9X#cQEaSc11hSOZKxg8b}7yK?+C(Y2Xf!4l;lT zctIwZ0cL_MFbmuXW`jB4E^s%P3$j5DmI