in src/JetBrains.Space.Generator/CodeGeneration/CSharp/Extensions/ApiFieldTypeExtensions.cs [37:173]
public static string ToCSharpType(this ApiFieldType apiFieldType, CodeGenerationContext context)
{
switch (apiFieldType)
{
case ApiFieldType.Array apiFieldTypeArray:
{
var sb = new CSharpBuilder();
sb.Append("List<");
sb.Append(ToCSharpType(apiFieldTypeArray.ElementType, context));
sb.Append(">");
return sb.ToString();
}
case ApiFieldType.Dto apiFieldTypeDto:
if (apiFieldTypeDto.DtoRef?.Id != null && context.TryGetDto(apiFieldTypeDto.DtoRef.Id, out var apiDto))
{
return apiDto!.ToCSharpClassName();
}
else
{
return "object";
}
case ApiFieldType.Enum apiFieldTypeEnum:
if (apiFieldTypeEnum.EnumRef?.Id != null && context.TryGetEnum(apiFieldTypeEnum.EnumRef.Id, out var apiEnum))
{
return apiEnum!.ToCSharpClassName();
}
else
{
return "string";
}
case ApiFieldType.UrlParam apiFieldTypeUrlParam:
if (apiFieldTypeUrlParam.UrlParamRef?.Id != null && context.TryGetUrlParameter(apiFieldTypeUrlParam.UrlParamRef.Id, out var apiUrlParam))
{
return apiUrlParam!.ToCSharpClassName();
}
else
{
throw new ResourceException("Could not generate type name for URL parameter with ref id: " + apiFieldTypeUrlParam.UrlParamRef?.Id);
}
case ApiFieldType.Map apiFieldTypeMap:
{
var sb = new CSharpBuilder();
sb.Append("Dictionary<string, ");
sb.Append(ToCSharpType(apiFieldTypeMap.ValueType, context));
sb.Append(">");
return sb.ToString();
}
case ApiFieldType.Object apiFieldTypeObject:
if (apiFieldTypeObject.Kind == ApiFieldType.Object.ObjectKind.PAIR)
{
// Known anonymous type
var sb = new CSharpBuilder();
sb.Append("Pair<");
sb.Append(ToCSharpType(apiFieldTypeObject.Fields[0].Type, context));
sb.Append(", ");
sb.Append(ToCSharpType(apiFieldTypeObject.Fields[1].Type, context));
sb.Append(">");
return sb.ToString();
}
else if (apiFieldTypeObject.Kind == ApiFieldType.Object.ObjectKind.TRIPLE)
{
// Known anonymous type
var sb = new CSharpBuilder();
sb.Append("Triple<");
sb.Append(ToCSharpType(apiFieldTypeObject.Fields[0].Type, context));
sb.Append(", ");
sb.Append(ToCSharpType(apiFieldTypeObject.Fields[1].Type, context));
sb.Append(", ");
sb.Append(ToCSharpType(apiFieldTypeObject.Fields[2].Type, context));
sb.Append(">");
return sb.ToString();
}
else if (apiFieldTypeObject.Kind == ApiFieldType.Object.ObjectKind.BATCH)
{
// Known anonymous type
var sb = new CSharpBuilder();
sb.Append("Batch<");
sb.Append(ToCSharpType(apiFieldTypeObject.GetBatchDataType()!.ElementType, context));
sb.Append(">");
return sb.ToString();
}
else if (apiFieldTypeObject.Kind == ApiFieldType.Object.ObjectKind.SYNC_BATCH)
{
// Known anonymous type
var sb = new CSharpBuilder();
sb.Append("SyncBatch<");
sb.Append(ToCSharpType(apiFieldTypeObject.GetBatchDataType()!.ElementType, context));
sb.Append(">");
return sb.ToString();
}
else if (apiFieldTypeObject.Kind == ApiFieldType.Object.ObjectKind.MOD)
{
// Known anonymous type
var sb = new CSharpBuilder();
sb.Append("Modification<");
sb.Append(ToCSharpType(apiFieldTypeObject.Fields[0].Type, context));
if (apiFieldTypeObject.Nullable)
{
sb.Append("?");
}
sb.Append(">");
return sb.ToString();
}
else if (apiFieldTypeObject.Kind == ApiFieldType.Object.ObjectKind.REQUEST_BODY)
{
// Request body/anonymous type?
throw new ResourceException($"The method {nameof(ToCSharpType)}() should not be called with object kind: " + apiFieldTypeObject.Kind
+ $". Ensure {nameof(CodeGenerationContextEnricher)} has run, and then invoke apiEndpoint.{nameof(ApiEndpointExtensions.ToCSharpRequestBodyClassName)}() to retrieve the proper type name.");
}
else
{
// Unknown object kind
throw new ResourceException("Could not generate type for object kind: " + apiFieldTypeObject.ClassName);
}
case ApiFieldType.Primitive apiFieldTypePrimitive:
return apiFieldTypePrimitive.ToCSharpPrimitiveType().Value;
case ApiFieldType.Ref apiFieldTypeReference:
if (apiFieldTypeReference.DtoRef?.Id != null && context.TryGetDto(apiFieldTypeReference.DtoRef.Id, out var apiReferenceDto))
{
return apiReferenceDto!.ToCSharpClassName();
}
else
{
return "object";
}
default:
return "object";
}
}