]> Piment Noir Git Repositories - e-mobility-charging-stations-simulator.git/commitdiff
fix: type buildRejected reasonCode as ReasonCodeEnumType instead of string
authorJérôme Benoit <jerome.benoit@sap.com>
Fri, 27 Mar 2026 12:55:08 +0000 (13:55 +0100)
committerJérôme Benoit <jerome.benoit@sap.com>
Fri, 27 Mar 2026 12:55:08 +0000 (13:55 +0100)
Eliminates the pointless enum→string→enum round-trip: the callback
parameter is now typed as ReasonCodeEnumType directly, removing the
as-string casts at call sites and the reverse keyof-typeof reconversion
in callers.

src/charging-station/ocpp/2.0/OCPP20IncomingRequestService.ts
src/charging-station/ocpp/2.0/OCPP20ServiceUtils.ts
tests/charging-station/ocpp/2.0/OCPP20ServiceUtils-enforceMessageLimits.test.ts

index 7871b9f282dbcd24b7b05c4a3357ec98e3c1b5bc..a7739c36196278bfbeb07c829c8aab1d8f02276c 100644 (file)
@@ -586,7 +586,7 @@ export class OCPP20IncomingRequestService extends OCPPIncomingRequestService {
         attributeStatusInfo: {
           additionalInfo: reason.info,
 
-          reasonCode: ReasonCodeEnumType[reason.reasonCode as keyof typeof ReasonCodeEnumType],
+          reasonCode: reason.reasonCode,
         },
         attributeType: v.attributeType,
         component: v.component,
@@ -657,7 +657,7 @@ export class OCPP20IncomingRequestService extends OCPPIncomingRequestService {
         attributeStatusInfo: {
           additionalInfo: reason.info,
 
-          reasonCode: ReasonCodeEnumType[reason.reasonCode as keyof typeof ReasonCodeEnumType],
+          reasonCode: reason.reasonCode,
         },
         attributeType: v.attributeType ?? AttributeEnumType.Actual,
         component: v.component,
index aa778e4377ddbb2fb972c401fd7797cba57b1956..a29dc1dab7e451a34f72be37103f2f2c7ee976a8 100644 (file)
@@ -190,14 +190,14 @@ export class OCPP20ServiceUtils extends OCPPServiceUtils {
     data: T[],
     itemsLimit: number,
     bytesLimit: number,
-    buildRejected: (item: T, reason: { info: string; reasonCode: string }) => unknown,
+    buildRejected: (item: T, reason: { info: string; reasonCode: ReasonCodeEnumType }) => unknown,
     logger: { debug: (...args: unknown[]) => void }
   ): { rejected: boolean; results: unknown[] } {
     if (itemsLimit > 0 && data.length > itemsLimit) {
       const results = data.map(d =>
         buildRejected(d, {
           info: `ItemsPerMessage limit ${itemsLimit.toString()} exceeded (${data.length.toString()} requested)`,
-          reasonCode: ReasonCodeEnumType.TooManyElements as string,
+          reasonCode: ReasonCodeEnumType.TooManyElements,
         })
       )
       logger.debug(
@@ -211,7 +211,7 @@ export class OCPP20ServiceUtils extends OCPPServiceUtils {
         const results = data.map(d =>
           buildRejected(d, {
             info: `BytesPerMessage limit ${bytesLimit.toString()} exceeded (estimated ${estimatedSize.toString()} bytes)`,
-            reasonCode: ReasonCodeEnumType.TooLargeElement as string,
+            reasonCode: ReasonCodeEnumType.TooLargeElement,
           })
         )
         logger.debug(
@@ -232,7 +232,7 @@ export class OCPP20ServiceUtils extends OCPPServiceUtils {
     originalData: T[],
     currentResults: unknown[],
     bytesLimit: number,
-    buildRejected: (item: T, reason: { info: string; reasonCode: string }) => unknown,
+    buildRejected: (item: T, reason: { info: string; reasonCode: ReasonCodeEnumType }) => unknown,
     logger: { debug: (...args: unknown[]) => void }
   ): unknown[] {
     if (bytesLimit > 0) {
@@ -242,7 +242,7 @@ export class OCPP20ServiceUtils extends OCPPServiceUtils {
           const results = originalData.map(d =>
             buildRejected(d, {
               info: `BytesPerMessage limit ${bytesLimit.toString()} exceeded (actual ${actualSize.toString()} bytes)`,
-              reasonCode: ReasonCodeEnumType.TooLargeElement as string,
+              reasonCode: ReasonCodeEnumType.TooLargeElement,
             })
           )
           logger.debug(
index 5b91c7330d532078c0556d9054c90fd023e7f928..22650077cae9337d1396aa088d467306e8bdc5fb 100644 (file)
@@ -18,7 +18,7 @@ interface MockLogger {
 interface RejectedResult {
   info: string
   original: TestItem
-  reasonCode: string
+  reasonCode: ReasonCodeEnumType
 }
 
 interface TestItem {
@@ -58,7 +58,10 @@ function makeMockStation () {
 
 /** @returns A builder function that creates rejected result objects */
 function makeRejectedBuilder () {
-  return (item: TestItem, reason: { info: string; reasonCode: string }): RejectedResult => ({
+  return (
+    item: TestItem,
+    reason: { info: string; reasonCode: ReasonCodeEnumType }
+  ): RejectedResult => ({
     info: reason.info,
     original: item,
     reasonCode: reason.reasonCode,
@@ -361,7 +364,7 @@ await describe('OCPP20ServiceUtils.enforceMessageLimits', async () => {
       const station = makeMockStation()
       const logger = makeMockLogger()
       const item = makeItem('WebSocketPingInterval', 'xyz')
-      const capturedReasons: { info: string; reasonCode: string }[] = []
+      const capturedReasons: { info: string; reasonCode: ReasonCodeEnumType }[] = []
 
       OCPP20ServiceUtils.enforceMessageLimits(
         station,