[pve-devel] [PATCH dart_api_client 2/4] Add int serializer to handle string values

Aaron Lauterer a.lauterer at proxmox.com
Wed Jun 23 12:04:42 CEST 2021


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 at proxmox.com>
---
 lib/src/models/pve_int_serializer.dart | 25 +++++++++++++++++++++++++
 lib/src/models/serializers.dart        |  2 ++
 2 files changed, 27 insertions(+)
 create mode 100644 lib/src/models/pve_int_serializer.dart

diff --git a/lib/src/models/pve_int_serializer.dart b/lib/src/models/pve_int_serializer.dart
new file mode 100644
index 0000000..8986463
--- /dev/null
+++ b/lib/src/models/pve_int_serializer.dart
@@ -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;
+  }
+}
diff --git a/lib/src/models/serializers.dart b/lib/src/models/serializers.dart
index 57b06f4..2a0d501 100644
--- a/lib/src/models/serializers.dart
+++ b/lib/src/models/serializers.dart
@@ -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();
-- 
2.30.2






More information about the pve-devel mailing list