From bf00eb6d6cfe192b1a307069c25a51f623701047 Mon Sep 17 00:00:00 2001 From: Elena Ferro <76906918+elenaferr0@users.noreply.github.com> Date: Thu, 26 Oct 2023 17:01:59 +0200 Subject: [PATCH] Handling content types (#109) Co-authored-by: Carapacik Co-authored-by: Elena Ferro --- swagger_parser/CHANGELOG.md | 1 + swagger_parser/README.md | 5 +- swagger_parser/example/swagger_parser.yaml | 6 +-- .../lib/src/config/yaml_config.dart | 10 ++++ .../lib/src/generator/fill_controller.dart | 6 ++- .../lib/src/generator/generator.dart | 13 +++-- .../models/programming_language.dart | 2 + .../generator/models/universal_request.dart | 13 +++-- .../dart_retrofit_client_template.dart | 25 +++++++-- swagger_parser/lib/src/parser/parser.dart | 51 +++++++++--------- swagger_parser/pubspec.yaml | 2 +- .../test/generator/rest_clients_test.dart | 52 +++++++++---------- swagger_parser/test/parser/requests_test.dart | 4 +- .../parser/schemas/basic_types_class.3.0.json | 1 - .../parser/schemas/of_like_class.3.1.json | 14 ++--- .../schemas/reference_types_class.3.0.json | 2 +- 16 files changed, 128 insertions(+), 79 deletions(-) diff --git a/swagger_parser/CHANGELOG.md b/swagger_parser/CHANGELOG.md index c632ef6a..5571d31e 100644 --- a/swagger_parser/CHANGELOG.md +++ b/swagger_parser/CHANGELOG.md @@ -1,6 +1,7 @@ ## 1.11.0 - Added unknown value to all enums to maintain backwards compatibility when adding new values on the backend - Add new config parameter `unknown_enum_value` (dart only) ([#106](https://github.com/Carapacik/swagger_parser/issues/106)) +- Add new config parameter `default_content_type` - Support String values with spaces for enums ([#127](https://github.com/Carapacik/swagger_parser/issues/127)) ## 1.10.6 diff --git a/swagger_parser/README.md b/swagger_parser/README.md index 86ea3908..446f7072 100644 --- a/swagger_parser/README.md +++ b/swagger_parser/README.md @@ -77,7 +77,10 @@ swagger_parser: # Optional (dart only). Set root client name root_client_name: RestClient - # Optional. Set API name for folder and export file (coming soon). + # Optional. Set default content-type for all requests + default_content_type: "application/json" + + # Optional. Set API name for folder and export file # If not specified, the file name is used. name: null diff --git a/swagger_parser/example/swagger_parser.yaml b/swagger_parser/example/swagger_parser.yaml index f8aef017..32270f6c 100644 --- a/swagger_parser/example/swagger_parser.yaml +++ b/swagger_parser/example/swagger_parser.yaml @@ -28,6 +28,9 @@ swagger_parser: # Optional (dart only). Set root client name root_client_name: RestClient + # Optional. Set default content-type for all requests + default_content_type: "application/json" + # Optional. Set API name for folder and export file (coming soon). # If not specified, the file name is used. name: null @@ -58,9 +61,6 @@ swagger_parser: # Optional. Set 'true' to set enum prefix from parent component. enums_prefix: false - # Optional (dart only). Set 'true' to maintain backwards compatibility when adding new values on the backend. - unknown_enum_value: true - # Optional. Set 'false' to not put a comment at the beginning of the generated files. mark_files_as_generated: true diff --git a/swagger_parser/lib/src/config/yaml_config.dart b/swagger_parser/lib/src/config/yaml_config.dart index 7557e5bc..b03e52da 100644 --- a/swagger_parser/lib/src/config/yaml_config.dart +++ b/swagger_parser/lib/src/config/yaml_config.dart @@ -39,6 +39,7 @@ final class YamlConfig { this.unknownEnumValue, this.markFilesAsGenerated, this.originalHttpResponse, + this.defaultContentType, this.replacementRules = const [], }); @@ -218,6 +219,13 @@ final class YamlConfig { ); } + final defaultContentType = yamlConfig['default_content_type']; + if (defaultContentType is! String?) { + throw const ConfigException( + "Config parameter 'default_content_type' must be String.", + ); + } + final originalHttpResponse = yamlConfig['original_http_response']; if (originalHttpResponse is! bool?) { throw const ConfigException( @@ -277,6 +285,7 @@ final class YamlConfig { unknownEnumValue: unknownEnumValue ?? rootConfig?.unknownEnumValue, markFilesAsGenerated: markFilesAsGenerated ?? rootConfig?.markFilesAsGenerated, + defaultContentType: defaultContentType ?? rootConfig?.defaultContentType, replacementRules: replacementRules ?? rootConfig?.replacementRules ?? [], ); } @@ -372,6 +381,7 @@ final class YamlConfig { final bool? enumsPrefix; final bool? unknownEnumValue; final bool? markFilesAsGenerated; + final String? defaultContentType; final bool? originalHttpResponse; final List replacementRules; } diff --git a/swagger_parser/lib/src/generator/fill_controller.dart b/swagger_parser/lib/src/generator/fill_controller.dart index 6e0cea9d..dc2dbb7c 100644 --- a/swagger_parser/lib/src/generator/fill_controller.dart +++ b/swagger_parser/lib/src/generator/fill_controller.dart @@ -18,6 +18,7 @@ final class FillController { bool enumsToJson = false, bool unknownEnumValue = true, bool markFilesAsGenerated = false, + String defaultContentType = 'application/json', }) : _openApiInfo = openApiInfo, _clientPostfix = clientPostfix, _programmingLanguage = programmingLanguage, @@ -26,7 +27,8 @@ final class FillController { _freezed = freezed, _enumsToJson = enumsToJson, _unknownEnumValue = unknownEnumValue, - _markFilesAsGenerated = markFilesAsGenerated; + _markFilesAsGenerated = markFilesAsGenerated, + _defaultContentType = defaultContentType; final OpenApiInfo _openApiInfo; final ProgrammingLanguage _programmingLanguage; @@ -37,6 +39,7 @@ final class FillController { final bool _enumsToJson; final bool _unknownEnumValue; final bool _markFilesAsGenerated; + final String _defaultContentType; /// Return [GeneratedFile] generated from given [UniversalDataClass] GeneratedFile fillDtoContent(UniversalDataClass dataClass) => GeneratedFile( @@ -66,6 +69,7 @@ final class FillController { restClient, restClient.name.toPascal + _clientPostfix.toPascal, markFilesAsGenerated: _markFilesAsGenerated, + defaultContentType: _defaultContentType, ), ); } diff --git a/swagger_parser/lib/src/generator/generator.dart b/swagger_parser/lib/src/generator/generator.dart index e1e7a9cf..838eeeda 100644 --- a/swagger_parser/lib/src/generator/generator.dart +++ b/swagger_parser/lib/src/generator/generator.dart @@ -46,6 +46,7 @@ final class Generator { bool? enumsToJson, bool? enumsPrefix, bool? unknownEnumValue, + String? defaultContentType, bool? markFilesAsGenerated, List? replacementRules, }) : _schemaPath = schemaPath, @@ -68,8 +69,9 @@ final class Generator { _putInFolder = putInFolder ?? false, _enumsToJson = enumsToJson ?? false, _enumsPrefix = enumsPrefix ?? false, - unknownEnumValue = unknownEnumValue ?? true, + _unknownEnumValue = unknownEnumValue ?? true, _markFilesAsGenerated = markFilesAsGenerated ?? true, + _defaultContentType = defaultContentType ?? 'application/json', _replacementRules = replacementRules ?? const []; /// Applies parameters set from yaml config file @@ -160,11 +162,14 @@ final class Generator { final bool _enumsPrefix; /// If true, adds an unknown value for all enums to maintain backward compatibility when adding new values on the backend. - final bool unknownEnumValue; + final bool _unknownEnumValue; /// If true, generated files will be marked as generated final bool _markFilesAsGenerated; + /// Content type for all requests, default 'application/json' + final String _defaultContentType; + /// List of rules used to replace patterns in generated class names final List _replacementRules; @@ -270,6 +275,7 @@ final class Generator { squashClients: _squashClients, replacementRules: _replacementRules, originalHttpResponse: _originalHttpResponse, + defaultContentType: _defaultContentType, ); _openApiInfo = parser.parseOpenApiInfo(); _restClients = parser.parseRestClients(); @@ -299,8 +305,9 @@ final class Generator { freezed: _freezed, putClientsInFolder: _putClientsInFolder, enumsToJson: _enumsToJson, - unknownEnumValue: unknownEnumValue, + unknownEnumValue: _unknownEnumValue, markFilesAsGenerated: _markFilesAsGenerated, + defaultContentType: _defaultContentType, ); final files = []; for (final client in _restClients) { diff --git a/swagger_parser/lib/src/generator/models/programming_language.dart b/swagger_parser/lib/src/generator/models/programming_language.dart index 7b176e0b..c29b6740 100644 --- a/swagger_parser/lib/src/generator/models/programming_language.dart +++ b/swagger_parser/lib/src/generator/models/programming_language.dart @@ -96,12 +96,14 @@ enum ProgrammingLanguage { UniversalRestClient restClient, String name, { required bool markFilesAsGenerated, + required String defaultContentType, }) => switch (this) { dart => dartRetrofitClientTemplate( restClient: restClient, name: name, markFileAsGenerated: markFilesAsGenerated, + defaultContentType: defaultContentType, ), kotlin => kotlinRetrofitClientTemplate( restClient: restClient, diff --git a/swagger_parser/lib/src/generator/models/universal_request.dart b/swagger_parser/lib/src/generator/models/universal_request.dart index d61894aa..ee2e9290 100644 --- a/swagger_parser/lib/src/generator/models/universal_request.dart +++ b/swagger_parser/lib/src/generator/models/universal_request.dart @@ -12,9 +12,8 @@ final class UniversalRequest { required this.route, required this.returnType, required this.parameters, + this.contentType = 'application/json', this.description, - this.isMultiPart = false, - this.isFormUrlEncoded = false, this.isDeprecated = false, this.isOriginalHttpResponse = false, }); @@ -37,11 +36,15 @@ final class UniversalRequest { /// Request parameters final List parameters; - /// Request type 'multipart/form-data' - final bool isMultiPart; + /// Request content-type + final String contentType; + + /// Request has Content-Type 'multipart/form-data' + bool get isMultiPart => contentType == 'multipart/form-data'; /// Request type 'application/x-www-form-urlencoded' - final bool isFormUrlEncoded; + bool get isFormUrlEncoded => + contentType == 'application/x-www-form-urlencoded'; /// Value indicating whether this request is deprecated final bool isDeprecated; diff --git a/swagger_parser/lib/src/generator/templates/dart_retrofit_client_template.dart b/swagger_parser/lib/src/generator/templates/dart_retrofit_client_template.dart index 3991c12b..f03db741 100644 --- a/swagger_parser/lib/src/generator/templates/dart_retrofit_client_template.dart +++ b/swagger_parser/lib/src/generator/templates/dart_retrofit_client_template.dart @@ -14,10 +14,11 @@ String dartRetrofitClientTemplate({ required UniversalRestClient restClient, required String name, required bool markFileAsGenerated, + required String defaultContentType, }) { final sb = StringBuffer( ''' -${generatedFileComment(markFileAsGenerated: markFileAsGenerated)}${_fileImport(restClient)}import 'package:dio/dio.dart'; +${generatedFileComment(markFileAsGenerated: markFileAsGenerated)}${_fileImport(restClient)}import 'package:dio/dio.dart' hide Headers; import 'package:retrofit/retrofit.dart'; ${dartImports(imports: restClient.imports, pathPrefix: '../models/')} part '${name.toSnake}.g.dart'; @@ -28,20 +29,20 @@ abstract class $name { ''', ); for (final request in restClient.requests) { - sb.write(_toClientRequest(request)); + sb.write(_toClientRequest(request, defaultContentType)); } sb.write('}\n'); return sb.toString(); } -String _toClientRequest(UniversalRequest request) { +String _toClientRequest(UniversalRequest request, String defaultContentType) { final responseType = request.returnType == null ? 'void' : request.returnType!.toSuitableType(ProgrammingLanguage.dart); final sb = StringBuffer( ''' - ${descriptionComment(request.description, tabForFirstLine: false, tab: ' ', end: ' ')}${request.isDeprecated ? "@Deprecated('This method is marked as deprecated')\n " : ''}${request.isMultiPart ? '@MultiPart()\n ' : ''}${request.isFormUrlEncoded ? '@FormUrlEncoded()\n ' : ''}@${request.requestType.name.toUpperCase()}('${request.route}') + ${descriptionComment(request.description, tabForFirstLine: false, tab: ' ', end: ' ')}${request.isDeprecated ? "@Deprecated('This method is marked as deprecated')\n " : ''}${_contentTypeHeader(request, defaultContentType)}@${request.requestType.name.toUpperCase()}('${request.route}') Future<${request.isOriginalHttpResponse ? 'HttpResponse<$responseType>' : responseType}> ${request.name}(''', ); if (request.parameters.isNotEmpty) { @@ -76,6 +77,22 @@ String _toParameter(UniversalRequestType parameter) => '${parameter.type.toSuitableType(ProgrammingLanguage.dart)} ' '${parameter.type.name!.toCamel}${_defaultValue(parameter.type)},'; +String _contentTypeHeader( + UniversalRequest request, + String defaultContentType, +) { + if (request.isMultiPart) { + return '@MultiPart()\n '; + } + if (request.isFormUrlEncoded) { + return '@FormUrlEncoded()\n '; + } + if (request.contentType != defaultContentType) { + return "@Headers({'Content-Type': '${request.contentType}'})\n "; + } + return ''; +} + /// return required if isRequired String _required(UniversalType t) => t.isRequired && t.defaultValue == null ? 'required ' : ''; diff --git a/swagger_parser/lib/src/parser/parser.dart b/swagger_parser/lib/src/parser/parser.dart index 10c8ca6f..e6d8c7c4 100644 --- a/swagger_parser/lib/src/parser/parser.dart +++ b/swagger_parser/lib/src/parser/parser.dart @@ -30,12 +30,14 @@ class OpenApiParser { bool pathMethodName = false, bool squashClients = false, bool originalHttpResponse = false, + String defaultContentType = 'application/json', List replacementRules = const [], }) : _name = name, _pathMethodName = pathMethodName, _enumsPrefix = enumsPrefix, _squashClients = squashClients, _originalHttpResponse = originalHttpResponse, + _defaultContentType = defaultContentType, _replacementRules = replacementRules { _definitionFileContent = isYaml ? (loadYaml(fileContent) as YamlMap).toMap() @@ -65,6 +67,7 @@ class OpenApiParser { final String? _name; final bool _squashClients; final bool _originalHttpResponse; + final String _defaultContentType; final List _replacementRules; late final Map _definitionFileContent; late final OAS _version; @@ -132,8 +135,7 @@ class OpenApiParser { Iterable parseRestClients() { final restClients = []; final imports = SplayTreeSet(); - var isMultiPart = false; - var isFormUrlEncoded = false; + var resultContentType = _defaultContentType; /// Parses return type for client query for OpenApi v3 UniversalType? returnTypeV3( @@ -238,29 +240,32 @@ class OpenApiParser { if (!requestBody.containsKey(_contentConst)) { throw const ParserException('Request body must always have content.'); } + final contentTypes = requestBody[_contentConst] as Map; Map? contentType; if (contentTypes.containsKey(_multipartFormDataConst)) { contentType = contentTypes[_multipartFormDataConst] as Map; - isMultiPart = true; + resultContentType = _multipartFormDataConst; } else if (contentTypes.containsKey(_formUrlEncodedConst)) { contentType = contentTypes[_formUrlEncodedConst] as Map; - isFormUrlEncoded = true; + resultContentType = _formUrlEncodedConst; } else { - final content = (requestBody[_contentConst] as Map) - .entries - .firstOrNull; + final content = contentTypes.containsKey(_defaultContentType) + ? contentTypes[_defaultContentType] + : contentTypes.entries.firstOrNull?.value; contentType = - content == null ? null : content.value as Map; + content == null ? null : content as Map; } + if (contentType == null) { throw const ParserException( 'Response must always have a content type.', ); } - if (isMultiPart) { + + if (resultContentType == _multipartFormDataConst) { if ((contentType[_schemaConst] as Map) .containsKey(_refConst)) { final isRequired = requestBody[_requiredConst]?.toString().toBool(); @@ -288,11 +293,11 @@ class OpenApiParser { ), ); } - final schemaContentType = + final schemaContent = contentType[_schemaConst] as Map; - if (schemaContentType.containsKey(_propertiesConst)) { + if (schemaContent.containsKey(_propertiesConst)) { for (final e - in (schemaContentType[_propertiesConst] as Map) + in (schemaContent[_propertiesConst] as Map) .entries) { final typeWithImport = _findType( e.value as Map, @@ -380,15 +385,15 @@ class OpenApiParser { if (!map.containsKey(_parametersConst)) { return types; } + if (map.containsKey(_consumesConst) && - (map[_consumesConst] as List) - .contains(_multipartFormDataConst)) { - isMultiPart = true; - } - if (map.containsKey(_consumesConst) && - (map[_consumesConst] as List) - .contains(_formUrlEncodedConst)) { - isFormUrlEncoded = true; + map[_consumesConst] is List) { + final consumes = map[_consumesConst] as List; + if (consumes.contains(_multipartFormDataConst)) { + resultContentType = _multipartFormDataConst; + } else if (consumes.contains(_formUrlEncodedConst)) { + resultContentType = _formUrlEncodedConst; + } } for (final parameter in map[_parametersConst] as List) { final isRequired = (parameter as Map)[_requiredConst] @@ -473,8 +478,7 @@ class OpenApiParser { description: description, requestType: HttpRequestType.fromString(key)!, route: path, - isMultiPart: isMultiPart, - isFormUrlEncoded: isFormUrlEncoded, + contentType: resultContentType, isOriginalHttpResponse: _originalHttpResponse, returnType: returnType, parameters: parameters, @@ -495,8 +499,7 @@ class OpenApiParser { restClients[sameTagIndex].requests.add(request); restClients[sameTagIndex].imports.addAll(imports); } - isMultiPart = false; - isFormUrlEncoded = false; + resultContentType = _defaultContentType; imports.clear(); }); }); diff --git a/swagger_parser/pubspec.yaml b/swagger_parser/pubspec.yaml index 6ad12c19..59133a1a 100644 --- a/swagger_parser/pubspec.yaml +++ b/swagger_parser/pubspec.yaml @@ -1,6 +1,6 @@ name: swagger_parser description: Package that generates REST clients and data classes from OpenApi definition file -version: 1.10.6 +version: 1.11.0 repository: https://github.com/Carapacik/swagger_parser/tree/main/swagger_parser homepage: https://omega-r.com topics: diff --git a/swagger_parser/test/generator/rest_clients_test.dart b/swagger_parser/test/generator/rest_clients_test.dart index 0ee93c0f..083d12e2 100644 --- a/swagger_parser/test/generator/rest_clients_test.dart +++ b/swagger_parser/test/generator/rest_clients_test.dart @@ -16,7 +16,7 @@ void main() { const fillController = FillController(); final filledContent = fillController.fillRestClientContent(restClient); const expectedContents = ''' -import 'package:dio/dio.dart'; +import 'package:dio/dio.dart' hide Headers; import 'package:retrofit/retrofit.dart'; part 'some_client.g.dart'; @@ -52,7 +52,7 @@ interface SomeClient {} const fillController = FillController(putClientsInFolder: true); final filledContent = fillController.fillRestClientContent(restClient); const expectedContents = ''' -import 'package:dio/dio.dart'; +import 'package:dio/dio.dart' hide Headers; import 'package:retrofit/retrofit.dart'; part 'some_client.g.dart'; @@ -89,7 +89,7 @@ interface SomeClient {} const fillController = FillController(clientPostfix: 'Api'); final filledContent = fillController.fillRestClientContent(restClient); const expectedContents = ''' -import 'package:dio/dio.dart'; +import 'package:dio/dio.dart' hide Headers; import 'package:retrofit/retrofit.dart'; part 'class_name_api.g.dart'; @@ -126,7 +126,7 @@ interface SomeApi {} const fillController = FillController(clientPostfix: ''); final filledContent = fillController.fillRestClientContent(restClient); const expectedContents = ''' -import 'package:dio/dio.dart'; +import 'package:dio/dio.dart' hide Headers; import 'package:retrofit/retrofit.dart'; part 'some.g.dart'; @@ -172,7 +172,7 @@ interface Some {} const fillController = FillController(); final filledContent = fillController.fillRestClientContent(restClient); const expectedContents = ''' -import 'package:dio/dio.dart'; +import 'package:dio/dio.dart' hide Headers; import 'package:retrofit/retrofit.dart'; import '../models/camel_class.dart'; @@ -213,7 +213,7 @@ abstract class ClassNameClient { const fillController = FillController(); final filledContent = fillController.fillRestClientContent(restClient); const expectedContents = ''' -import 'package:dio/dio.dart'; +import 'package:dio/dio.dart' hide Headers; import 'package:retrofit/retrofit.dart'; part 'class_name_client.g.dart'; @@ -333,7 +333,7 @@ interface ClassNameClient { const fillController = FillController(); final filledContent = fillController.fillRestClientContent(restClient); const expectedContents = ''' -import 'package:dio/dio.dart'; +import 'package:dio/dio.dart' hide Headers; import 'package:retrofit/retrofit.dart'; part 'class_name_client.g.dart'; @@ -515,7 +515,7 @@ interface ClassNameClient { const fillController = FillController(); final filledContent = fillController.fillRestClientContent(restClient); const expectedContents = ''' -import 'package:dio/dio.dart'; +import 'package:dio/dio.dart' hide Headers; import 'package:retrofit/retrofit.dart'; part 'class_name_client.g.dart'; @@ -630,7 +630,7 @@ interface ClassNameClient { const fillController = FillController(); final filledContent = fillController.fillRestClientContent(restClient); const expectedContents = ''' -import 'package:dio/dio.dart'; +import 'package:dio/dio.dart' hide Headers; import 'package:retrofit/retrofit.dart'; part 'class_name_client.g.dart'; @@ -737,7 +737,7 @@ interface ClassNameClient { const fillController = FillController(); final filledContent = fillController.fillRestClientContent(restClient); const expectedContents = ''' -import 'package:dio/dio.dart'; +import 'package:dio/dio.dart' hide Headers; import 'package:retrofit/retrofit.dart'; part 'class_name_client.g.dart'; @@ -831,7 +831,7 @@ interface ClassNameClient { const fillController = FillController(); final filledContent = fillController.fillRestClientContent(restClient); const expectedContents = ''' -import 'package:dio/dio.dart'; +import 'package:dio/dio.dart' hide Headers; import 'package:retrofit/retrofit.dart'; part 'class_name_client.g.dart'; @@ -918,7 +918,7 @@ interface ClassNameClient { requestType: HttpRequestType.post, route: '/send', returnType: null, - isMultiPart: true, + contentType: 'multipart/form-data', parameters: [ UniversalRequestType( parameterType: HttpParameterType.header, @@ -956,7 +956,7 @@ interface ClassNameClient { requestType: HttpRequestType.post, route: '/single', returnType: UniversalType(type: 'boolean'), - isMultiPart: true, + contentType: 'multipart/form-data', parameters: [ UniversalRequestType( parameterType: HttpParameterType.body, @@ -971,7 +971,7 @@ interface ClassNameClient { const expectedContents = ''' import 'dart:io'; -import 'package:dio/dio.dart'; +import 'package:dio/dio.dart' hide Headers; import 'package:retrofit/retrofit.dart'; import '../models/another_file.dart'; @@ -1012,7 +1012,7 @@ abstract class ClassNameClient { requestType: HttpRequestType.post, route: '/send', returnType: null, - isMultiPart: true, + contentType: 'multipart/form-data', parameters: [ UniversalRequestType( parameterType: HttpParameterType.header, @@ -1050,7 +1050,7 @@ abstract class ClassNameClient { requestType: HttpRequestType.post, route: '/single', returnType: UniversalType(type: 'boolean'), - isMultiPart: true, + contentType: 'multipart/form-data', parameters: [ UniversalRequestType( parameterType: HttpParameterType.body, @@ -1100,7 +1100,7 @@ interface ClassNameClient { requestType: HttpRequestType.post, route: '/send', returnType: null, - isFormUrlEncoded: true, + contentType: 'application/x-www-form-urlencoded', parameters: [ UniversalRequestType( parameterType: HttpParameterType.header, @@ -1118,7 +1118,7 @@ interface ClassNameClient { const fillController = FillController(); final filledContent = fillController.fillRestClientContent(restClient); const expectedContents = ''' -import 'package:dio/dio.dart'; +import 'package:dio/dio.dart' hide Headers; import 'package:retrofit/retrofit.dart'; import '../models/lol.dart'; @@ -1150,7 +1150,7 @@ abstract class ClassNameClient { requestType: HttpRequestType.post, route: '/send', returnType: null, - isFormUrlEncoded: true, + contentType: 'application/x-www-form-urlencoded', parameters: [ UniversalRequestType( parameterType: HttpParameterType.header, @@ -1232,7 +1232,7 @@ interface ClassNameClient { const fillController = FillController(); final filledContent = fillController.fillRestClientContent(restClient); const expectedContents = ''' -import 'package:dio/dio.dart'; +import 'package:dio/dio.dart' hide Headers; import 'package:retrofit/retrofit.dart'; part 'class_name_client.g.dart'; @@ -1382,7 +1382,7 @@ interface ClassNameClient { const fillController = FillController(); final filledContent = fillController.fillRestClientContent(restClient); const expectedContents = ''' -import 'package:dio/dio.dart'; +import 'package:dio/dio.dart' hide Headers; import 'package:retrofit/retrofit.dart'; import '../models/unit.dart'; @@ -1539,7 +1539,7 @@ interface ClassNameClient { const fillController = FillController(); final filledContent = fillController.fillRestClientContent(restClient); const expectedContents = ''' -import 'package:dio/dio.dart'; +import 'package:dio/dio.dart' hide Headers; import 'package:retrofit/retrofit.dart'; part 'class_name_client.g.dart'; @@ -1631,7 +1631,7 @@ abstract class ClassNameClient { const fillController = FillController(); final filledContent = fillController.fillRestClientContent(restClient); const expectedContents = ''' -import 'package:dio/dio.dart'; +import 'package:dio/dio.dart' hide Headers; import 'package:retrofit/retrofit.dart'; part 'class_name_client.g.dart'; @@ -1827,7 +1827,7 @@ interface ClassNameClient { const fillController = FillController(); final filledContent = fillController.fillRestClientContent(restClient); const expectedContents = ''' -import 'package:dio/dio.dart'; +import 'package:dio/dio.dart' hide Headers; import 'package:retrofit/retrofit.dart'; import '../models/some.dart'; @@ -1925,7 +1925,7 @@ interface ClassNameClient { const fillController = FillController(); final filledContent = fillController.fillRestClientContent(restClient); const expectedContents = ''' -import 'package:dio/dio.dart'; +import 'package:dio/dio.dart' hide Headers; import 'package:retrofit/retrofit.dart'; part 'class_name_client.g.dart'; @@ -2017,7 +2017,7 @@ abstract class ClassNameClient { const fillController = FillController(); final filledContent = fillController.fillRestClientContent(restClient); const expectedContents = ''' -import 'package:dio/dio.dart'; +import 'package:dio/dio.dart' hide Headers; import 'package:retrofit/retrofit.dart'; part 'class_name_client.g.dart'; diff --git a/swagger_parser/test/parser/requests_test.dart b/swagger_parser/test/parser/requests_test.dart index c9732e73..5f3cd65a 100644 --- a/swagger_parser/test/parser/requests_test.dart +++ b/swagger_parser/test/parser/requests_test.dart @@ -81,7 +81,7 @@ void main() { requestType: HttpRequestType.patch, route: '/api/User/{id}/avatar', returnType: null, - isMultiPart: true, + contentType: 'multipart/form-data', parameters: [ UniversalRequestType( name: 'avatar', @@ -184,7 +184,7 @@ void main() { requestType: HttpRequestType.patch, route: '/api/User/{id}/avatar', returnType: null, - isMultiPart: true, + contentType: 'multipart/form-data', parameters: [ UniversalRequestType( name: 'id', diff --git a/swagger_parser/test/parser/schemas/basic_types_class.3.0.json b/swagger_parser/test/parser/schemas/basic_types_class.3.0.json index 0d56c585..d37431b7 100644 --- a/swagger_parser/test/parser/schemas/basic_types_class.3.0.json +++ b/swagger_parser/test/parser/schemas/basic_types_class.3.0.json @@ -1,4 +1,3 @@ - { "openapi": "3.0.0", "paths": {}, diff --git a/swagger_parser/test/parser/schemas/of_like_class.3.1.json b/swagger_parser/test/parser/schemas/of_like_class.3.1.json index 5bc8f6a3..f96759ad 100644 --- a/swagger_parser/test/parser/schemas/of_like_class.3.1.json +++ b/swagger_parser/test/parser/schemas/of_like_class.3.1.json @@ -9,14 +9,14 @@ "allClass": { "allOf": [ { - "$ref": "#/components/schemas/EnumClass" + "$ref": "#/components/schemas/EnumClass" } ] }, "anyClass": { "anyOf": [ { - "$ref": "#/components/schemas/EnumClass" + "$ref": "#/components/schemas/EnumClass" } ], "default": "value1" @@ -24,14 +24,14 @@ "oneClass": { "oneOf": [ { - "$ref": "#/components/schemas/EnumClass" + "$ref": "#/components/schemas/EnumClass" } ] }, "allType": { "allOf": [ { - "type": "integer" + "type": "integer" } ] }, @@ -83,11 +83,11 @@ "EnumClass": { "type": "string", "enum": [ - "value1", - "value2" + "value1", + "value2" ], "title": "EnumClass" - } + } } } } \ No newline at end of file diff --git a/swagger_parser/test/parser/schemas/reference_types_class.3.0.json b/swagger_parser/test/parser/schemas/reference_types_class.3.0.json index 5ab15db8..378e01a3 100644 --- a/swagger_parser/test/parser/schemas/reference_types_class.3.0.json +++ b/swagger_parser/test/parser/schemas/reference_types_class.3.0.json @@ -12,7 +12,7 @@ "type": "integer" }, "another": { - "$ref": "#/components/schemas/AnotherClass" + "$ref": "#/components/schemas/AnotherClass" } } }