canDecodable method

Discriminator? canDecodable(
  1. Decoder decoder,
  2. String? currentKey,
  3. String? currentValue
)

Implementation

Discriminator? canDecodable(Decoder decoder, String? currentKey, String? currentValue) {
  final discriminator = this;

  if (identical(discriminator.value, 'use_as_default')) {
    return discriminator;
  }

  if (discriminator.value is Function) {
    if (discriminator.value case bool Function(Decoder) fn) {
      if (fn(decoder.clone())) {
        return discriminator;
      } else {
        return null;
      }
    } else {
      throw AssertionError('Discriminator function must be of type "bool Function(Decoder)".');
    }
  }

  if (currentValue == discriminator.value) {
    return discriminator;
  }

  return null;
}