Modern-OpenAPI-Generator
view release on metacpan or search on metacpan
lib/Modern/OpenAPI/Generator.pm view on Meta::CPAN
if ( $self->{local_test} ) {
Modern::OpenAPI::Generator::CodeGen::StubData->generate(
writer => $writer,
base => $base,
);
}
}
elsif ( $self->{ui} ) {
Modern::OpenAPI::Generator::CodeGen::Server->generate_spec_ui_only(
writer => $writer,
spec => $spec,
base => $base,
);
}
my $ui_only = !$self->{server} && $self->{ui};
Modern::OpenAPI::Generator::CodeGen::Docs->generate(
writer => $writer,
spec => $spec,
base => $base,
client => $self->{client},
server => $self->{server},
ui => $self->{ui},
sync => $self->{sync},
async => $self->{async},
ui_only => $ui_only,
local_test => $self->{local_test},
);
Modern::OpenAPI::Generator::CodeGen::Tests->generate(
writer => $writer,
base => $base,
client => $self->{client},
server => $self->{server},
ui => $self->{ui},
sync => $self->{sync},
async => $self->{async},
signatures => $self->{signatures},
ui_only => $ui_only,
local_test => $self->{local_test},
);
$self->_write_root_cpanfile($writer);
return $self;
}
sub _write_root_cpanfile {
my ( $self, $writer ) = @_;
my $txt = <<'CPAN';
requires 'perl', '5.026';
requires 'Mojolicious', '9.0';
requires 'Mojolicious::Plugin::OpenAPI', '5.00';
requires 'Mojolicious::Plugin::SwaggerUI', '0';
requires 'JSON::Validator', '5.0';
requires 'OpenAPI::Modern', '0.060';
requires 'Moo', '2.005';
requires 'Types::Standard', '2.000';
requires 'YAML::PP', '0.034';
requires 'JSON::MaybeXS', '1.004';
requires 'Modern::Perl::Prelude', '0';
requires 'Digest::SHA', '6.00';
on test => sub {
requires 'Test::More', '0.96';
};
CPAN
$writer->write( 'cpanfile', $txt );
}
1;
__END__
=encoding utf8
=head1 NAME
Modern::OpenAPI::Generator - OpenAPI 3.x client/server generator for Mojolicious
=head1 SYNOPSIS
perl bin/oapi-perl-gen --name MyApp::API --output ./out openapi.yaml
# or from Perl:
use Modern::OpenAPI::Generator;
Modern::OpenAPI::Generator->new(
spec_path => 'openapi.yaml',
output_dir => './generated',
name => 'MyApp::API',
)->run;
=head1 DESCRIPTION
Generates:
=over 4
=item * C<::Client::Core>, C<::Client::Sync>, C<::Client::Async> (with C<< --client >>) and C<::Client::Result> â C<Result> holds C<tx> (L<Mojo::Transaction>) and C<data> (JSON or inflated C<::Model::*>). Shared C<::Model::*> (and C<::StubData> for...
=item * Generated server controllers call C<< $c->openapi->valid_input >> so L<Mojolicious::Plugin::OpenAPI> validates each incoming request; responses are checked when you C<< render(openapi =E<gt> ...) >> per the plugin
=item * C<< oapi-perl-gen --local-test >> emits C<::StubData> and controller stubs that return random data from the response schema, inflated with C<::Model::*->from_json>, then serialized (C<TO_JSON>) instead of HTTP 501
=item * Mojolicious server with L<Mojolicious::Plugin::OpenAPI>
=item * L<Mojolicious::Plugin::SwaggerUI> at C</swagger> on the same server as the API when C<< --ui >> is on
=item * Optional auth helper modules (HMAC, Bearer) under C<::Auth::Plugin::*>
=item * F<README.md> in the output tree (usage, install, server/client/UI commands â OpenAPI Generator style)
=item * F<docs/*.md> per-tag API reference and C<components/schemas> model pages, linked from the README
=item * F<t/*.t> smoke tests for the generated modules
=back
See L<Modern::OpenAPI::Generator::CLI> (C<oapi-perl-gen --help>) for C<--client> / C<--server> / C<--ui> selection rules. For Swagger UI, the generated C<script/server.pl> prepends the request origin to C<servers> in the served YAML only when run wit...
=head1 METHODS
( run in 0.686 second using v1.01-cache-2.11-cpan-75ffa21a3d4 )