getDartDefaultFor static method

Tuple<Code, bool> getDartDefaultFor(
  1. FieldPrimitive primitive,
  2. List<SchemaFieldType> typeArguments,
  3. String typeId, [
  4. bool anonymous = false,
])

Returns the default value as Dart code for a primitive type. It returns the Dart code and a boolean that indicates if the type is a union

Implementation

static Tuple<Code, bool> getDartDefaultFor(FieldPrimitive primitive, List<SchemaFieldType> typeArguments, String typeId, [bool anonymous = false]) {
  if(primitive == FieldPrimitive.list) {
    return tuple(anonymous ? Code("const []") : Code("const List<${mapper[typeArguments.first.primitive]}>()"), false);
  }

  if(primitive == FieldPrimitive.map) {
    return tuple(anonymous ? Code("const {}") : Code("const Map<${mapper[typeArguments.first.primitive]}, ${mapper[typeArguments.last.primitive]}>()"), false);
  }

  if(primitive == FieldPrimitive.custom) {
    var typeReference = TypeReferenceRegistry.getReference(typeId);
    var type = typeReference.type;

    switch(type.modifier) {
      case SchemaTypeModifier.$enum:
        return tuple(Code("${type.name}.${type.fields.first.name}"), false);

      case SchemaTypeModifier.struct:
        return tuple(Code("${type.name}()"), false);

      case SchemaTypeModifier.union:
        return tuple(Code("${type.name}.empty()"), true);
    }
  }

  var defaultValue = defaults[primitive];
  if(defaultValue == null) {
    throw Exception("Default value for $primitive not found.");
  }

  return tuple(defaultValue, false);
}