Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@ using Polly;
{{#hasOAuthMethods}}
using {{packageName}}.Client.Auth;
{{/hasOAuthMethods}}
using {{packageName}}.{{modelPackage}};

namespace {{packageName}}.Client
{
Expand Down Expand Up @@ -70,10 +69,10 @@ namespace {{packageName}}.Client
/// <returns>A JSON string.</returns>
public string Serialize(object obj)
{
if (obj != null && obj is AbstractOpenAPISchema)
if (obj != null && obj is {{{packageName}}}.{{modelPackage}}.AbstractOpenAPISchema)
{
// the object to be serialized is an oneOf/anyOf schema
return ((AbstractOpenAPISchema)obj).ToJson();
return (({{{packageName}}}.{{modelPackage}}.AbstractOpenAPISchema)obj).ToJson();
}
else
{
Expand Down Expand Up @@ -504,7 +503,7 @@ namespace {{packageName}}.Client
{{/throwOnAnyError}}

// if the response type is oneOf/anyOf, call FromJSON to deserialize the data
if (typeof(AbstractOpenAPISchema).IsAssignableFrom(typeof(T)))
if (typeof({{{packageName}}}.{{modelPackage}}.AbstractOpenAPISchema).IsAssignableFrom(typeof(T)))
{
try
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@ using Polly;
{{#hasOAuthMethods}}
using {{packageName}}.Client.Auth;
{{/hasOAuthMethods}}
using {{packageName}}.{{modelPackage}};

namespace {{packageName}}.Client
{
Expand Down Expand Up @@ -70,10 +69,10 @@ namespace {{packageName}}.Client
/// <returns>A JSON string.</returns>
public string Serialize(object obj)
{
if (obj != null && obj is AbstractOpenAPISchema)
if (obj != null && obj is {{{packageName}}}.{{modelPackage}}.AbstractOpenAPISchema)
{
// the object to be serialized is an oneOf/anyOf schema
return ((AbstractOpenAPISchema)obj).ToJson();
return (({{{packageName}}}.{{modelPackage}}.AbstractOpenAPISchema)obj).ToJson();
}
else
{
Expand Down Expand Up @@ -496,7 +495,7 @@ namespace {{packageName}}.Client
{{/throwOnAnyError}}

// if the response type is oneOf/anyOf, call FromJSON to deserialize the data
if (typeof(AbstractOpenAPISchema).IsAssignableFrom(typeof(T)))
if (typeof({{{packageName}}}.{{modelPackage}}.AbstractOpenAPISchema).IsAssignableFrom(typeof(T)))
{
try
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
/// </summary>
/// <param name="validationContext">Validation context</param>
/// <returns>Validation Result</returns>
IEnumerable<ValidationResult> IValidatableObject.Validate(ValidationContext validationContext)
IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> IValidatableObject.Validate(ValidationContext validationContext)
{
return this.BaseValidate(validationContext);
}
Expand All @@ -14,7 +14,7 @@
/// </summary>
/// <param name="validationContext">Validation context</param>
/// <returns>Validation Result</returns>
protected IEnumerable<ValidationResult> BaseValidate(ValidationContext validationContext)
protected IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> BaseValidate(ValidationContext validationContext)
{
{{/discriminator}}
{{^discriminator}}
Expand All @@ -24,7 +24,7 @@
/// </summary>
/// <param name="validationContext">Validation context</param>
/// <returns>Validation Result</returns>
IEnumerable<ValidationResult> IValidatableObject.Validate(ValidationContext validationContext)
IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> IValidatableObject.Validate(ValidationContext validationContext)
{
return this.BaseValidate(validationContext);
}
Expand All @@ -34,7 +34,7 @@
/// </summary>
/// <param name="validationContext">Validation context</param>
/// <returns>Validation Result</returns>
protected IEnumerable<ValidationResult> BaseValidate(ValidationContext validationContext)
protected IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> BaseValidate(ValidationContext validationContext)
{
{{/parent}}
{{^parent}}
Expand All @@ -43,7 +43,7 @@
/// </summary>
/// <param name="validationContext">Validation context</param>
/// <returns>Validation Result</returns>
IEnumerable<ValidationResult> IValidatableObject.Validate(ValidationContext validationContext)
IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> IValidatableObject.Validate(ValidationContext validationContext)
{
{{/parent}}
{{/discriminator}}
Expand All @@ -62,7 +62,7 @@
// {{{name}}} ({{{dataType}}}) not enum
if ({{{vendorExtensions.x-csharp-not-enum-comparison}}})
{
yield return new ValidationResult("Invalid value for {{{name}}}, must not be a value excluded by the 'not' schema.", new [] { "{{{name}}}" });
yield return new System.ComponentModel.DataAnnotations.ValidationResult("Invalid value for {{{name}}}, must not be a value excluded by the 'not' schema.", new [] { "{{{name}}}" });
}

{{/vendorExtensions.x-csharp-not-enum-comparison}}
Expand All @@ -75,15 +75,15 @@
// {{{name}}} ({{{dataType}}}) maxLength
if (this.{{{name}}} != null && this.{{{name}}}.Length > {{maxLength}})
{
yield return new ValidationResult("Invalid value for {{{name}}}, length must be less than {{maxLength}}.", new [] { "{{{name}}}" });
yield return new System.ComponentModel.DataAnnotations.ValidationResult("Invalid value for {{{name}}}, length must be less than {{maxLength}}.", new [] { "{{{name}}}" });
}

{{/maxLength}}
{{#minLength}}
// {{{name}}} ({{{dataType}}}) minLength
if (this.{{{name}}} != null && this.{{{name}}}.Length < {{minLength}})
{
yield return new ValidationResult("Invalid value for {{{name}}}, length must be greater than {{minLength}}.", new [] { "{{{name}}}" });
yield return new System.ComponentModel.DataAnnotations.ValidationResult("Invalid value for {{{name}}}, length must be greater than {{minLength}}.", new [] { "{{{name}}}" });
}

{{/minLength}}
Expand All @@ -94,15 +94,15 @@
// {{{name}}} ({{{dataType}}}) maximum
if ({{#useGenericHost}}{{^required}}this.{{{name}}}Option.IsSet && {{/required}}{{/useGenericHost}}this.{{{name}}}{{#useGenericHost}}{{^required}}Option.Value{{/required}}{{/useGenericHost}} {{#exclusiveMaximum}}<={{/exclusiveMaximum}}{{^exclusiveMaximum}}>{{/exclusiveMaximum}} ({{{dataType}}}){{maximum}})
{
yield return new ValidationResult("Invalid value for {{{name}}}, must be a value less than {{^exclusiveMaximum}}or equal to {{/exclusiveMaximum}}{{maximum}}.", new [] { "{{{name}}}" });
yield return new System.ComponentModel.DataAnnotations.ValidationResult("Invalid value for {{{name}}}, must be a value less than {{^exclusiveMaximum}}or equal to {{/exclusiveMaximum}}{{maximum}}.", new [] { "{{{name}}}" });
}

{{/maximum}}
{{#minimum}}
// {{{name}}} ({{{dataType}}}) minimum
if ({{#useGenericHost}}{{^required}}this.{{{name}}}Option.IsSet && {{/required}}{{/useGenericHost}}this.{{{name}}}{{#useGenericHost}}{{^required}}Option.Value{{/required}}{{/useGenericHost}} {{#exclusiveMaximum}}>={{/exclusiveMaximum}}{{^exclusiveMaximum}}<{{/exclusiveMaximum}} ({{{dataType}}}){{minimum}})
{
yield return new ValidationResult("Invalid value for {{{name}}}, must be a value greater than {{^exclusiveMinimum}}or equal to {{/exclusiveMinimum}}{{minimum}}.", new [] { "{{{name}}}" });
yield return new System.ComponentModel.DataAnnotations.ValidationResult("Invalid value for {{{name}}}, must be a value greater than {{^exclusiveMinimum}}or equal to {{/exclusiveMinimum}}{{minimum}}.", new [] { "{{{name}}}" });
}

{{/minimum}}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -304,7 +304,7 @@ public void testNotEnumConstraintIsEnforced() throws IOException {
"throw new ArgumentException(\"Invalid value for Kind, must not be a value excluded by the 'not' schema.\");");
// Also enforced in Validate() for explicit validation.
assertFileContains(other,
"yield return new ValidationResult(\"Invalid value for Kind, must not be a value excluded by the 'not' schema.\", new [] { \"Kind\" });");
"yield return new System.ComponentModel.DataAnnotations.ValidationResult(\"Invalid value for Kind, must not be a value excluded by the 'not' schema.\", new [] { \"Kind\" });");
// The Known member (plain enum) must NOT get the not-enum handling.
assertFileNotContains(Paths.get(output.getAbsolutePath(), "src", "Org.OpenAPITools", "Model", "Known.cs"),
"must not be a value excluded by the 'not' schema");
Expand Down Expand Up @@ -876,6 +876,45 @@ public void testValueTypeConstructorUnchangedWithoutConditionalSerialization() t
assertFileNotContains(updateCommand.toPath(), "_flagAutoRenew");
}

@Test(description = "restsharp ApiClient does not import the model namespace, so schemas named Parameter, ParameterType or Task do not collide with RestSharp/System types")
public void testRestSharpApiClientDoesNotImportModelNamespace() throws IOException {
Map<String, File> files = generateModelNameCollisions();

File apiClient = files.get("ApiClient.cs");
assertNotNull(apiClient);
assertFileNotContains(apiClient.toPath(), "using Org.OpenAPITools.Model;");
assertFileContains(apiClient.toPath(), "obj is Org.OpenAPITools.Model.AbstractOpenAPISchema");
}

@Test(description = "a schema named ValidationResult does not hide the DataAnnotations type in generated models")
public void testValidatableModelsQualifyValidationResult() throws IOException {
Map<String, File> files = generateModelNameCollisions();

File model = files.get("ValidationResult.cs");
assertNotNull(model);
assertFileContains(model.toPath(),
"IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> IValidatableObject.Validate(ValidationContext validationContext)",
"yield return new System.ComponentModel.DataAnnotations.ValidationResult(");
assertFileNotContains(model.toPath(), "IEnumerable<ValidationResult>", "new ValidationResult(");
}

private Map<String, File> generateModelNameCollisions() throws IOException {
File output = Files.createTempDirectory("test").toFile().getCanonicalFile();
output.deleteOnExit();
final OpenAPI openAPI = TestUtils.parseFlattenSpec("src/test/resources/3_0/csharp/model-name-collisions.yaml");
final DefaultGenerator defaultGenerator = new DefaultGenerator();
final ClientOptInput clientOptInput = new ClientOptInput();
clientOptInput.openAPI(openAPI);
CSharpClientCodegen cSharpClientCodegen = new CSharpClientCodegen();
cSharpClientCodegen.setLibrary("restsharp");
cSharpClientCodegen.setOutputDir(output.getAbsolutePath());
clientOptInput.config(cSharpClientCodegen);
defaultGenerator.opts(clientOptInput);

return defaultGenerator.generate().stream()
.collect(Collectors.toMap(File::getName, Function.identity(), (first, second) -> first));
}

private Map<String, File> generateConditionalSerializationValueTypeModels(boolean conditionalSerialization) throws IOException {
File output = Files.createTempDirectory("test").toFile().getCanonicalFile();
output.deleteOnExit();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
openapi: 3.0.3
info:
title: Schemas named like framework types
version: 1.0.0
paths:
/tasks:
get:
operationId: getTask
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/Task'
components:
schemas:
Task:
type: object
properties:
parameter:
$ref: '#/components/schemas/Parameter'
validation:
$ref: '#/components/schemas/ValidationResult'
Parameter:
type: object
properties:
type:
$ref: '#/components/schemas/ParameterType'
ParameterType:
type: string
enum: [text, number]
ValidationResult:
type: object
properties:
message:
type: string
maxLength: 100
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@
using RestSharpMethod = RestSharp.Method;
using FileIO = System.IO.File;
using Polly;
using Org.OpenAPITools.Model;

namespace Org.OpenAPITools.Client
{
Expand Down Expand Up @@ -71,10 +70,10 @@ public CustomJsonCodec(JsonSerializerSettings serializerSettings, IReadableConfi
/// <returns>A JSON string.</returns>
public string Serialize(object obj)
{
if (obj != null && obj is AbstractOpenAPISchema)
if (obj != null && obj is Org.OpenAPITools.Model.AbstractOpenAPISchema)
{
// the object to be serialized is an oneOf/anyOf schema
return ((AbstractOpenAPISchema)obj).ToJson();
return ((Org.OpenAPITools.Model.AbstractOpenAPISchema)obj).ToJson();
}
else
{
Expand Down Expand Up @@ -479,7 +478,7 @@ private async Task<ApiResponse<T>> ExecClientAsync<T>(Func<RestClient, Task<Rest
RestResponse<T> response = await getResponse(client).ConfigureAwait(false);

// if the response type is oneOf/anyOf, call FromJSON to deserialize the data
if (typeof(AbstractOpenAPISchema).IsAssignableFrom(typeof(T)))
if (typeof(Org.OpenAPITools.Model.AbstractOpenAPISchema).IsAssignableFrom(typeof(T)))
{
try
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@ public override int GetHashCode()
/// </summary>
/// <param name="validationContext">Validation context</param>
/// <returns>Validation Result</returns>
IEnumerable<ValidationResult> IValidatableObject.Validate(ValidationContext validationContext)
IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> IValidatableObject.Validate(ValidationContext validationContext)
{
yield break;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,7 @@ public override int GetHashCode()
/// </summary>
/// <param name="validationContext">Validation context</param>
/// <returns>Validation Result</returns>
IEnumerable<ValidationResult> IValidatableObject.Validate(ValidationContext validationContext)
IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> IValidatableObject.Validate(ValidationContext validationContext)
{
yield break;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,7 @@
) && base.Equals(input) &&
(
this.Date == input.Date ||
(this.Date != null &&

Check warning on line 133 in samples/client/echo_api/csharp/restsharp/net8/EchoApi/src/Org.OpenAPITools/Model/DataQuery.cs

View workflow job for this annotation

GitHub Actions / Build .Net clients (samples/client/echo_api/csharp/restsharp/net8/EchoApi)

The result of the expression is always 'true' since a value of type 'DateTime' is never equal to 'null' of type 'DateTime?'

Check warning on line 133 in samples/client/echo_api/csharp/restsharp/net8/EchoApi/src/Org.OpenAPITools/Model/DataQuery.cs

View workflow job for this annotation

GitHub Actions / Build .Net clients (samples/client/echo_api/csharp/restsharp/net8/EchoApi)

The result of the expression is always 'true' since a value of type 'DateTime' is never equal to 'null' of type 'DateTime?'
this.Date.Equals(input.Date))
);
}
Expand All @@ -152,7 +152,7 @@
{
hashCode = (hashCode * 59) + this.Text.GetHashCode();
}
if (this.Date != null)

Check warning on line 155 in samples/client/echo_api/csharp/restsharp/net8/EchoApi/src/Org.OpenAPITools/Model/DataQuery.cs

View workflow job for this annotation

GitHub Actions / Build .Net clients (samples/client/echo_api/csharp/restsharp/net8/EchoApi)

The result of the expression is always 'true' since a value of type 'DateTime' is never equal to 'null' of type 'DateTime?'

Check warning on line 155 in samples/client/echo_api/csharp/restsharp/net8/EchoApi/src/Org.OpenAPITools/Model/DataQuery.cs

View workflow job for this annotation

GitHub Actions / Build .Net clients (samples/client/echo_api/csharp/restsharp/net8/EchoApi)

The result of the expression is always 'true' since a value of type 'DateTime' is never equal to 'null' of type 'DateTime?'
{
hashCode = (hashCode * 59) + this.Date.GetHashCode();
}
Expand All @@ -165,7 +165,7 @@
/// </summary>
/// <param name="validationContext">Validation context</param>
/// <returns>Validation Result</returns>
IEnumerable<ValidationResult> IValidatableObject.Validate(ValidationContext validationContext)
IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> IValidatableObject.Validate(ValidationContext validationContext)
{
return this.BaseValidate(validationContext);
}
Expand All @@ -175,7 +175,7 @@
/// </summary>
/// <param name="validationContext">Validation context</param>
/// <returns>Validation Result</returns>
protected IEnumerable<ValidationResult> BaseValidate(ValidationContext validationContext)
protected IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> BaseValidate(ValidationContext validationContext)
{
foreach (var x in BaseValidate(validationContext))
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -278,7 +278,7 @@ public override int GetHashCode()
/// </summary>
/// <param name="validationContext">Validation context</param>
/// <returns>Validation Result</returns>
IEnumerable<ValidationResult> IValidatableObject.Validate(ValidationContext validationContext)
IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> IValidatableObject.Validate(ValidationContext validationContext)
{
yield break;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -144,18 +144,18 @@ public override int GetHashCode()
/// </summary>
/// <param name="validationContext">Validation context</param>
/// <returns>Validation Result</returns>
IEnumerable<ValidationResult> IValidatableObject.Validate(ValidationContext validationContext)
IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> IValidatableObject.Validate(ValidationContext validationContext)
{
// Double (double) maximum
if (this.Double > (double)50.2)
{
yield return new ValidationResult("Invalid value for Double, must be a value less than or equal to 50.2.", new [] { "Double" });
yield return new System.ComponentModel.DataAnnotations.ValidationResult("Invalid value for Double, must be a value less than or equal to 50.2.", new [] { "Double" });
}

// Double (double) minimum
if (this.Double < (double)0.8)
{
yield return new ValidationResult("Invalid value for Double, must be a value greater than or equal to 0.8.", new [] { "Double" });
yield return new System.ComponentModel.DataAnnotations.ValidationResult("Invalid value for Double, must be a value greater than or equal to 0.8.", new [] { "Double" });
}

yield break;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -252,7 +252,7 @@ public override int GetHashCode()
/// </summary>
/// <param name="validationContext">Validation context</param>
/// <returns>Validation Result</returns>
IEnumerable<ValidationResult> IValidatableObject.Validate(ValidationContext validationContext)
IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> IValidatableObject.Validate(ValidationContext validationContext)
{
yield break;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,7 @@ public override int GetHashCode()
/// </summary>
/// <param name="validationContext">Validation context</param>
/// <returns>Validation Result</returns>
IEnumerable<ValidationResult> IValidatableObject.Validate(ValidationContext validationContext)
IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> IValidatableObject.Validate(ValidationContext validationContext)
{
yield break;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ public override int GetHashCode()
/// </summary>
/// <param name="validationContext">Validation context</param>
/// <returns>Validation Result</returns>
IEnumerable<ValidationResult> IValidatableObject.Validate(ValidationContext validationContext)
IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> IValidatableObject.Validate(ValidationContext validationContext)
{
yield break;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@ public override int GetHashCode()
/// </summary>
/// <param name="validationContext">Validation context</param>
/// <returns>Validation Result</returns>
IEnumerable<ValidationResult> IValidatableObject.Validate(ValidationContext validationContext)
IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> IValidatableObject.Validate(ValidationContext validationContext)
{
yield break;
}
Expand Down
Loading
Loading