registerDecoder method

void registerDecoder(
  1. PixaDecoderDescriptor decoder
)

Registers a decoder descriptor.

Implementation

void registerDecoder(PixaDecoderDescriptor decoder) {
  _validateExecutionContract(decoder, decoder.executionKind, 'decoder');
  _putUnique(_decoders, decoder, 'decoder');
  _validateDecoderCapabilities(decoder);
  if (decoder.mimeTypes.isEmpty &&
      decoder.formatIds.isEmpty &&
      decoder.signatures.isEmpty) {
    throw StateError(
      'Pixa decoder "${decoder.id}" must declare at least one route.',
    );
  }
  for (final String mimeType in decoder.mimeTypes) {
    final String normalizedMimeType = _normalizeMimeType(mimeType);
    if (normalizedMimeType.isEmpty) {
      throw StateError('Pixa decoder MIME type claim must not be empty.');
    }
    _claim(
      _decoderPriorities,
      '$normalizedMimeType#${decoder.priority}',
      decoder.id,
      'decoder priority',
    );
  }
  for (final String formatId in decoder.formatIds) {
    final String normalizedFormatId = _normalizeRouteClaim(formatId);
    if (normalizedFormatId.isEmpty) {
      throw StateError('Pixa decoder format id claim must not be empty.');
    }
    _claim(
      _decoderFormatPriorities,
      '$normalizedFormatId#${decoder.priority}',
      decoder.id,
      'decoder format priority',
    );
  }
  for (final PixaDecoderSignature signature in decoder.signatures) {
    signature._validate();
    _claim(
      _decoderSignaturePriorities,
      '${signature.routeKey}#${decoder.priority}',
      decoder.id,
      'decoder signature priority',
    );
  }
}