blob: f4eecc66f79d1f6b9475693b0f19dbe775d0c1dc [file] [log] [blame]
// Copyright (c) 2017, Google Inc. Please see the AUTHORS file for details.
// All rights reserved. Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
import 'package:built_collection/built_collection.dart';
import 'package:built_value/serializer.dart';
import 'package:built_value/src/double_serializer.dart';
class NumSerializer implements PrimitiveSerializer<num> {
final bool structured = false;
@override
final Iterable<Type> types = BuiltList<Type>([num]);
@override
final String wireName = 'num';
@override
Object serialize(Serializers serializers, num number,
{FullType specifiedType = FullType.unspecified}) {
if (number.isNaN) {
return DoubleSerializer.nan;
} else if (number.isInfinite) {
return number.isNegative
? DoubleSerializer.negativeInfinity
: DoubleSerializer.infinity;
} else {
return number;
}
}
@override
num deserialize(Serializers serializers, Object serialized,
{FullType specifiedType = FullType.unspecified}) {
if (serialized == DoubleSerializer.nan) {
return double.nan;
} else if (serialized == DoubleSerializer.negativeInfinity) {
return double.negativeInfinity;
} else if (serialized == DoubleSerializer.infinity) {
return double.infinity;
} else {
return (serialized as num).toDouble();
}
}
}