in src/JetBrains.Space.Generator/CodeGeneration/CSharp/QueryStringParameterConversionGenerator.cs [40:89]
public QueryStringParameterConversionGenerator WithQueryStringParametersForEndpoint(ApiEndpoint apiEndpoint)
{
var requestParametersBuilder = new QueryStringParameterConversionGenerator(TargetNameValueCollectionName, _context);
var orderedEndpointParameters = apiEndpoint.Parameters.Where(it => !it.Path).ToList();
foreach (var apiEndpointParameter in orderedEndpointParameters)
{
var parameterName = apiEndpointParameter.Field.Name;
var csharpVariableName = apiEndpointParameter.Field.ToCSharpVariableName();
var parameterValueBuilder = new StringBuilder();
var parameterConditionBuilder = new StringBuilder();
// Build condition (is it nullable?)
if (apiEndpointParameter.Field.Type.Nullable && apiEndpointParameter.Field.Type is not ApiFieldType.Enum) // enums can be param="null", don't generate a null check
{
parameterConditionBuilder.Append($"{csharpVariableName} != null");
}
if (apiEndpointParameter.Field.RequiresAddedNullability())
{
parameterConditionBuilder.Append($"{csharpVariableName} != null");
}
// Build value generator
if (apiEndpointParameter.Field.Type.IsCSharpReferenceType())
{
parameterValueBuilder.Append(apiEndpointParameter.Field.ToCSharpVariableInstanceOrDefaultValue(_context));
}
else
{
parameterValueBuilder.Append(apiEndpointParameter.Field.ToCSharpVariableName());
}
if (apiEndpointParameter.Field.Type is ApiFieldType.Array arrayType)
{
// For arrays, append all element values
parameterValueBuilder.Append(".Select(it => it" + GenerateParameterTypeConversion(arrayType.ElementType) + ")");
}
else
{
// For other types, append the value
parameterValueBuilder.Append(GenerateParameterTypeConversion(apiEndpointParameter.Field.Type));
}
requestParametersBuilder = requestParametersBuilder
.WithQueryStringParameter(parameterName, parameterValueBuilder.ToString(), parameterConditionBuilder.ToString());
}
return requestParametersBuilder;
}