Uniformize log messages format
[e-mobility-charging-stations-simulator.git] / src / charging-station / ocpp / OCPPServiceUtils.ts
index 9d7cf6200ad1d3cdaef8a9ead1718c6b64ca6803..96b34218bae93f78a595545a29b2969fc91000fc 100644 (file)
@@ -1,4 +1,28 @@
+import type { DefinedError, ErrorObject } from 'ajv';
+
+import { ErrorType } from '../../types/ocpp/ErrorType';
+
 export class OCPPServiceUtils {
+  protected constructor() {
+    // This is intentional
+  }
+
+  public static ajvErrorsToErrorType(errors: ErrorObject[]): ErrorType {
+    for (const error of errors as DefinedError[]) {
+      switch (error.keyword) {
+        case 'type':
+          return ErrorType.TYPE_CONSTRAINT_VIOLATION;
+        case 'dependencies':
+        case 'required':
+          return ErrorType.OCCURRENCE_CONSTRAINT_VIOLATION;
+        case 'pattern':
+        case 'format':
+          return ErrorType.PROPERTY_CONSTRAINT_VIOLATION;
+      }
+    }
+    return ErrorType.FORMAT_VIOLATION;
+  }
+
   protected static getLimitFromSampledValueTemplateCustomValue(
     value: string,
     limit: number,
@@ -9,8 +33,9 @@ export class OCPPServiceUtils {
   ): number {
     options.limitationEnabled = options?.limitationEnabled ?? true;
     options.unitMultiplier = options?.unitMultiplier ?? 1;
+    const numberValue = isNaN(parseInt(value)) ? Infinity : parseInt(value);
     return options?.limitationEnabled
-      ? Math.min(parseInt(value) * options.unitMultiplier, limit)
-      : parseInt(value) * options.unitMultiplier;
+      ? Math.min(numberValue * options.unitMultiplier, limit)
+      : numberValue * options.unitMultiplier;
   }
 }