Swagger dart code generator

Code partially generated with [chopper](https://pub.dev/packages/chopper) # :mega: **Build dart types from Swagger/OpenAPI schemas** [![pub package](https://img.shields.io/pub/v/swagger_dart_code_generator.svg)](https://pub.dartlang.org/packages/swagger_dart_code_generator) ![GitHub issues](https://img.shields.io/github/issues-raw/epam-cross-platform-lab/swagger-dart-code-generator?style=flat-square) ![GitHub last commit](https://img.shields.io/github/last-commit/epam-cross-platform-lab/swagger-dart-code-generator?style=flat-square) build Discord [![codecov](https://codecov.io/gh/epam-cross-platform-lab/swagger-dart-code-generator/branch/master/graph/badge.svg)](https://codecov.io/gh/epam-cross-platform-lab/swagger-dart-code-generator) Discord SwaggerDartCodeGenerator is a code generator that looks for `*.swagger` files and builds `.swagger.dart` files, based on the schema. Code generation based on Chopper and JsonAnnotation models and can be configured for your needs. --- ## **Overview** In general case for each .swagger file three outputs will be created.
.dart generated by Swagger dart code generator, contains all models, requests, converters, etc.
[Since v1.2.0] .enums.dart generated by Swagger dart code generator, contains all enums and enums mappings.
.chopper.dart - generated by chopper.
.g.dart - generated by json_serializable.
Bloc ## **Installation** The generated code uses the following packages in run-time: ```yaml dependencies: chopper: ^4.0.1 json_annotation: ^4.1.0 ``` Add the following to your `pubspec.yaml` file to be able to do code generation: ```yaml dev_dependencies: build_runner: ^2.1.4 chopper_generator: ^4.0.2 json_serializable: ^5.0.0 swagger_dart_code_generator: any ``` Then run: ```shell pub packages get ``` or ```shell flutter packages get ``` Now SwaggerGenerator will generate the API files for you by running: ```shell pub run build_runner build ``` or ```shell flutter pub run build_runner build ``` ## **Configuration** Swagger generator offers some configuration options to generate code. All options should be included on `build.yaml` file on the root of the project: ```yaml targets: $default: builders: swagger_dart_code_generator: options: # custom configuration options! ``` | Option |Default value | Is required | Description | | - | - | - | - | | `use_inheritance` | `true` | `false` | Enables and disables extends keyword. | | `with_base_url` | `true` | `false` | If this option is false, generator will ignore base url in swagger file. | | `use_required_attribute_for_headers` | `true` | `false` | If this option is false, generator will not add @required attribute to headers. | | `with_converter` | `true` | `false` | If option is true, combination of all mappings will be generated. | | `ignore_headers` | `false` | `false` | If option is true, headers will not be generated. | | `enums_case_sensitive` | `true` | `false` | If value is false, 'enumValue' will be defined like Enum.enumValue even it's json key equals 'ENUMVALUE' | | `include_paths` | `[]` | `false` | List of Regex If not empty - includes only paths matching reges | | `exclude_paths` | `[]` | `false` | List of Regex If not empty -exclude paths matching reges | | `use_default_null_for_lists` | `false` | `false` | If option is true, default value for lists will be null, otherwise - [] | | `build_only_models` | `false` | `false` | If option is true, chopper classes will not be generated. | | `separate_models` | `false` | `false` | If option true, generates models into separate file. | | `include_if_null` | `null` | `false` | Sets includeIfNull JsonAnnotation feature and sets value for it. If null - not set anything. | | `default_values_map` | `[]` | `false` | Contains map of types and theirs default values. See [DefaultValueMap](#default-value-map-for-model-generation). | | `response_override_value_map` | `[]` | `false` | Contains map of responses and theirs overridden values. See [ResponseOverrideValueMap](#response-override-value-map-for-requests-generation). | | `input_folder` | `-` | `true` | Path to folder with .swagger files (for ex. swagger_examples, or lib/swaggers). | | `output_folder` | `-` | `true` | Path to output folder (for ex. lib/generated). | It's important to remember that, by default, [build](https://github.com/dart-lang/build) will follow [Dart's package layout conventions](https://dart.dev/tools/pub/package-layout), meaning that only some folders will be considered to parse the input files. So, if you want to reference files from a folder other than `lib/`, make sure you've included it on `sources`: ```yaml targets: $default: sources: - lib/** - swagger_examples/** - swaggers/** ``` ### **Default Value Map for model generation** If you want to add defaultValue: attribute to fields with concrete type you can use default value map. Please see next example: ```yaml targets: $default: builders: swagger_dart_code_generator: options: input_folder: 'lib/swaggers' output_folder: 'lib/generated_code/' default_values_map: - type_name: int default_value: '36' - type_name: String default_value: 'default' - type_name: 'List' default_value: '[]' exclude_paths: - '\/cars\/get' include_paths: - '\/popular\/cars' ``` ### **Response Override Value Map for requests generation** If you want to override response for concrete request, you can use response_override_value_map. For example: ```yaml targets: $default: builders: swagger_dart_code_generator: options: input_folder: 'lib/swaggers' output_folder: 'lib/generated_code/' response_override_value_map: - url: '/store/inventory' method: get overridden_value: 'List' - url: '/news/latest' method: put overridden_value: 'MyPerfectType' ``` Check the [examples](https://github.com/epam-cross-platform-lab/swagger-dart-code-generator/tree/master/example) to see how to use it in details.