Files
natsnet/tools/generate-jetstream-errors.sh

118 lines
5.1 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
repo_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
output_file="$repo_root/dotnet/src/ZB.MOM.NatsNet.Server/JetStream/JetStreamErrors.GeneratedConstructors.cs"
simple_methods=(
"NewJSAccountResourcesExceededError|AccountResourcesExceeded"
"NewJSAtomicPublishContainsDuplicateMessageError|AtomicPublishContainsDuplicateMessage"
"NewJSAtomicPublishDisabledError|AtomicPublishDisabled"
"NewJSAtomicPublishIncompleteBatchError|AtomicPublishIncompleteBatch"
"NewJSAtomicPublishInvalidBatchCommitError|AtomicPublishInvalidBatchCommit"
"NewJSAtomicPublishInvalidBatchIDError|AtomicPublishInvalidBatchID"
"NewJSAtomicPublishMissingSeqError|AtomicPublishMissingSeq"
"NewJSBadRequestError|BadRequest"
"NewJSClusterIncompleteError|ClusterIncomplete"
"NewJSClusterNotActiveError|ClusterNotActive"
"NewJSClusterNotAssignedError|ClusterNotAssigned"
"NewJSClusterNotAvailError|ClusterNotAvail"
"NewJSClusterNotLeaderError|ClusterNotLeader"
"NewJSClusterPeerNotMemberError|ClusterPeerNotMember"
"NewJSClusterRequiredError|ClusterRequired"
"NewJSClusterServerMemberChangeInflightError|ClusterServerMemberChangeInflight"
"NewJSClusterServerNotMemberError|ClusterServerNotMember"
"NewJSClusterTagsError|ClusterTags"
"NewJSClusterUnSupportFeatureError|ClusterUnSupportFeature"
"NewJSConsumerAckPolicyInvalidError|ConsumerAckPolicyInvalid"
"NewJSConsumerAckWaitNegativeError|ConsumerAckWaitNegative"
"NewJSConsumerAlreadyExistsError|ConsumerAlreadyExists"
"NewJSConsumerBackOffNegativeError|ConsumerBackOffNegative"
"NewJSConsumerBadDurableNameError|ConsumerBadDurableName"
"NewJSConsumerConfigRequiredError|ConsumerConfigRequired"
"NewJSConsumerCreateDurableAndNameMismatchError|ConsumerCreateDurableAndNameMismatch"
"NewJSConsumerCreateFilterSubjectMismatchError|ConsumerCreateFilterSubjectMismatch"
"NewJSConsumerDeliverCycleError|ConsumerDeliverCycle"
"NewJSConsumerDeliverToWildcardsError|ConsumerDeliverToWildcards"
"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=(
"NewJSAtomicPublishTooLargeBatchError|object?|size|AtomicPublishTooLargeBatch|{size}"
"NewJSAtomicPublishUnsupportedHeaderBatchError|object?|header|AtomicPublishUnsupportedHeaderBatch|{header}"
"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}"
)
{
cat <<'EOF'
// Copyright 2020-2026 The NATS Authors
// Licensed under the Apache License, Version 2.0 (the "License");
//
// Generated constructor surface for JetStream API errors.
// Source parity: server/jetstream_errors_generated.go
namespace ZB.MOM.NatsNet.Server;
public static partial class JsApiErrors
{
EOF
for entry in "${simple_methods[@]}"; do
IFS='|' read -r method field <<<"$entry"
cat <<EOF
public static JsApiError ${method}(params ErrorOption[] opts)
{
if (ParseOpts(opts) is JsApiError overridden)
return Clone(overridden);
return Clone(${field});
}
EOF
done
for entry in "${templated_methods[@]}"; do
IFS='|' read -r method arg_type arg_name field placeholder <<<"$entry"
cat <<EOF
public static JsApiError ${method}(${arg_type} ${arg_name}, params ErrorOption[] opts)
{
if (ParseOpts(opts) is JsApiError overridden)
return Clone(overridden);
return NewWithTags(${field}, "${placeholder}", ${arg_name});
}
EOF
done
cat <<'EOF'
}
EOF
} >"$output_file"
echo "Generated $output_file"