| // Copyright (c) 2018, 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'; |
| |
| /// Alternative serializer for [DateTime]. |
| /// |
| /// Install this to use ISO8601 format instead of the default (microseconds |
| /// since epoch). Use [SerializersBuilder.add] to install it. |
| /// |
| /// An exception will be thrown on attempt to serialize local DateTime |
| /// instances; you must use UTC. |
| class Iso8601DateTimeSerializer implements PrimitiveSerializer<DateTime> { |
| final bool structured = false; |
| @override |
| final Iterable<Type> types = BuiltList<Type>([DateTime]); |
| @override |
| final String wireName = 'DateTime'; |
| |
| @override |
| Object serialize(Serializers serializers, DateTime dateTime, |
| {FullType specifiedType = FullType.unspecified}) { |
| if (!dateTime.isUtc) { |
| throw ArgumentError.value( |
| dateTime, 'dateTime', 'Must be in utc for serialization.'); |
| } |
| |
| return dateTime.toIso8601String(); |
| } |
| |
| @override |
| DateTime deserialize(Serializers serializers, Object? serialized, |
| {FullType specifiedType = FullType.unspecified}) { |
| return DateTime.parse(serialized as String).toUtc(); |
| } |
| } |