Swagger dart code generator

:mega: Build dart types from Swagger/OpenAPI schemas

pub package build Discord codecov Discord

SwaggerDartCodeGenerator is a code generator that looks for *.swagger files and builds .swagger.dart files, based on the schema. Codegenration 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.
.chopper.dart - generated by chopper.
.g.dart - generated by json_serializable.

Bloc

Installation

Add the following to your pubspec.yaml file to be able to do code generation:

dev_dependencies:
  chopper_generator: ^3.0.5
  json_annotation: ^3.0.1
  json_serializable: ^3.4.1
  swagger_dart_code_generator: any

The generated code uses the following packages in run-time:

dependencies:
  chopper: ^3.0.3

Then run:

pub packages get

or

flutter packages get

Now SwaggerGenerator will generate the API files for you by running:

pub run build_runner build

or

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:

targets:
  $default:
    builders:
      swagger_dart_code_generator:
        options:
          # custom configuration options!
OptionDefault valueIs requiredDescription
with_base_urltruefalseIf this option is false, generator will ignore base url in swagger file.
with_convertertruefalseIf option is true, combination of all mappings will be generated.
ignore_headersfalsefalseIf option is true, headers will not be generated.
use_default_null_for_listsfalsefalseIf option is true, default value for lists will be null, otherwice - []
build_only_modelsfalsefalseIf option is true, chopper classes will not be generated.
default_values_map[]falseContains map of types and theirs default values. See DefaultValueMap.
response_override_value_map[]falseContains map of responses and theirs overriden values. See ResponseOverrideValueMap.
input_folder-truePath to folder with .swagger files (for ex. swagger_examples, or lib/swaggers).
output_folder-truePath to output folder (for ex. lib/generated).

It's important to remember that, by default, build will follow Dart's package layout conventions, 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:

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:

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: 'defaut'
            - type_name: 'List<String>'
              default_value: '[]'

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:

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
              overriden_value: 'List<dynamic>'
              - url: '/news/latest'
              method: put
              overriden_value: 'MyPerfectType'

Check the examples to see how to use it in details.

Libraries

swagger_dart_code_generator