The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

OpenAPI::PerlGenerator - create Perl client SDKs from OpenAPI specs

SYNOPSIS

  my $api_file = slurp( 'petshop.json' );
  my $schema = JSON::PP->new()->decode( $api_file );
  my @files = $gen->generate(
      schema => $schema,
      prefix => "My::API",
  );

This module generates Perl clients for an OpenAPI spec. It generates a class for each item in the components/schemas section. It generates $prefix::Client::Impl as the implementation class of the client and a stub $prefix::Client class for overriding or refining the autogenerated class.

METHODS

new

Options

  • schema

    A data structure for the OpenAPI schema

  • templates

    A hashref of templates to use

  • prefix

    The prefix for the modules to use

  • tidy

    Run the resulting code through Perl::Tidy.

    Default is true.

  • typemap

    Hashref with the mapping of OpenAPI types to Type::Tiny constraints.

METHODS

->render( $name, $args )

  my $str = $gen->render('template_body', { prefix => 'My::API' } );

Render a template

<< ->generate( %options ) >>

  my @output = $gen->generate();
  for my $package (@output) {
      say "Generating " . $package->{package};
      say $package->{source};
  }

Generate the packages from the templates.

->load_schema( %options )

  my $res = $gen->load_schema(
      schema => $schema,
      prefix => 'My::Schema',
  );

Compiles the packages and installs them in the current process with the namespace given.

REPOSITORY

The public repository of this module is https://github.com/Corion/OpenAPI-PerlGenerator.

SUPPORT

The public support forum of this module is https://perlmonks.org/.

BUG TRACKER

Please report bugs in this module via the Github bug queue at https://github.com/Corion/OpenAPI-PerlGenerator/issues

AUTHOR

Max Maischein corion@cpan.org

COPYRIGHT (c)

Copyright 2024- by Max Maischein corion@cpan.org.

LICENSE

This module is released under the Artistic License 2.0.