parse<V> method

V? parse<V>(
  1. Object? value, [
  2. V? def
])

Parse value or return def.

See TypeParser.parserFor.

Implementation

V? parse<V>(Object? value, [V? def]) {
  if (value == null) return def;

  if (isString) {
    return TypeParser.parseString(value, def as String?) as V?;
  } else if (isInt) {
    return TypeParser.parseInt(value, def as int?) as V?;
  } else if (isBool) {
    return TypeParser.parseBool(value, def as bool?) as V?;
  } else if (isDouble) {
    return TypeParser.parseDouble(value, def as double?) as V?;
  } else if (isNum) {
    return TypeParser.parseNum(value, def as num?) as V?;
  } else if (isDateTime) {
    return TypeParser.parseDateTime(value, def as DateTime?) as V?;
  } else if (isUInt8List) {
    return TypeParser.parseUInt8List(value, def as Uint8List?) as V?;
  } else if (isBigInt) {
    return TypeParser.parseBigInt(value, def as BigInt?) as V?;
  } else if (isList) {
    return TypeParser.parseList(value, elementParser: argumentParser(0))
        as V?;
  } else if (isSet) {
    return TypeParser.parseSet(value, elementParser: argumentParser(0)) as V?;
  } else if (isMap) {
    return TypeParser.parseMap(value,
        keyParser: argumentParser(0), valueParser: argumentParser(1)) as V?;
  } else if (isMapEntry) {
    return TypeParser.parseMapEntry(value,
        keyParser: argumentParser(0), valueParser: argumentParser(1)) as V?;
  } else {
    if (value.runtimeType == type) {
      return value as V;
    }

    return null;
  }
}