Carapacik / swagger_parser

Dart package that takes an OpenApi definition file and generates REST clients based on retrofit and data classes for your project.
https://pub.dev/packages/swagger_parser
MIT License
90 stars 38 forks source link

Query Params with omitted "required" attribute should be treated as "required": false #103

Closed MartenNesterudOSD closed 10 months ago

MartenNesterudOSD commented 10 months ago

According to the OpenApi spec (2.0, 3.0 and 3.1) the required attribute default value is false. "[...]the property MAY be included and its default value is false."

That is not the case for generated query parameters now.

For instance, this:

{
  "/api/v1/{id}": {
    "get": {
      "tags": [
        "..."
      ],
      "summary": "....",
      "operationId": "...",
      "parameters": [
        {
          "name": "idd",
          "in": "path",
          "description": "...",
          "required": true,
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "pageOffset",
          "in": "query",
          "description": "",
          "schema": {
            "type": "integer",
            "format": "int32"
          }
        },
        {
          "name": "pageSize",
          "in": "query",
          "description": "",
          "schema": {
            "type": "integer",
            "format": "int32"
          }
        }
      ]
    }
  }
}

Will produce this:

  @GET('/api/v1/{id}')
  Future<List<ResponseType>> get({
    @Path('id') required String id,
    @Query('pageOffset') required int pageOffset,
    @Query('pageSize') required int pageSize,
  });

But should produce this:

  @GET('/api/v1/{id}')
  Future<List<ResponseType>> get({
    @Path('id') required String id,
    @Query('pageOffset') int? pageOffset,
    @Query('pageSize') int? pageSize,
  });

I think the problem is this line in each of the parametersV* methods in parser.dart: isRequired: isRequired ?? true,

should be

isRequired: isRequired ?? false,