]> git.proxmox.com Git - flutter/proxmox_dart_api_client.git/commitdiff
Add int serializer to handle string values
authorAaron Lauterer <a.lauterer@proxmox.com>
Wed, 23 Jun 2021 10:04:42 +0000 (12:04 +0200)
committerThomas Lamprecht <t.lamprecht@proxmox.com>
Wed, 23 Jun 2021 11:18:22 +0000 (13:18 +0200)
Adding a custom serializer for integers, allows us to handle situations
in which the PVE API provides the values in other types. For now, the
most likely situation is that the API formats the JSON value as string
instead of a number, therefore we try to catch that and parse it as int.

Signed-off-by: Aaron Lauterer <a.lauterer@proxmox.com>
lib/src/models/pve_int_serializer.dart [new file with mode: 0644]
lib/src/models/serializers.dart

diff --git a/lib/src/models/pve_int_serializer.dart b/lib/src/models/pve_int_serializer.dart
new file mode 100644 (file)
index 0000000..8986463
--- /dev/null
@@ -0,0 +1,25 @@
+import 'package:built_collection/built_collection.dart';
+import 'package:built_value/serializer.dart';
+
+class PveIntSerializer implements PrimitiveSerializer<int> {
+  final bool structured = false;
+  @override
+  final Iterable<Type> types = BuiltList<Type>([int]);
+  @override
+  final String wireName = 'String';
+
+  @override
+  Object serialize(Serializers serializers, int value,
+      {FullType specifiedType = FullType.unspecified}) {
+    return value;
+  }
+
+  @override
+  int deserialize(Serializers serializers, Object? serialized,
+      {FullType specifiedType = FullType.unspecified}) {
+    if (serialized is String) {
+      return int.parse(serialized);
+    }
+    return serialized as int;
+  }
+}
index 57b06f450bbf2d3ad938347012beae2d7e93e6d5..2a0d5015de9d339c631746e09a0de804e86604c3 100644 (file)
@@ -3,6 +3,7 @@ import 'package:built_value/json_object.dart';
 import 'package:built_value/serializer.dart';
 import 'package:built_value/standard_json_plugin.dart';
 import 'package:proxmox_dart_api_client/src/models/pve_bool_serializer.dart';
+import 'package:proxmox_dart_api_client/src/models/pve_int_serializer.dart';
 import 'package:proxmox_dart_api_client/src/models/pve_string_serializer.dart';
 import 'package:proxmox_dart_api_client/src/models/pve_datetime_from_epoch_serializer.dart';
 import 'package:proxmox_dart_api_client/src/models/pve_models.dart';
@@ -42,6 +43,7 @@ part 'serializers.g.dart';
 final Serializers serializers = (_$serializers.toBuilder()
       ..addPlugin(StandardJsonPlugin())
       ..add(PveBoolSerializer())
+      ..add(PveIntSerializer())
       ..add(PveStringSerializer())
       ..add(PveDateTimeFromEpoch()))
     .build();