private string GenerateParameterTypeConversion(ApiFieldType apiFieldType) { switch (apiFieldType) { case ApiFieldType.Primitive primitiveType: { var csharpType = primitiveType.ToCSharpPrimitiveType(); if (csharpType == CSharpType.String) { return(string.Empty); } var formatString = ""; if (csharpType.FormatString != null) { formatString = $"\"{csharpType.FormatString}\""; } return(!apiFieldType.Nullable ? $".ToString({formatString})" : $"?.ToString({formatString})"); } case ApiFieldType.UrlParam _: return(!apiFieldType.Nullable ? ".ToString()" : "?.ToString()"); case ApiFieldType.Enum _: return(".ToEnumString()"); default: throw new ResourceException("Could not generate query string parameter type conversion for field type: " + apiFieldType.ClassName); } }
public static ApiFieldType GetArrayElementTypeOrType(this ApiFieldType subject) { if (subject is ApiFieldType.Array arrayFieldType) { return(arrayFieldType.ElementType); } return(subject); }
public static ApiFieldType GetBatchElementTypeOrType(this ApiFieldType subject) { if (subject is ApiFieldType.Object objectFieldType) { return(GetBatchDataType(objectFieldType)?.ElementType ?? objectFieldType); } return(subject.GetArrayElementTypeOrType()); }
public static ApiFieldType GetMapValueTypeOrType(this ApiFieldType subject) { if (subject is ApiFieldType.Map mapFieldType) { return(mapFieldType.ValueType); } return(subject); }
private string GenerateCSharpTypeFrom(ApiFieldType apiFieldType) { switch (apiFieldType) { case ApiFieldType.Array apiFieldTypeArray: return(GenerateCSharpTypeFrom(apiFieldTypeArray.ElementType)); case ApiFieldType.Dto apiFieldTypeDto: if (apiFieldTypeDto.DtoRef?.Id != null && _context.TryGetDto(apiFieldTypeDto.DtoRef.Id, out var apiDto)) { return(apiDto !.ToCSharpClassName()); } break; case ApiFieldType.Enum apiFieldTypeEnum: if (apiFieldTypeEnum.EnumRef?.Id != null && _context.TryGetEnum(apiFieldTypeEnum.EnumRef.Id, out var apiEnum)) { return(apiEnum !.ToCSharpClassName()); } break; case ApiFieldType.Map apiFieldTypeMap: return(GenerateCSharpTypeFrom(apiFieldTypeMap.ValueType)); 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.Object apiFieldTypeObject: if (apiFieldTypeObject.Kind == ApiFieldType.Object.ObjectKind.PAIR) { // Known anonymous type var sb = new StringBuilder(); sb.Append("Pair<"); sb.Append(GenerateCSharpTypeFrom(apiFieldTypeObject.Fields[0].Type)); sb.Append(", "); sb.Append(GenerateCSharpTypeFrom(apiFieldTypeObject.Fields[1].Type)); sb.Append(">"); return(sb.ToString()); } else if (apiFieldTypeObject.Kind == ApiFieldType.Object.ObjectKind.TRIPLE) { // Known anonymous type var sb = new StringBuilder(); sb.Append("Triple<"); sb.Append(GenerateCSharpTypeFrom(apiFieldTypeObject.Fields[0].Type)); sb.Append(", "); sb.Append(GenerateCSharpTypeFrom(apiFieldTypeObject.Fields[1].Type)); sb.Append(", "); sb.Append(GenerateCSharpTypeFrom(apiFieldTypeObject.Fields[2].Type)); sb.Append(">"); return(sb.ToString()); } else if (apiFieldTypeObject.Kind == ApiFieldType.Object.ObjectKind.BATCH) { // Known anonymous type var sb = new StringBuilder(); sb.Append("Batch<"); sb.Append(GenerateCSharpTypeFrom(apiFieldTypeObject.GetBatchDataType() !)); sb.Append(">"); return(sb.ToString()); } else if (apiFieldTypeObject.Kind == ApiFieldType.Object.ObjectKind.MOD) { // Known anonymous type var sb = new StringBuilder(); sb.Append("Modification<"); sb.Append(GenerateCSharpTypeFrom(apiFieldTypeObject.Fields[0].Type)); sb.Append(">"); return(sb.ToString()); } else if (apiFieldTypeObject.Kind == ApiFieldType.Object.ObjectKind.REQUEST_BODY) { // Request body/anonymous type? throw new ResourceException($"The method {nameof(GenerateCSharpTypeFrom)}() 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 name for object kind: " + apiFieldTypeObject.Kind); } 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()); } break; } throw new ResourceException("Could not generate type name for field type: " + apiFieldType.ClassName); }
public static bool IsCSharpReferenceType(this ApiFieldType apiFieldType) => !(apiFieldType is ApiFieldType.Primitive || apiFieldType is ApiFieldType.Enum);