From 802e3d6576024cd36c1cae5b8ec5074bf52b3fdf Mon Sep 17 00:00:00 2001 From: Joseph Doherty Date: Sat, 28 Feb 2026 08:32:48 -0500 Subject: [PATCH] feat(batch5): implement jetstream error constructors group03 --- .../JetStreamErrors.GeneratedConstructors.cs | 160 ++++++++++++++++++ ...tStreamErrorsGeneratedConstructorsTests.cs | 33 ++++ porting.db | Bin 6389760 -> 6397952 bytes tools/generate-jetstream-errors.sh | 20 +++ 4 files changed, 213 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 3398083..d3c827d 100644 --- a/dotnet/src/ZB.MOM.NatsNet.Server/JetStream/JetStreamErrors.GeneratedConstructors.cs +++ b/dotnet/src/ZB.MOM.NatsNet.Server/JetStream/JetStreamErrors.GeneratedConstructors.cs @@ -264,6 +264,134 @@ public static partial class JsApiErrors return Clone(ConsumerDoesNotExist); } + public static JsApiError NewJSConsumerDuplicateFilterSubjectsError(params ErrorOption[] opts) + { + if (ParseOpts(opts) is JsApiError overridden) + return Clone(overridden); + + return Clone(ConsumerDuplicateFilterSubjects); + } + + public static JsApiError NewJSConsumerDurableNameNotInSubjectError(params ErrorOption[] opts) + { + if (ParseOpts(opts) is JsApiError overridden) + return Clone(overridden); + + return Clone(ConsumerDurableNameNotInSubject); + } + + public static JsApiError NewJSConsumerDurableNameNotMatchSubjectError(params ErrorOption[] opts) + { + if (ParseOpts(opts) is JsApiError overridden) + return Clone(overridden); + + return Clone(ConsumerDurableNameNotMatchSubject); + } + + public static JsApiError NewJSConsumerDurableNameNotSetError(params ErrorOption[] opts) + { + if (ParseOpts(opts) is JsApiError overridden) + return Clone(overridden); + + return Clone(ConsumerDurableNameNotSet); + } + + public static JsApiError NewJSConsumerEmptyFilterError(params ErrorOption[] opts) + { + if (ParseOpts(opts) is JsApiError overridden) + return Clone(overridden); + + return Clone(ConsumerEmptyFilter); + } + + public static JsApiError NewJSConsumerEmptyGroupNameError(params ErrorOption[] opts) + { + if (ParseOpts(opts) is JsApiError overridden) + return Clone(overridden); + + return Clone(ConsumerEmptyGroupName); + } + + public static JsApiError NewJSConsumerEphemeralWithDurableInSubjectError(params ErrorOption[] opts) + { + if (ParseOpts(opts) is JsApiError overridden) + return Clone(overridden); + + return Clone(ConsumerEphemeralWithDurableInSubject); + } + + public static JsApiError NewJSConsumerEphemeralWithDurableNameError(params ErrorOption[] opts) + { + if (ParseOpts(opts) is JsApiError overridden) + return Clone(overridden); + + return Clone(ConsumerEphemeralWithDurableName); + } + + public static JsApiError NewJSConsumerExistingActiveError(params ErrorOption[] opts) + { + if (ParseOpts(opts) is JsApiError overridden) + return Clone(overridden); + + return Clone(ConsumerExistingActive); + } + + public static JsApiError NewJSConsumerFCRequiresPushError(params ErrorOption[] opts) + { + if (ParseOpts(opts) is JsApiError overridden) + return Clone(overridden); + + return Clone(ConsumerFCRequiresPush); + } + + public static JsApiError NewJSConsumerFilterNotSubsetError(params ErrorOption[] opts) + { + if (ParseOpts(opts) is JsApiError overridden) + return Clone(overridden); + + return Clone(ConsumerFilterNotSubset); + } + + public static JsApiError NewJSConsumerHBRequiresPushError(params ErrorOption[] opts) + { + if (ParseOpts(opts) is JsApiError overridden) + return Clone(overridden); + + return Clone(ConsumerHBRequiresPush); + } + + public static JsApiError NewJSConsumerInvalidDeliverSubjectError(params ErrorOption[] opts) + { + if (ParseOpts(opts) is JsApiError overridden) + return Clone(overridden); + + return Clone(ConsumerInvalidDeliverSubject); + } + + public static JsApiError NewJSConsumerInvalidGroupNameError(params ErrorOption[] opts) + { + if (ParseOpts(opts) is JsApiError overridden) + return Clone(overridden); + + return Clone(ConsumerInvalidGroupName); + } + + public static JsApiError NewJSConsumerInvalidPriorityGroupError(params ErrorOption[] opts) + { + if (ParseOpts(opts) is JsApiError overridden) + return Clone(overridden); + + return Clone(ConsumerInvalidPriorityGroup); + } + + public static JsApiError NewJSConsumerMaxDeliverBackoffError(params ErrorOption[] opts) + { + if (ParseOpts(opts) is JsApiError overridden) + return Clone(overridden); + + return Clone(ConsumerMaxDeliverBackoff); + } + public static JsApiError NewJSAtomicPublishTooLargeBatchError(object? size, params ErrorOption[] opts) { if (ParseOpts(opts) is JsApiError overridden) @@ -304,4 +432,36 @@ public static partial class JsApiErrors return NewWithTags(ConsumerDescriptionTooLong, "{max}", max); } + public static JsApiError NewJSConsumerInactiveThresholdExcessError(object? limit, params ErrorOption[] opts) + { + if (ParseOpts(opts) is JsApiError overridden) + return Clone(overridden); + + return NewWithTags(ConsumerInactiveThresholdExcess, "{limit}", limit); + } + + public static JsApiError NewJSConsumerInvalidPolicyError(Exception err, params ErrorOption[] opts) + { + if (ParseOpts(opts) is JsApiError overridden) + return Clone(overridden); + + return NewWithTags(ConsumerInvalidPolicy, "{err}", err); + } + + public static JsApiError NewJSConsumerInvalidResetError(Exception err, params ErrorOption[] opts) + { + if (ParseOpts(opts) is JsApiError overridden) + return Clone(overridden); + + return NewWithTags(ConsumerInvalidReset, "{err}", err); + } + + public static JsApiError NewJSConsumerInvalidSamplingError(Exception err, params ErrorOption[] opts) + { + if (ParseOpts(opts) is JsApiError overridden) + return Clone(overridden); + + return NewWithTags(ConsumerInvalidSampling, "{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 f310f23..6ad5c62 100644 --- a/dotnet/tests/ZB.MOM.NatsNet.Server.Tests/JetStream/JetStreamErrorsGeneratedConstructorsTests.cs +++ b/dotnet/tests/ZB.MOM.NatsNet.Server.Tests/JetStream/JetStreamErrorsGeneratedConstructorsTests.cs @@ -69,4 +69,37 @@ public sealed class JetStreamErrorsGeneratedConstructorsTests fromOverride.Description.ShouldBe(expected.Description); ReferenceEquals(fromOverride, expected).ShouldBeFalse(); } + + [Fact] + public void ConstructorSurface_Group03() + { + JsApiErrors.NewJSConsumerDuplicateFilterSubjectsError().ErrCode.ShouldBe(JsApiErrors.ConsumerDuplicateFilterSubjects.ErrCode); + JsApiErrors.NewJSConsumerDurableNameNotInSubjectError().ErrCode.ShouldBe(JsApiErrors.ConsumerDurableNameNotInSubject.ErrCode); + JsApiErrors.NewJSConsumerDurableNameNotMatchSubjectError().ErrCode.ShouldBe(JsApiErrors.ConsumerDurableNameNotMatchSubject.ErrCode); + JsApiErrors.NewJSConsumerDurableNameNotSetError().ErrCode.ShouldBe(JsApiErrors.ConsumerDurableNameNotSet.ErrCode); + JsApiErrors.NewJSConsumerEmptyFilterError().ErrCode.ShouldBe(JsApiErrors.ConsumerEmptyFilter.ErrCode); + JsApiErrors.NewJSConsumerEmptyGroupNameError().ErrCode.ShouldBe(JsApiErrors.ConsumerEmptyGroupName.ErrCode); + JsApiErrors.NewJSConsumerEphemeralWithDurableInSubjectError().ErrCode.ShouldBe(JsApiErrors.ConsumerEphemeralWithDurableInSubject.ErrCode); + JsApiErrors.NewJSConsumerEphemeralWithDurableNameError().ErrCode.ShouldBe(JsApiErrors.ConsumerEphemeralWithDurableName.ErrCode); + JsApiErrors.NewJSConsumerExistingActiveError().ErrCode.ShouldBe(JsApiErrors.ConsumerExistingActive.ErrCode); + JsApiErrors.NewJSConsumerFCRequiresPushError().ErrCode.ShouldBe(JsApiErrors.ConsumerFCRequiresPush.ErrCode); + JsApiErrors.NewJSConsumerFilterNotSubsetError().ErrCode.ShouldBe(JsApiErrors.ConsumerFilterNotSubset.ErrCode); + JsApiErrors.NewJSConsumerHBRequiresPushError().ErrCode.ShouldBe(JsApiErrors.ConsumerHBRequiresPush.ErrCode); + JsApiErrors.NewJSConsumerInvalidDeliverSubjectError().ErrCode.ShouldBe(JsApiErrors.ConsumerInvalidDeliverSubject.ErrCode); + JsApiErrors.NewJSConsumerInvalidGroupNameError().ErrCode.ShouldBe(JsApiErrors.ConsumerInvalidGroupName.ErrCode); + JsApiErrors.NewJSConsumerInvalidPriorityGroupError().ErrCode.ShouldBe(JsApiErrors.ConsumerInvalidPriorityGroup.ErrCode); + JsApiErrors.NewJSConsumerMaxDeliverBackoffError().ErrCode.ShouldBe(JsApiErrors.ConsumerMaxDeliverBackoff.ErrCode); + + JsApiErrors.NewJSConsumerInactiveThresholdExcessError(777).Description.ShouldBe("consumer inactive threshold exceeds system limit of 777"); + JsApiErrors.NewJSConsumerInvalidPolicyError(new InvalidOperationException("invalid policy")).Description.ShouldBe("invalid policy"); + JsApiErrors.NewJSConsumerInvalidResetError(new InvalidOperationException("bad reset")).Description.ShouldBe("invalid reset: bad reset"); + JsApiErrors.NewJSConsumerInvalidSamplingError(new InvalidOperationException("bad sampling")).Description.ShouldBe("failed to parse consumer sampling configuration: bad sampling"); + + var expected = new JsApiError { Code = 497, ErrCode = 9092, Description = "override-3" }; + var fromOverride = JsApiErrors.NewJSConsumerDuplicateFilterSubjectsError(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 dd9b83d0fad08a7e05c891c11026f4d3713dcf90..47fcb44b2627df299e9b21667000a32e1c8effc4 100644 GIT binary patch delta 4664 zcmaKudvH|M8Nm0P-FxrZy}S3`eI(|wH*6Bfb4fPY%>xvWH&ub4L4iofT7sa+BLr#@ z4GEc}W0wFk!m+h8Roc!Ve_(K0E`!igt4?3yaoWyM8fdXNRj5c68CtCE*}a>ajhx;; zzMb#4=l;HP&OMLaojb8}=V|QRTP!SaIK-lTkr`mY(XPAe!MRddPLs5&q`JCpN9`?(LR>j1-FkWbGx;1tnno<`P&d^hsWa!;!L@Wk%0f z1KHnz~!qDpOHQhZu-K(V# zBhjLuJP2-D6kv4OB0r-Mi!?@OEK(Vrwn$<0x!VlfkB}sYMaaZOmk!5BPfn{b97t72dPL`QPAj`}m zfaD*6?b9WNEu~q*$1<}qf zUd>}%I|>N`d&zSrV2UiesWy}CH&g|}8ODk?;NcKj;rp0X5sQeI!eN*1Q{TsA^ZRhJ z@d<@rdRg~k;cm8*#e&r4XTLZPSvXm^SO_dc4E=!|R2BU|8H$jSa^xY+b5W_;YP?vEnt)|XHVJ8f z1l#p=jR|DWBori1N5keb?o2nkN{4*py?68oIdrwaPa>5_CV#(L;v;G$x;WZ>5jlLd zKs6hsx1@1>JX(cNb|BxWV)c#c@nbm8INM%Vi(1`m% z#*Q26IS`dppHqk1x_j2GS;uY#WgPj&k(UhIR8yp&$nPbde1E&K;a}=@Kz3AjDCEY! z)tV?fNV&Cw<0vqW{KkE^)E8Z(v!)~b6AfsEt}@4mP;tOR@O#cS;T_?)a9H@hFeL0W zkft36q#&Rrh#1gbAZsUf_{g+dYB6~;pbe4X%8nxPSWtTdbdsABI}*l(wwCxUsi^% zo6Xaz!dmX>=%@~xo35FxstM=iHhokRHn$FIiiW3V>Z#^Ys2zd<2Us<*l1zVFFCu-_ ztk18a?4!0eT%69%r+dqk^pTRfa80gUGXyenhbjN8o*lEyLHa>m__FE!yguBLGk#-b zB>bog$HK>AI@%j@{uov}4k{bGr{n^6zjQ%Nx;{<6E9}|j915}84-7Pr5`>D#SHIKq z$tSLk#K}uC`S^Z@97?L<&6I7 zn8m)T$eG^2hM{6MgoOizZFfbxcbzoq%Zs(^5>!FfGS)BBqlt zt-!Pr(<)4>F|EP07SkxElQFHsv>wwKrVW@jVj9OZfoT(_&6u`e+KTBEOs8UcC#H8{ zIt|n5n9jiTZcJxlIt$a;n9jj;E~fJ^osa1POuvEYJ(%8$>3x_k#B>p+i!p7(bP1;S zWBLH5?U*jb^g&D?!gLv?%Q0PnX$PhcW4aR4PE1!Fqg}3-qanvxhZK)~&%^rsi^~HJpwedCG$=G@G`^!_CIEG|vY~&cCt+9b)2)4!(9K&U6tmha` zTjOz#0d0-PI0oPvuJqeAv~9_2?#A^0fIP=>hq_#OU6FmOy{EkS@|RIe8J-DDvzhlcbaVO2Q%`fYT8O*VMi251 zjuEsqp5hn*TVp%N@Y@>S<`|l-@g&DkZH;en425eHXD_{N9D}@Hm#iagi;}|syDGPG zEHAg8(KYGi7_zOgg=2VZjUJBS<{G8x*{5$KS-iymVIifl3BNS751>mdV0Vb0w|&XQ z=Nl%IO>>eOd95>9NZy{E)V_W;HJ%tu@B5|xMAH)p6biKsJPv=wA;;7 iz1d!yY*oZl<*b_EU1`=YlEhOzSvAgEp3GnG*#7`ZmX#L( delta 2074 zcmY+DYiv|i5XbL1d-v|y-R`}&?NV#GTifmXLA%s~MN12U6+w`fS}9;viZm)>Mf{|I zn1KiuNPvl=M#U)M1J+771ga@&Vw8xJXpAA{WzZOvQhAhDMbGYS7x%+IncvKrIdd{| z*7SmB%^L7*8SQP-G$VU!UL$Mzq;*m?YhU+XwS2Fd86UIJxcda#%o=6gNtWr2XnK$4 zJn`%^E1qs!*=GE!$V}1=Ty}=Fa^tN0_6%F*U2R;^G;LEdd|A=UNg7nNB1xANJ)WeC zismQjf}*A*omW(sq`wuFCuu;@&E~9g3U7ATFMI!BS&SQ3@#jC;)Jo%@l-!||-0LZ+ z*W|RnSWhO~zun7UM{})Rg{SiE`t3jR@8ma(&-8L}5VL*!HQaT;&cUG`+pP3ugggfpk22*#TQ5+e+r2d@}-cGLf#b8Q^=D-JmgXB$}YjJowdgG z5NS2fuYBQg4p=^l8fH z7Wr3MZjl?xa*O!tieGAEV;b=; zJY1VSR-T=0iO~8>$GMV6NmueJ8S>I`U;h-WF~m4*Ef50pqGAlT9`gmUIVyg@j(xr{ zXh(&OxdkGC#s|I<`9^`LWyusD_7n;epDl14-13qhkQ0l9{r~XhB9V!26$>}4ugmWY zp>rgXhr9c;(=o3^1aZ&NNC>SGaXNWl0QdA~TW<8&_mN`xWT_CtRX3KZf{j%p_Z=@2 z&TyovLc|iy%k~Q49d>T27&)GJ*6~U)~CY~&I z(r>P;tS@!yhPz3GmzSzDW^^R`&obwZ;c#8Ka=!kBuXsnRuCLc)j?`ljeM{KfAG$O6 zX&_&$FphX@JzIHLdmrcIFp%fIilhev>pY!d^{#oZjKy4`-gWkHBn$g`BYo~06xO(V zUH(NRjU|7Hg&ki;$`TPzQ)dRgUE$>6i2~t6`ZDsVd#vlL$T)YQDFT!WbQ@3}P(Dx; zr~s%Cs0gSSs064Ks0^qar~;@GXbeylP&H5tXe>|-(Ct9AK;wYM1Kj~s2Q&fbPN2Jh z>VYN#H2^gNO#+$>bT`lxps7Ij05t*K3p5SrKA`D9Gl1>~nh7)u=mDVFKy!fR0?h-O z5A-0=LqHD$H3K~Yv;e3DXd%!dpv6Fs?x$A$T_?@3HLKEW4!xSz73>R&K&`)3Z1Np2 S&KS02zwiOCv{yYg;QtTQcC_^X diff --git a/tools/generate-jetstream-errors.sh b/tools/generate-jetstream-errors.sh index a1d34b4..73dcab3 100755 --- a/tools/generate-jetstream-errors.sh +++ b/tools/generate-jetstream-errors.sh @@ -37,6 +37,22 @@ simple_methods=( "NewJSConsumerDirectRequiresEphemeralError|ConsumerDirectRequiresEphemeral" "NewJSConsumerDirectRequiresPushError|ConsumerDirectRequiresPush" "NewJSConsumerDoesNotExistError|ConsumerDoesNotExist" + "NewJSConsumerDuplicateFilterSubjectsError|ConsumerDuplicateFilterSubjects" + "NewJSConsumerDurableNameNotInSubjectError|ConsumerDurableNameNotInSubject" + "NewJSConsumerDurableNameNotMatchSubjectError|ConsumerDurableNameNotMatchSubject" + "NewJSConsumerDurableNameNotSetError|ConsumerDurableNameNotSet" + "NewJSConsumerEmptyFilterError|ConsumerEmptyFilter" + "NewJSConsumerEmptyGroupNameError|ConsumerEmptyGroupName" + "NewJSConsumerEphemeralWithDurableInSubjectError|ConsumerEphemeralWithDurableInSubject" + "NewJSConsumerEphemeralWithDurableNameError|ConsumerEphemeralWithDurableName" + "NewJSConsumerExistingActiveError|ConsumerExistingActive" + "NewJSConsumerFCRequiresPushError|ConsumerFCRequiresPush" + "NewJSConsumerFilterNotSubsetError|ConsumerFilterNotSubset" + "NewJSConsumerHBRequiresPushError|ConsumerHBRequiresPush" + "NewJSConsumerInvalidDeliverSubjectError|ConsumerInvalidDeliverSubject" + "NewJSConsumerInvalidGroupNameError|ConsumerInvalidGroupName" + "NewJSConsumerInvalidPriorityGroupError|ConsumerInvalidPriorityGroup" + "NewJSConsumerMaxDeliverBackoffError|ConsumerMaxDeliverBackoff" ) templated_methods=( @@ -45,6 +61,10 @@ templated_methods=( "NewJSClusterNoPeersError|Exception|err|ClusterNoPeers|{err}" "NewJSConsumerCreateError|Exception|err|ConsumerCreateErr|{err}" "NewJSConsumerDescriptionTooLongError|object?|max|ConsumerDescriptionTooLong|{max}" + "NewJSConsumerInactiveThresholdExcessError|object?|limit|ConsumerInactiveThresholdExcess|{limit}" + "NewJSConsumerInvalidPolicyError|Exception|err|ConsumerInvalidPolicy|{err}" + "NewJSConsumerInvalidResetError|Exception|err|ConsumerInvalidReset|{err}" + "NewJSConsumerInvalidSamplingError|Exception|err|ConsumerInvalidSampling|{err}" ) {