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);
            }
        }
Exemple #2
0
        public static ApiFieldType GetArrayElementTypeOrType(this ApiFieldType subject)
        {
            if (subject is ApiFieldType.Array arrayFieldType)
            {
                return(arrayFieldType.ElementType);
            }

            return(subject);
        }
Exemple #3
0
        public static ApiFieldType GetBatchElementTypeOrType(this ApiFieldType subject)
        {
            if (subject is ApiFieldType.Object objectFieldType)
            {
                return(GetBatchDataType(objectFieldType)?.ElementType ?? objectFieldType);
            }

            return(subject.GetArrayElementTypeOrType());
        }
Exemple #4
0
        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);