From 17b07ab7c63e9c8165296de09b29ca6f02bff1b3 Mon Sep 17 00:00:00 2001 From: Aaron Lauterer Date: Wed, 23 Jun 2021 12:04:42 +0200 Subject: [PATCH] Add int serializer to handle string values 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 --- 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 { + final bool structured = false; + @override + final Iterable types = BuiltList([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.39.2