DiagramModelCodecs constructor

DiagramModelCodecs({
  1. Iterable<DiagramContentCodec> contents = const [],
  2. Iterable<DiagramTextCodec> texts = const [],
})

Implementation

factory DiagramModelCodecs({
  Iterable<DiagramContentCodec> contents = const [],
  Iterable<DiagramTextCodec> texts = const [],
}) {
  final contentTypes = <String, DiagramContentCodec>{};
  for (final codec in contents) {
    if (codec.type.trim().isEmpty ||
        codec.version < 1 ||
        contentTypes.containsKey(codec.type)) {
      throw ArgumentError(
        'Invalid or duplicate content codec: ${codec.type}',
      );
    }
    contentTypes[codec.type] = codec;
  }
  final textTypes = <String, DiagramTextCodec>{};
  for (final codec in texts) {
    final existing = textTypes[codec.type];
    if (codec.type.trim().isEmpty ||
        codec.version < 1 ||
        (existing != null && existing != codec)) {
      throw ArgumentError('Invalid or conflicting text codec: ${codec.type}');
    }
    textTypes[codec.type] = codec;
  }
  return DiagramModelCodecs._(
    Map.unmodifiable(contentTypes),
    Map.unmodifiable(textTypes),
  );
}