blob: 8d739528040ee034777a090ed4249838800e7619 [file] [log] [blame]
// Copyright (c) 2019, the Dart project authors. 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 '../../protobuf.dart';
/// A TypeRegistry is used to resolve Any messages in the proto3 JSON conversion.
///
/// You must provide a TypeRegistry containing all message types used in
/// Any message fields, or the JSON conversion will fail because data
/// in Any message fields is unrecognizable. You don't need to supply a
/// TypeRegistry if you don't use Any message fields.
class TypeRegistry {
final Map<String, BuilderInfo> _mapping;
/// Constructs a new TypeRegistry recognizing the given types of messages.
///
/// You can use an empty message of the given type to represent the type. Eg:
///
/// ```dart
/// TypeRegistry([Foo(), Bar()]);
/// ```
TypeRegistry(Iterable<GeneratedMessage> types)
: _mapping = Map.fromEntries(types.map((message) =>
MapEntry(message.info_.qualifiedMessageName, message.info_)));
const TypeRegistry.empty() : _mapping = const {};
BuilderInfo lookup(String qualifiedName) {
return _mapping[qualifiedName];
}
}