registerDecoder method
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',
);
}
}