blob: b2b1c6fdd51676fecc92078f3e882f27416bf312 [file] [log] [blame]
// 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();
}
}