BaseType constructor

BaseType(
  1. FieldDescriptorProto field,
  2. FeatureSet features,
  3. GenerationContext ctx
)

Implementation

factory BaseType(
  FieldDescriptorProto field,
  FeatureSet features,
  GenerationContext ctx,
) {
  String constSuffix;
  FieldDescriptorProto_Type type;

  switch (field.type) {
    case FieldDescriptorProto_Type.TYPE_BOOL:
      return const BaseType._raw(
        FieldDescriptorProto_Type.TYPE_BOOL,
        'B',
        '$coreImportPrefix.bool',
        r'$_setBool',
        null,
      );
    case FieldDescriptorProto_Type.TYPE_FLOAT:
      return const BaseType._raw(
        FieldDescriptorProto_Type.TYPE_FLOAT,
        'F',
        '$coreImportPrefix.double',
        r'$_setFloat',
        null,
      );
    case FieldDescriptorProto_Type.TYPE_DOUBLE:
      return const BaseType._raw(
        FieldDescriptorProto_Type.TYPE_DOUBLE,
        'D',
        '$coreImportPrefix.double',
        r'$_setDouble',
        null,
      );
    case FieldDescriptorProto_Type.TYPE_INT32:
      return const BaseType._raw(
        FieldDescriptorProto_Type.TYPE_INT32,
        '3',
        '$coreImportPrefix.int',
        r'$_setSignedInt32',
        null,
      );
    case FieldDescriptorProto_Type.TYPE_UINT32:
      return const BaseType._raw(
        FieldDescriptorProto_Type.TYPE_UINT32,
        'U3',
        '$coreImportPrefix.int',
        r'$_setUnsignedInt32',
        null,
      );
    case FieldDescriptorProto_Type.TYPE_SINT32:
      return const BaseType._raw(
        FieldDescriptorProto_Type.TYPE_SINT32,
        'S3',
        '$coreImportPrefix.int',
        r'$_setSignedInt32',
        null,
      );
    case FieldDescriptorProto_Type.TYPE_FIXED32:
      return const BaseType._raw(
        FieldDescriptorProto_Type.TYPE_FIXED32,
        'F3',
        '$coreImportPrefix.int',
        r'$_setUnsignedInt32',
        null,
      );
    case FieldDescriptorProto_Type.TYPE_SFIXED32:
      return const BaseType._raw(
        FieldDescriptorProto_Type.TYPE_SFIXED32,
        'SF3',
        '$coreImportPrefix.int',
        r'$_setSignedInt32',
        null,
      );
    case FieldDescriptorProto_Type.TYPE_INT64:
      return const BaseType._raw(
        FieldDescriptorProto_Type.TYPE_INT64,
        '6',
        '$fixnumImportPrefix.Int64',
        r'$_setInt64',
        null,
      );
    case FieldDescriptorProto_Type.TYPE_UINT64:
      return const BaseType._raw(
        FieldDescriptorProto_Type.TYPE_UINT64,
        'U6',
        '$fixnumImportPrefix.Int64',
        r'$_setInt64',
        null,
      );
    case FieldDescriptorProto_Type.TYPE_SINT64:
      return const BaseType._raw(
        FieldDescriptorProto_Type.TYPE_SINT64,
        'S6',
        '$fixnumImportPrefix.Int64',
        r'$_setInt64',
        null,
      );
    case FieldDescriptorProto_Type.TYPE_FIXED64:
      return const BaseType._raw(
        FieldDescriptorProto_Type.TYPE_FIXED64,
        'F6',
        '$fixnumImportPrefix.Int64',
        r'$_setInt64',
        null,
      );
    case FieldDescriptorProto_Type.TYPE_SFIXED64:
      return const BaseType._raw(
        FieldDescriptorProto_Type.TYPE_SFIXED64,
        'SF6',
        '$fixnumImportPrefix.Int64',
        r'$_setInt64',
        null,
      );
    case FieldDescriptorProto_Type.TYPE_STRING:
      return const BaseType._raw(
        FieldDescriptorProto_Type.TYPE_STRING,
        'S',
        '$coreImportPrefix.String',
        r'$_setString',
        null,
      );
    case FieldDescriptorProto_Type.TYPE_BYTES:
      return const BaseType._raw(
        FieldDescriptorProto_Type.TYPE_BYTES,
        'Y',
        '$coreImportPrefix.List<$coreImportPrefix.int>',
        r'$_setBytes',
        null,
      );

    case FieldDescriptorProto_Type.TYPE_GROUP:
    case FieldDescriptorProto_Type.TYPE_MESSAGE:
      if (features.messageEncoding == FeatureSet_MessageEncoding.DELIMITED) {
        constSuffix = 'G';
        type = FieldDescriptorProto_Type.TYPE_GROUP;
      } else {
        constSuffix = 'M';
        type = FieldDescriptorProto_Type.TYPE_MESSAGE;
      }
    case FieldDescriptorProto_Type.TYPE_ENUM:
      constSuffix = 'E';
      type = FieldDescriptorProto_Type.TYPE_ENUM;

    default:
      throw ArgumentError('unimplemented type: ${field.type.name}');
  }

  final generator = ctx.getFieldType(field.typeName);
  if (generator == null) {
    throw 'FAILURE: Unknown type reference ${field.typeName}';
  }

  return BaseType._raw(
    type,
    constSuffix,
    generator.classname!,
    null,
    generator,
  );
}