blob: 9a5d12465d6d9f105408f0ec8a221c7f082adcb3 [file] [log] [blame]
// Copyright (c) 2015, 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';
class BuiltSetSerializer implements StructuredSerializer<BuiltSet> {
final bool structured = true;
@override
final Iterable<Type> types =
BuiltList<Type>([BuiltSet, BuiltSet<Object>().runtimeType]);
@override
final String wireName = 'set';
@override
Iterable<Object?> serialize(Serializers serializers, BuiltSet builtSet,
{FullType specifiedType = FullType.unspecified}) {
var isUnderspecified =
specifiedType.isUnspecified || specifiedType.parameters.isEmpty;
if (!isUnderspecified) serializers.expectBuilder(specifiedType);
var elementType = specifiedType.parameters.isEmpty
? FullType.unspecified
: specifiedType.parameters[0];
return builtSet
.map((item) => serializers.serialize(item, specifiedType: elementType));
}
@override
BuiltSet deserialize(Serializers serializers, Iterable serialized,
{FullType specifiedType = FullType.unspecified}) {
var isUnderspecified =
specifiedType.isUnspecified || specifiedType.parameters.isEmpty;
var elementType = specifiedType.parameters.isEmpty
? FullType.unspecified
: specifiedType.parameters[0];
var result = isUnderspecified
? SetBuilder<Object>()
: serializers.newBuilder(specifiedType) as SetBuilder;
result.replace(serialized.map(
(item) => serializers.deserialize(item, specifiedType: elementType)));
return result.build();
}
}