forked from loafle/openapi-generator-original
53 lines
80 KiB
HTML
53 lines
80 KiB
HTML
<!doctype html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width">
|
|
<meta name="generator" content="Docusaurus">
|
|
<link rel="preconnect" href="https://www.google-analytics.com">
|
|
<script>window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)},ga.l=+new Date,ga("create","UA-132927057-1","auto"),ga("send","pageview")</script>
|
|
<script async src="https://www.google-analytics.com/analytics.js"></script>
|
|
<link rel="preconnect" href="https://www.google-analytics.com">
|
|
<script>window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)},ga.l=+new Date,ga("create","UA-132927057-1","auto"),ga("send","pageview")</script>
|
|
<script async src="https://www.google-analytics.com/analytics.js"></script>
|
|
<script src="https://buttons.github.io/buttons.js"></script>
|
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.0/clipboard.min.js"></script>
|
|
<script src="/js/code-block-buttons.js"></script>
|
|
|
|
<title data-react-helmet="true">Create a New Generator</title>
|
|
|
|
<meta data-react-helmet="true" http-equiv="x-ua-compatible" content="ie=edge"><meta data-react-helmet="true" property="og:title" content="OpenAPI Generator · Generate clients, servers, and documentation from OpenAPI 2.0/3.x documents"><meta data-react-helmet="true" property="og:image" content="https://openapi-generator.tech/img/docusaurus.png"><meta data-react-helmet="true" property="twitter:image" content="https://openapi-generator.tech/img/docusaurus.png"><meta data-react-helmet="true" name="twitter:image:alt" content="Image for OpenAPI Generator · Generate clients, servers, and documentation from OpenAPI 2.0/3.x documents"><meta data-react-helmet="true" name="twitter:card" content="summary"><meta data-react-helmet="true" name="description" content="Creating a new generator which will become a part of the officially supported generators in OpenAPI Generator is pretty simple. We've created a helper script to bootstrap the operation. Let's look at the files necessary to create a new generator, then an example of bootstrapping a generator using the `new.sh` script in the root of the repository."><meta data-react-helmet="true" property="og:description" content="Creating a new generator which will become a part of the officially supported generators in OpenAPI Generator is pretty simple. We've created a helper script to bootstrap the operation. Let's look at the files necessary to create a new generator, then an example of bootstrapping a generator using the `new.sh` script in the root of the repository."><meta data-react-helmet="true" property="og:url" content="https://openapi-generator.tech/docs/new-generator">
|
|
|
|
<link data-react-helmet="true" rel="shortcut icon" href="/img/favicon.png">
|
|
|
|
|
|
<link rel="stylesheet" href="/styles.ec5417b5.css">
|
|
|
|
</head>
|
|
<body>
|
|
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}function e(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}var n=window.matchMedia("(prefers-color-scheme: dark)");n.addListener((function(n){null===e()&&t(n.matches?"dark":"")}));var a=e();null!==a?t(a):n.matches&&t("dark")}()</script>
|
|
<div id="__docusaurus">
|
|
<nav class="navbar navbar--light navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><div aria-label="Navigation bar toggle" class="navbar__toggle" role="button" tabindex="0"><svg xmlns="http://www.w3.org/2000/svg" width="30" height="30" viewBox="0 0 30 30" role="img" focusable="false"><title>Menu</title><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></div><a aria-current="page" class="navbar__brand active" href="/"><img class="navbar__logo" src="/img/mono-logo.svg" alt="OpenAPI Tools logo"><strong>OpenAPI Generator</strong></a><a class="navbar__item navbar__link" href="/docs/installation">Install</a><a class="navbar__item navbar__link" href="/docs/generators">Generators</a><a class="navbar__item navbar__link" href="/docs/roadmap">Roadmap</a><a class="navbar__item navbar__link" href="/docs/faq">FAQ</a><a class="navbar__item navbar__link" href="/team">Team</a><a class="navbar__item navbar__link" href="/blog">Blog</a><a class="navbar__item navbar__link" activeclassname="navbar__link--active" to="https://api.openapi-generator.tech" href="https://api.openapi-generator.tech">API</a></div><div class="navbar__items navbar__items--right"><div class="react-toggle react-toggle--disabled displayOnlyInLargeViewport_1gtM"><div class="react-toggle-track"><div class="react-toggle-track-check"><span class="toggle_keGJ moon_1gwN"></span></div><div class="react-toggle-track-x"><span class="toggle_keGJ sun_3CPA"></span></div></div><div class="react-toggle-thumb"></div><input type="checkbox" disabled="" aria-label="Dark mode toggle" class="react-toggle-screenreader-only"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div><div class="navbar-sidebar"><div class="navbar-sidebar__brand"><a aria-current="page" class="navbar__brand active" href="/"><img class="navbar__logo" src="/img/mono-logo.svg" alt="OpenAPI Tools logo"><strong>OpenAPI Generator</strong></a></div><div class="navbar-sidebar__items"><div class="menu"><ul class="menu__list"><li class="menu__list-item"><a class="menu__link" href="/docs/installation">Install</a></li><li class="menu__list-item"><a class="menu__link" href="/docs/generators">Generators</a></li><li class="menu__list-item"><a class="menu__link" href="/docs/roadmap">Roadmap</a></li><li class="menu__list-item"><a class="menu__link" href="/docs/faq">FAQ</a></li><li class="menu__list-item"><a class="menu__link" href="/team">Team</a></li><li class="menu__list-item"><a class="menu__link" href="/blog">Blog</a></li><li class="menu__list-item"><a class="menu__link" activeclassname="navbar__link--active" to="https://api.openapi-generator.tech" href="https://api.openapi-generator.tech">API</a></li></ul></div></div></div></nav><div class="main-wrapper"><div class="docPage_1kjD"><div class="docSidebarContainer_1cYp"><div class="sidebar_1kLs"><div class="menu menu--responsive"><button aria-label="Open Menu" class="button button--secondary button--sm menu__button" type="button"><svg class="sidebarMenuIcon_2vk4" xmlns="http://www.w3.org/2000/svg" height="24" width="24" viewBox="0 0 32 32" role="img" focusable="false"><title>Menu</title><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><ul class="menu__list"><li class="menu__list-item menu__list-item--collapsed"><a class="menu__link menu__link--sublist" href="#!">Getting Started</a><ul class="menu__list"><li class="menu__list-item"><a class="menu__link" href="/docs/installation">CLI Installation</a></li><li class="menu__list-item"><a class="menu__link" href="/docs/plugins">Plugins</a></li><li class="menu__list-item"><a class="menu__link" href="/docs/online">Online</a></li><li class="menu__list-item"><a class="menu__link" href="/docs/usage">Usage</a></li></ul></li><li class="menu__list-item menu__list-item--collapsed"><a class="menu__link menu__link--sublist" href="#!">Extending</a><ul class="menu__list"><li class="menu__list-item"><a class="menu__link" href="/docs/templating">Using Templates</a></li><li class="menu__list-item"><a class="menu__link" href="/docs/customization">Customization</a></li><li class="menu__list-item"><a class="menu__link" href="/docs/debugging">Debugging</a></li><li class="menu__list-item"><a class="menu__link" href="/docs/integrations">Workflow Integrations</a></li></ul></li><li class="menu__list-item"><a class="menu__link menu__link--sublist menu__link--active" href="#!">Contributing</a><ul class="menu__list"><li class="menu__list-item"><a class="menu__link" href="/docs/contributing">Guidelines</a></li><li class="menu__list-item"><a class="menu__link" href="/docs/code-of-conduct">Code of Conduct</a></li><li class="menu__list-item"><a class="menu__link" href="/docs/contribute-building">Building the code</a></li><li class="menu__list-item"><a aria-current="page" class="menu__link menu__link--active" href="/docs/new-generator">Create a New Generator</a></li></ul></li><li class="menu__list-item menu__list-item--collapsed"><a class="menu__link menu__link--sublist" href="#!">About</a><ul class="menu__list"><li class="menu__list-item"><a class="menu__link" href="/docs/roadmap">Roadmap</a></li><li class="menu__list-item"><a class="menu__link" href="/docs/swagger-codegen-migration">Migrating from Swagger Codegen</a></li><li class="menu__list-item"><a class="menu__link" href="/docs/fork-qna">Swagger Codegen Fork: Q&A</a></li></ul></li><li class="menu__list-item menu__list-item--collapsed"><a class="menu__link menu__link--sublist" href="#!">Releases</a><ul class="menu__list"><li class="menu__list-item"><a class="menu__link" href="/docs/release-summary">Release Summary</a></li><li class="menu__list-item"><a class="menu__link" href="/docs/release-3-0-0">Release Notes: 3.0.0</a></li></ul></li><li class="menu__list-item menu__list-item--collapsed"><a class="menu__link menu__link--sublist" href="#!">API</a><ul class="menu__list"><li class="menu__list-item"><a class="menu__link" href="/docs/generators">Generators List</a></li></ul></li></ul></div></div></div><main class="docMainContainer_FFX1"><div class="padding-vert--lg"><div class="container"><div class="row"><div class="col"><div class="docItemContainer_2cwg"><article><header><h1 class="docTitle_1vWb">Create a New Generator</h1></header><div class="markdown"><p>Creating a new generator which will become a part of the officially supported generators in OpenAPI Generator is pretty simple. We've created a helper script to bootstrap the operation. Let's look at the files necessary to create a new generator, then an example of bootstrapping a generator using the <code>new.sh</code> script in the root of the repository.</p><h2><a aria-hidden="true" tabindex="-1" class="anchor" id="required-files"></a><a aria-hidden="true" tabindex="-1" class="hash-link" href="#required-files" title="Direct link to heading">#</a>Required Files</h2><p>The minimum set of files required to create a new generator are:</p><ul><li>A "Codegen" file<ul><li>exists under <code>modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/</code></li><li>defines language options</li><li>defines framework options</li><li>determines OpenAPI feature set</li><li>extends the generation workflow</li></ul></li><li>SPI registration<ul><li>Above class must be referenced in <code>modules/openapi-generator/src/main/resources/META-INF/services/org.openapitools.codegen.CodegenConfig</code></li><li>Tells the generator that this class exists</li><li>Allows for classpath extension (addition) of generators</li></ul></li><li>A minimal template<ul><li>Should include a README explaining usage</li><li>Must include an <code>api.mustache</code></li><li>Exists under <code>modules/openapi-generator/src/main/resources/</code> (plus <code>embeddedTemplate</code> dir value, see below)</li></ul></li><li>Sample scripts under <code>./bin</code> and <code>./bin/windows</code><ul><li>Gives users a "real life" example of generated output</li><li>Samples are used by CI to verify generators and test for regressions in some cases</li></ul></li></ul><p>Now, let's generate an example generator and then walk through the pieces. At the end, we'll touch on some known sticking points for new generator authors and provide some suggestions.</p><h2><a aria-hidden="true" tabindex="-1" class="anchor" id="newsh"></a><a aria-hidden="true" tabindex="-1" class="hash-link" href="#newsh" title="Direct link to heading">#</a>new.sh</h2><p>The <code>new.sh</code> script in the root of the project is meant to simplify this process. Run <code>./new.sh --help</code>.</p><pre class="mdxCodeBlock_iHAB"><div class="codeBlockWrapper_2QGZ"><pre class="prism-code language-text codeBlock_19pQ" style="color:#F8F8F2;background-color:#282A36"><div class="token-line" style="color:#F8F8F2"><span class="token plain">Stubs out files for new generators</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">Usage:</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">./new.sh [options]</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"> Options:</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"> -n Required. Specify generator name, should be kebab-cased.</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"> -c Create a client generator</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"> -s Create a server generator</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"> -d Create a documentation generator</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"> -t When specified, creates test file(s) for the generator.</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"> -h Display help.</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">Examples:</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"> Create a server generator for ktor:</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"> ./new.sh -n kotlin -s</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"> Creates:</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"> modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinServerCodegen.java</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"> modules/openapi-generator/src/main/resources/kotlin-server/README.mustache</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"> modules/openapi-generator/src/main/resources/kotlin-server/model.mustache</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"> modules/openapi-generator/src/main/resources/kotlin-server/api.mustache</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"> bin/windows/kotlin-server-petstore.bat</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"> bin/kotlin-server-petstore.sh</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"> Create a generic C# server generator:</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"> ./new.sh -n csharp -s -t</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"> Creates:</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"> modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CsharpServerCodegen.java</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"> modules/openapi-generator/src/main/resources/csharp-server/README.mustache</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"> modules/openapi-generator/src/main/resources/csharp-server/model.mustache</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"> modules/openapi-generator/src/main/resources/csharp-server/api.mustache</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"> bin/windows/csharp-server-petstore.bat</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"> bin/csharp-server-petstore.sh</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"> modules/openapi-generator/src/test/java/org/openapitools/codegen/csharp/CsharpServerCodegenTest.java</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"> modules/openapi-generator/src/test/java/org/openapitools/codegen/csharp/CsharpServerCodegenModelTest.java</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"> modules/openapi-generator/src/test/java/org/openapitools/codegen/csharp/CsharpServerCodegenOptionsTest.java</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"> modules/openapi-generator/src/test/java/org/openapitools/codegen/options/CsharpServerCodegenOptionsProvider.java</span></div></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_1BYj">Copy</button></div></pre><p>This script allows us to define a client, server, schema, or documentation generator. We'll focus on the simplest generator (documentation). The other generator types may require heavy extension of the "Config" base class, and these docs could very quickly become outdated. When creating a new generator, please review existing generators as a guideline for implementation.</p><p>Create a new Markdown generator, specifying CommonMark as the name to avoid conflicting with the built-in Markdown generator.</p><pre class="mdxCodeBlock_iHAB"><div class="codeBlockWrapper_2QGZ"><pre class="prism-code language-bash codeBlock_19pQ" style="color:#F8F8F2;background-color:#282A36"><div class="token-line" style="color:#F8F8F2"><span class="token plain">./new.sh -n common-mark -d</span></div></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_1BYj">Copy</button></div></pre><p>You should see output similar to the following:</p><pre class="mdxCodeBlock_iHAB"><div class="codeBlockWrapper_2QGZ"><pre class="prism-code language-bash codeBlock_19pQ" style="color:#F8F8F2;background-color:#282A36"><div class="token-line" style="color:#F8F8F2"><span class="token plain">Creating modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CommonMarkDocumentationCodegen.java</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">Creating modules/openapi-generator/src/main/resources/common-mark-documentation/README.mustache</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">Creating modules/openapi-generator/src/main/resources/common-mark-documentation/model.mustache</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">Creating modules/openapi-generator/src/main/resources/common-mark-documentation/api.mustache</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">Creating bin/windows/common-mark-documentation-petstore.bat</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">Creating bin/common-mark-documentation-petstore.sh</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">Finished.</span></div></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_1BYj">Copy</button></div></pre><h3><a aria-hidden="true" tabindex="-1" class="anchor" id="review-generated-config"></a><a aria-hidden="true" tabindex="-1" class="hash-link" href="#review-generated-config" title="Direct link to heading">#</a>Review Generated Config</h3><p>Beginning with the "Codegen" file (<code>CommonMarkDocumentationCodegen.java</code>), the constructor was created:</p><pre class="mdxCodeBlock_iHAB"><div class="codeBlockWrapper_2QGZ"><pre class="prism-code language-java codeBlock_19pQ" style="color:#F8F8F2;background-color:#282A36"><div class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">public</span><span class="token plain"> </span><span class="token class-name">CommonMarkDocumentationCodegen</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">super</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"> outputFolder </span><span class="token operator">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"generated-code"</span><span class="token plain"> </span><span class="token operator">+</span><span class="token plain"> </span><span class="token class-name">File</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">separator </span><span class="token operator">+</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"common-mark"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"> modelTemplateFiles</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">put</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">"model.mustache"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">".zz"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"> apiTemplateFiles</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">put</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">"api.mustache"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">".zz"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"> embeddedTemplateDir </span><span class="token operator">=</span><span class="token plain"> templateDir </span><span class="token operator">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"common-mark-documentation"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"> apiPackage </span><span class="token operator">=</span><span class="token plain"> </span><span class="token class-name">File</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">separator </span><span class="token operator">+</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"Apis"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"> modelPackage </span><span class="token operator">=</span><span class="token plain"> </span><span class="token class-name">File</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">separator </span><span class="token operator">+</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"Models"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"> supportingFiles</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">add</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">new</span><span class="token plain"> </span><span class="token class-name">SupportingFile</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">"README.mustache"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">""</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"README.md"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token comment" style="color:rgb(98, 114, 164)">// TODO: Fill this out.</span><span class="token plain"></span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span></div></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_1BYj">Copy</button></div></pre><p>These options are some defaults which may require updating. Let's look line-by-line at the config.</p><pre class="mdxCodeBlock_iHAB"><div class="codeBlockWrapper_2QGZ"><pre class="prism-code language-java codeBlock_19pQ" style="color:#F8F8F2;background-color:#282A36"><div class="token-line" style="color:#F8F8F2"><span class="token plain">outputFolder </span><span class="token operator">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"generated-code"</span><span class="token plain"> </span><span class="token operator">+</span><span class="token plain"> </span><span class="token class-name">File</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">separator </span><span class="token operator">+</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"common-mark"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span></div></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_1BYj">Copy</button></div></pre><p>This is the default output location. This will be <code>generated-code/common-mark</code> on non-Windows machines and <code>generated-code\common-mark</code> on Windows. You may change this to any value you'd like, but a user will almost always provide an output directory.</p><blockquote><p>When joining paths, always use <code>File.seperator</code></p></blockquote><pre class="mdxCodeBlock_iHAB"><div class="codeBlockWrapper_2QGZ"><pre class="prism-code language-java codeBlock_19pQ" style="color:#F8F8F2;background-color:#282A36"><div class="token-line" style="color:#F8F8F2"><span class="token plain">modelTemplateFiles</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">put</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">"model.mustache"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">".zz"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span></div></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_1BYj">Copy</button></div></pre><p>The <code>model.mustache</code> file is registered as the template for model generation. The <code>new.sh</code> script doesn't have a way to know your intended file extension, so we default to a <code>.zz</code> extension. This <em>must</em> be changed (unless your generator's target extension is <code>.zz</code>). For this example, you'd change <code>.zz</code> to <code>.md</code> or <code>.markdown</code>, depending on your preference.</p><p>This model template registration will use <code>model.mustache</code> to generate a new file for every model defined in your API's specification document.</p><p>The path is considered relative to <code>embeddedTemplateDir</code>, <code>templateDir</code>, or a library subdirectory (refer to the Java client generator implementation for a prime example).</p><pre class="mdxCodeBlock_iHAB"><div class="codeBlockWrapper_2QGZ"><pre class="prism-code language-java codeBlock_19pQ" style="color:#F8F8F2;background-color:#282A36"><div class="token-line" style="color:#F8F8F2"><span class="token plain">apiTemplateFiles</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">put</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">"api.mustache"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">".zz"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span></div></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_1BYj">Copy</button></div></pre><p>This is the template used for generating API related files. Similar to the above model template, you'll want to change <code>.zz</code> to <code>.md</code> or <code>.markdown</code>.</p><p>The path is considered relative to <code>embeddedTemplateDir</code>, <code>templateDir</code>, or a library subdirectory (refer to the Java client generator implementation for a prime example).</p><pre class="mdxCodeBlock_iHAB"><div class="codeBlockWrapper_2QGZ"><pre class="prism-code language-java codeBlock_19pQ" style="color:#F8F8F2;background-color:#282A36"><div class="token-line" style="color:#F8F8F2"><span class="token plain">embeddedTemplateDir </span><span class="token operator">=</span><span class="token plain"> templateDir </span><span class="token operator">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"common-mark-documentation"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span></div></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_1BYj">Copy</button></div></pre><p>This line sets the embedded and template directories to <code>common-mark-documentation</code>. The <code>embeddedTemplateDir</code> refers to the directory which will exist under <code>modules/openapi-generator/src/main/resources</code> and will be published with every release in which your new generator is present.</p><p>The <code>templateDir</code> variable refers to the "current" template directory setting, as defined by the user. That is, the user may invoke with <code>-t</code> or <code>--template-directory</code> (or plugin option variants), and override this directory.</p><p>Both of these variables exist because the generator will fallback to files under <code>embeddedTemplateDir</code> if they are not defined in the user's custom template directory.</p><pre class="mdxCodeBlock_iHAB"><div class="codeBlockWrapper_2QGZ"><pre class="prism-code language-java codeBlock_19pQ" style="color:#F8F8F2;background-color:#282A36"><div class="token-line" style="color:#F8F8F2"><span class="token plain">apiPackage </span><span class="token operator">=</span><span class="token plain"> </span><span class="token class-name">File</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">separator </span><span class="token operator">+</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"Apis"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span></div></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_1BYj">Copy</button></div></pre><p>This sets the "package" location for anything considered an API document. You might want to change this setting if, for instance, your language doesn't support uppercase letters in the path. We don't need to worry about that here.</p><p>Every templated output from <code>api.mustache</code> (registered via <code>apiTemplateFiles</code> above) will end up in the directory defined by <code>apiPackage</code> here.</p><pre class="mdxCodeBlock_iHAB"><div class="codeBlockWrapper_2QGZ"><pre class="prism-code language-java codeBlock_19pQ" style="color:#F8F8F2;background-color:#282A36"><div class="token-line" style="color:#F8F8F2"><span class="token plain">modelPackage </span><span class="token operator">=</span><span class="token plain"> </span><span class="token class-name">File</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">separator </span><span class="token operator">+</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"Models"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span></div></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_1BYj">Copy</button></div></pre><p>Similarly, this sets the package for <code>Models</code>.</p><p>Every templated output from <code>model.mustache</code> (registered via <code>modelTemplateFiles</code> above) will end up in the directory defined by <code>modelPackage</code> here.</p><pre class="mdxCodeBlock_iHAB"><div class="codeBlockWrapper_2QGZ"><pre class="prism-code language-java codeBlock_19pQ" style="color:#F8F8F2;background-color:#282A36"><div class="token-line" style="color:#F8F8F2"><span class="token plain">supportingFiles</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">add</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">new</span><span class="token plain"> </span><span class="token class-name">SupportingFile</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">"README.mustache"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">""</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"README.md"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span></div></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_1BYj">Copy</button></div></pre><p>A "supporting file" is an extra file which isn't created once for every operation or model defined in your specification document. It is a single file which may or may not be templated (determined by the extension of the filename).</p><p>A supporting file only passes through the Mustache template processor if the filename ends in <code>.mustache</code>.</p><p>The path is considered relative to <code>embeddedTemplateDir</code>, <code>templateDir</code>, or a library subdirectory (refer to the Java client generator implementation for a prime example).</p><blockquote><p>If you want your readme to be generic (not templated), just rename the file to README.md and change <code>README.mustache</code> to <code>README.md</code> above.</p></blockquote><h3><a aria-hidden="true" tabindex="-1" class="anchor" id="create-templates"></a><a aria-hidden="true" tabindex="-1" class="hash-link" href="#create-templates" title="Direct link to heading">#</a>Create templates</h3><p>The <code>new.sh</code> created our three required files. Let's start filling out each of these files.</p><h4><a aria-hidden="true" tabindex="-1" class="anchor" id="readmemustache"></a><a aria-hidden="true" tabindex="-1" class="hash-link" href="#readmemustache" title="Direct link to heading">#</a>README.mustache</h4><pre class="mdxCodeBlock_iHAB"><div class="codeBlockWrapper_2QGZ"><pre class="prism-code language-mustache codeBlock_19pQ" style="color:#F8F8F2;background-color:#282A36"><div class="token-line" style="color:#F8F8F2"><span class="token plain"># Documentation for {{appName}}</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">{{#generateApiDocs}}</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"><a name="documentation-for-api-endpoints"></a></span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">## Documentation for API Endpoints</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">All URIs are relative to *{{{basePath}}}*</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">Class | Method | HTTP request | Description</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">------------ | ------------- | ------------- | -------------</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">{{#apiInfo}}{{#apis}}{{#operations}}{{#operation}}*{{classname}}* | [**{{operationId}}**](Apis/{{apiDocPath}}{{classname}}.md#{{operationIdLowerCase}}) | **{{httpMethod}}** {{path}} | {{#summary}}{{{summary}}}{{/summary}}</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">{{/operation}}{{/operations}}{{/apis}}{{/apiInfo}}</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">{{/generateApiDocs}}</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">{{#generateModelDocs}}</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"><a name="documentation-for-models"></a></span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">## Documentation for Models</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">{{#modelPackage}}</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">{{#models}}{{#model}} - [{{{modelPackage}}}.{{{classname}}}](Models/{{modelDocPath}}{{{classname}}}.md)</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">{{/model}}{{/models}}</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">{{/modelPackage}}</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">{{^modelPackage}}</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">No model defined in this package</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">{{/modelPackage}}</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">{{/generateModelDocs}}</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"><a name="documentation-for-authorization"></a>{{! TODO: optional documentation for authorization? }}</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">## Documentation for Authorization</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">{{^authMethods}}</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">All endpoints do not require authorization.</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">{{/authMethods}}</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">{{#authMethods}}</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">{{#last}}</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">Authentication schemes defined for the API:</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">{{/last}}</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">{{/authMethods}}</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">{{#authMethods}}</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"><a name="{{name}}"></a></span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">### {{name}}</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">{{#isApiKey}}- **Type**: API key</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">- **API key parameter name**: {{keyParamName}}</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">- **Location**: {{#isKeyInQuery}}URL query string{{/isKeyInQuery}}{{#isKeyInHeader}}HTTP header{{/isKeyInHeader}}</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">{{/isApiKey}}</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">{{#isBasic}}- **Type**: HTTP basic authentication</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">{{/isBasic}}</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">{{#isOAuth}}- **Type**: OAuth</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">- **Flow**: {{flow}}</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">- **Authorization URL**: {{authorizationUrl}}</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">- **Scopes**: {{^scopes}}N/A{{/scopes}}</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">{{#scopes}} - {{scope}}: {{description}}</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">{{/scopes}}</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">{{/isOAuth}}</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">{{/authMethods}}</span></div></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_1BYj">Copy</button></div></pre><p>Let's not focus too much on the contents of this file. You may refer to <a href="/docs/templating">templating</a> for more details on the variables bound to these files and to <a href="/docs/debugging">debugging</a> how to debug the structures. Of note here is that we're generating structures in markdown as defined by the objects constructed by our new "Config" class.</p><h4><a aria-hidden="true" tabindex="-1" class="anchor" id="apimustache"></a><a aria-hidden="true" tabindex="-1" class="hash-link" href="#apimustache" title="Direct link to heading">#</a>api.mustache</h4><p>The API documentation might look like this:</p><pre class="mdxCodeBlock_iHAB"><div class="codeBlockWrapper_2QGZ"><pre class="prism-code language-mustache codeBlock_19pQ" style="color:#F8F8F2;background-color:#282A36"><div class="token-line" style="color:#F8F8F2"><span class="token plain"># {{classname}}{{#description}}</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">{{description}}{{/description}}</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">All URIs are relative to *{{basePath}}*</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">Method | HTTP request | Description</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">------------- | ------------- | -------------</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">{{#operations}}{{#operation}}[**{{operationId}}**]({{classname}}.md#{{operationId}}) | **{{httpMethod}}** {{path}} | {{#summary}}{{summary}}{{/summary}}</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">{{/operation}}{{/operations}}</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">{{#operations}}</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">{{#operation}}</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"><a name="{{operationId}}"></a></span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"># **{{operationId}}**</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">> {{#returnType}}{{returnType}} {{/returnType}}{{operationId}}({{#allParams}}{{{paramName}}}{{#hasMore}}, {{/hasMore}}{{/allParams}})</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">{{summary}}{{#notes}}</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">{{notes}}{{/notes}}</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">### Parameters</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">{{^allParams}}This endpoint does not need any parameter.{{/allParams}}{{#allParams}}{{#-last}}</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">Name | Type | Description | Notes</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">------------- | ------------- | ------------- | -------------{{/-last}}{{/allParams}}</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">{{#allParams}} **{{paramName}}** | {{#isPrimitiveType}}**{{dataType}}**{{/isPrimitiveType}}{{^isPrimitiveType}}{{#isFile}}**{{dataType}}**{{/isFile}}{{^isFile}}{{#generateModelDocs}}[**{{dataType}}**]({{baseType}}.md){{/generateModelDocs}}{{^generateModelDocs}}**{{dataType}}**{{/generateModelDocs}}{{/isFile}}{{/isPrimitiveType}}| {{description}} |{{^required}} [optional]{{/required}}{{#defaultValue}} [default to {{defaultValue}}]{{/defaultValue}}{{#allowableValues}} [enum: {{#values}}{{{.}}}{{^-last}}, {{/-last}}{{/values}}]{{/allowableValues}}</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">{{/allParams}}</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">### Return type</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">{{#returnType}}{{#returnTypeIsPrimitive}}**{{returnType}}**{{/returnTypeIsPrimitive}}{{^returnTypeIsPrimitive}}{{#generateModelDocs}}[**{{returnType}}**]({{returnBaseType}}.md){{/generateModelDocs}}{{^generateModelDocs}}**{{returnType}}**{{/generateModelDocs}}{{/returnTypeIsPrimitive}}{{/returnType}}{{^returnType}}null (empty response body){{/returnType}}</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">### Authorization</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">{{^authMethods}}No authorization required{{/authMethods}}{{#authMethods}}[{{name}}](../README.md#{{name}}){{^-last}}, {{/-last}}{{/authMethods}}</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">### HTTP request headers</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"> - **Content-Type**: {{#consumes}}{{{mediaType}}}{{#hasMore}}, {{/hasMore}}{{/consumes}}{{^consumes}}Not defined{{/consumes}}</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"> - **Accept**: {{#produces}}{{{mediaType}}}{{#hasMore}}, {{/hasMore}}{{/produces}}{{^produces}}Not defined{{/produces}}</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">{{/operation}}</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">{{/operations}}</span></div></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_1BYj">Copy</button></div></pre><h4><a aria-hidden="true" tabindex="-1" class="anchor" id="modelmustache"></a><a aria-hidden="true" tabindex="-1" class="hash-link" href="#modelmustache" title="Direct link to heading">#</a>model.mustache</h4><p>The models file could resemble the following.</p><pre class="mdxCodeBlock_iHAB"><div class="codeBlockWrapper_2QGZ"><pre class="prism-code language-mustache codeBlock_19pQ" style="color:#F8F8F2;background-color:#282A36"><div class="token-line" style="color:#F8F8F2"><span class="token plain">{{#models}}</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">{{#model}}</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"># {{{packageName}}}.{{modelPackage}}.{{{classname}}}</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">## Properties</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">Name | Type | Description | Notes</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">------------ | ------------- | ------------- | -------------</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">{{#parent}}</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">{{#parentVars}}</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">**{{name}}** | {{#isPrimitiveType}}**{{dataType}}**{{/isPrimitiveType}}{{^isPrimitiveType}}[**{{dataType}}**]({{complexType}}.md){{/isPrimitiveType}} | {{description}} | {{^required}}[optional] {{/required}}{{#readOnly}}[readonly] {{/readOnly}}{{#defaultValue}}[default to {{{.}}}]{{/defaultValue}}</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">{{/parentVars}}</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">{{/parent}}</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">{{#vars}}**{{name}}** | {{#isPrimitiveType}}**{{dataType}}**{{/isPrimitiveType}}{{^isPrimitiveType}}[**{{dataType}}**]({{complexType}}.md){{/isPrimitiveType}} | {{description}} | {{^required}}[optional] {{/required}}{{#readOnly}}[readonly] {{/readOnly}}{{#defaultValue}}[default to {{{.}}}]{{/defaultValue}}</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">{{/vars}}</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">{{/model}}</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">{{/models}}</span></div></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_1BYj">Copy</button></div></pre><h3><a aria-hidden="true" tabindex="-1" class="anchor" id="build-it"></a><a aria-hidden="true" tabindex="-1" class="hash-link" href="#build-it" title="Direct link to heading">#</a>Build it</h3><p>To compile quickly to test this out, you can run <code>mvn clean package -DskipTests</code>.</p><blockquote><p>When implementing a more robust generator, you'll want to run all tests as well: <code>mvn clean package</code></p></blockquote><h3><a aria-hidden="true" tabindex="-1" class="anchor" id="compile-sample"></a><a aria-hidden="true" tabindex="-1" class="hash-link" href="#compile-sample" title="Direct link to heading">#</a>Compile Sample</h3><p>The <code>new.sh</code> script created <code>bin/common-mark-documentation-petstore.sh</code>:</p><pre class="mdxCodeBlock_iHAB"><div class="codeBlockWrapper_2QGZ"><pre class="prism-code language-bash codeBlock_19pQ" style="color:#F8F8F2;background-color:#282A36"><div class="token-line" style="color:#F8F8F2"><span class="token shebang important">#!/bin/sh</span><span class="token plain"></span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">SCRIPT</span><span class="token operator">=</span><span class="token string" style="color:rgb(255, 121, 198)">"</span><span class="token string variable" style="color:rgb(189, 147, 249);font-style:italic">$0</span><span class="token string" style="color:rgb(255, 121, 198)">"</span><span class="token plain"></span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">while</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain"> -h </span><span class="token string" style="color:rgb(255, 121, 198)">"</span><span class="token string variable" style="color:rgb(189, 147, 249);font-style:italic">$SCRIPT</span><span class="token string" style="color:rgb(255, 121, 198)">"</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">do</span><span class="token plain"></span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">ls</span><span class="token operator">=</span><span class="token variable" style="color:rgb(189, 147, 249);font-style:italic">$(</span><span class="token variable function" style="color:rgb(80, 250, 123);font-style:italic">ls</span><span class="token variable" style="color:rgb(189, 147, 249);font-style:italic"> -ld </span><span class="token variable string" style="color:rgb(255, 121, 198);font-style:italic">"</span><span class="token variable string variable" style="color:rgb(189, 147, 249);font-style:italic">$SCRIPT</span><span class="token variable string" style="color:rgb(255, 121, 198);font-style:italic">"</span><span class="token variable" style="color:rgb(189, 147, 249);font-style:italic">)</span><span class="token plain"></span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">link</span><span class="token operator">=</span><span class="token variable" style="color:rgb(189, 147, 249);font-style:italic">$(</span><span class="token variable function" style="color:rgb(80, 250, 123);font-style:italic">expr</span><span class="token variable" style="color:rgb(189, 147, 249);font-style:italic"> </span><span class="token variable string" style="color:rgb(255, 121, 198);font-style:italic">"</span><span class="token variable string variable" style="color:rgb(189, 147, 249);font-style:italic">$ls</span><span class="token variable string" style="color:rgb(255, 121, 198);font-style:italic">"</span><span class="token variable" style="color:rgb(189, 147, 249);font-style:italic"> </span><span class="token variable builtin class-name" style="color:rgb(189, 147, 249);font-style:italic">:</span><span class="token variable" style="color:rgb(189, 147, 249);font-style:italic"> </span><span class="token variable string" style="color:rgb(255, 121, 198);font-style:italic">'.*-> \(.*\)$'</span><span class="token variable" style="color:rgb(189, 147, 249);font-style:italic">)</span><span class="token plain"></span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">expr</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"</span><span class="token string variable" style="color:rgb(189, 147, 249);font-style:italic">$link</span><span class="token string" style="color:rgb(255, 121, 198)">"</span><span class="token plain"> </span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'/.*'</span><span class="token plain"> </span><span class="token operator">></span><span class="token plain"> /dev/null</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">then</span><span class="token plain"></span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">SCRIPT</span><span class="token operator">=</span><span class="token string" style="color:rgb(255, 121, 198)">"</span><span class="token string variable" style="color:rgb(189, 147, 249);font-style:italic">$link</span><span class="token string" style="color:rgb(255, 121, 198)">"</span><span class="token plain"></span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">else</span><span class="token plain"></span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">SCRIPT</span><span class="token operator">=</span><span class="token variable" style="color:rgb(189, 147, 249);font-style:italic">$(</span><span class="token variable function" style="color:rgb(80, 250, 123);font-style:italic">dirname</span><span class="token variable" style="color:rgb(189, 147, 249);font-style:italic"> </span><span class="token variable string" style="color:rgb(255, 121, 198);font-style:italic">"</span><span class="token variable string variable" style="color:rgb(189, 147, 249);font-style:italic">$SCRIPT</span><span class="token variable string" style="color:rgb(255, 121, 198);font-style:italic">"</span><span class="token variable" style="color:rgb(189, 147, 249);font-style:italic">)</span><span class="token plain">/</span><span class="token string" style="color:rgb(255, 121, 198)">"</span><span class="token string variable" style="color:rgb(189, 147, 249);font-style:italic">$link</span><span class="token string" style="color:rgb(255, 121, 198)">"</span><span class="token plain"></span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">fi</span><span class="token plain"></span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">done</span><span class="token plain"></span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain"> </span><span class="token operator">!</span><span class="token plain"> -d </span><span class="token string" style="color:rgb(255, 121, 198)">"</span><span class="token string variable" style="color:rgb(189, 147, 249);font-style:italic">${APP_DIR}</span><span class="token string" style="color:rgb(255, 121, 198)">"</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">then</span><span class="token plain"></span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">APP_DIR</span><span class="token operator">=</span><span class="token variable" style="color:rgb(189, 147, 249);font-style:italic">$(</span><span class="token variable function" style="color:rgb(80, 250, 123);font-style:italic">dirname</span><span class="token variable" style="color:rgb(189, 147, 249);font-style:italic"> </span><span class="token variable string" style="color:rgb(255, 121, 198);font-style:italic">"</span><span class="token variable string variable" style="color:rgb(189, 147, 249);font-style:italic">$SCRIPT</span><span class="token variable string" style="color:rgb(255, 121, 198);font-style:italic">"</span><span class="token variable" style="color:rgb(189, 147, 249);font-style:italic">)</span><span class="token plain">/</span><span class="token punctuation" style="color:rgb(248, 248, 242)">..</span><span class="token plain"></span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">APP_DIR</span><span class="token operator">=</span><span class="token variable" style="color:rgb(189, 147, 249);font-style:italic">$(</span><span class="token variable builtin class-name" style="color:rgb(189, 147, 249);font-style:italic">cd</span><span class="token variable" style="color:rgb(189, 147, 249);font-style:italic"> </span><span class="token variable string" style="color:rgb(255, 121, 198);font-style:italic">"</span><span class="token variable string variable" style="color:rgb(189, 147, 249);font-style:italic">${APP_DIR}</span><span class="token variable string" style="color:rgb(255, 121, 198);font-style:italic">"</span><span class="token variable punctuation" style="color:rgb(248, 248, 242);font-style:italic">;</span><span class="token variable" style="color:rgb(189, 147, 249);font-style:italic"> </span><span class="token variable builtin class-name" style="color:rgb(189, 147, 249);font-style:italic">pwd</span><span class="token variable" style="color:rgb(189, 147, 249);font-style:italic">)</span><span class="token plain"></span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">fi</span><span class="token plain"></span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">executable</span><span class="token operator">=</span><span class="token string" style="color:rgb(255, 121, 198)">"./modules/openapi-generator-cli/target/openapi-generator-cli.jar"</span><span class="token plain"></span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain"> </span><span class="token operator">!</span><span class="token plain"> -f </span><span class="token string" style="color:rgb(255, 121, 198)">"</span><span class="token string variable" style="color:rgb(189, 147, 249);font-style:italic">$executable</span><span class="token string" style="color:rgb(255, 121, 198)">"</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"></span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">then</span><span class="token plain"></span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"> mvn clean package</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">fi</span><span class="token plain"></span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)"># if you've executed sbt assembly previously it will use that instead.</span><span class="token plain"></span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">export</span><span class="token plain"> </span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">JAVA_OPTS</span><span class="token operator">=</span><span class="token string" style="color:rgb(255, 121, 198)">"</span><span class="token string variable" style="color:rgb(189, 147, 249);font-style:italic">${JAVA_OPTS}</span><span class="token string" style="color:rgb(255, 121, 198)"> -Xmx1024M -DloggerPath=conf/log4j.properties"</span><span class="token plain"></span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">ags</span><span class="token operator">=</span><span class="token string" style="color:rgb(255, 121, 198)">"</span><span class="token string variable" style="color:rgb(189, 147, 249);font-style:italic">$@</span><span class="token string" style="color:rgb(255, 121, 198)"> generate -i modules/openapi-generator/src/test/resources/2_0/petstore.yaml -g common-mark -o samples/documentation/petstore/common/mark"</span><span class="token plain"></span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">java </span><span class="token variable" style="color:rgb(189, 147, 249);font-style:italic">${JAVA_OPTS}</span><span class="token plain"> -jar </span><span class="token variable" style="color:rgb(189, 147, 249);font-style:italic">${executable}</span><span class="token plain"> </span><span class="token variable" style="color:rgb(189, 147, 249);font-style:italic">${ags}</span></div></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_1BYj">Copy</button></div></pre><p>This script is often used to apply default options for generation. A common option in most of these script is to define the template directory as the generator's directory under <code>resources</code>. This allows template maintainers to modify and test out template changes which don't require recompilation of the entire project. You'd still need to recompile the project in full if you add or modify behaviors to the generator (such as adding a <code>CliOption</code>).</p><p>Add <code>-t modules/openapi-generator/src/main/resources/common-mark-documentation</code> to <code>ags</code> line to simplify the evaluation of template-only modifications:</p><pre class="mdxCodeBlock_iHAB"><div class="codeBlockWrapper_2QGZ"><pre class="prism-code language-diff codeBlock_19pQ" style="color:#F8F8F2;background-color:#282A36"><div class="token-line" style="color:#F8F8F2"><span class="token plain">diff --git a/bin/markdown-documentation-petstore.sh b/bin/markdown-documentation-petstore.sh</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">index d816771478..94b4ce6d12 100644</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token coord">--- a/bin/markdown-documentation-petstore.sh</span><span class="token plain"></span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token coord">+++ b/bin/markdown-documentation-petstore.sh</span><span class="token plain"></span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">@@ -26,6 +26,6 @@ fi</span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token unchanged"> # if you've executed sbt assembly previously it will use that instead.</span></div><div class="token-line" style="color:#F8F8F2"><span class="token unchanged"> export JAVA_OPTS="${JAVA_OPTS} -Xmx1024M -DloggerPath=conf/log4j.properties"</span></div><div class="token-line" style="color:#F8F8F2"><span class="token unchanged"></span><span class="token deleted-sign deleted" style="color:rgb(255, 85, 85)">-ags="$@ generate -i modules/openapi-generator/src/test/resources/2_0/petstore.yaml -g common-mark -o samples/documentation/petstore/common-mark"</span></div><div class="token-line" style="color:#F8F8F2"><span class="token deleted-sign deleted" style="color:rgb(255, 85, 85)"></span><span class="token inserted-sign inserted" style="color:rgb(80, 250, 123)">+ags="$@ generate -t modules/openapi-generator/src/main/resources/common-mark-documentation -i modules/openapi-generator/src/test/resources/2_0/petstore.yaml -g common-mark -o samples/documentation/petstore/common/markdown"</span></div><div class="token-line" style="color:#F8F8F2"><span class="token inserted-sign inserted" style="color:rgb(80, 250, 123)"></span><span class="token plain"></span></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token unchanged"> java ${JAVA_OPTS} -jar ${executable} ${ags}</span></div></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_1BYj">Copy</button></div></pre><h3><a aria-hidden="true" tabindex="-1" class="anchor" id="verify-output"></a><a aria-hidden="true" tabindex="-1" class="hash-link" href="#verify-output" title="Direct link to heading">#</a>Verify output</h3><p>Creating a new generator will be an iterative task. Once you've generated the sample, you'll want to try it out. For compiled client/server outputs, this would mean running the code or creating a small sample project to consume your artifact just to make sure it works.</p><p>For markdown, you can open in Visual Studio Code or any other editor with a markdown preview. Not all editors support relative links to other markdown documents. To test the output in this guide, install <code>markserv</code>:</p><pre class="mdxCodeBlock_iHAB"><div class="codeBlockWrapper_2QGZ"><pre class="prism-code language-bash codeBlock_19pQ" style="color:#F8F8F2;background-color:#282A36"><div class="token-line" style="color:#F8F8F2"><span class="token function" style="color:rgb(80, 250, 123)">npm</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">install</span><span class="token plain"> --global markserv</span></div></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_1BYj">Copy</button></div></pre><p>Now, you can serve the output directory directly and test your links:</p><pre class="mdxCodeBlock_iHAB"><div class="codeBlockWrapper_2QGZ"><pre class="prism-code language-bash codeBlock_19pQ" style="color:#F8F8F2;background-color:#282A36"><div class="token-line" style="color:#F8F8F2"><span class="token plain">markserv samples/documentation/petstore/common/markdown</span></div></pre><button type="button" aria-label="Copy code to clipboard" class="copyButton_1BYj">Copy</button></div></pre><p>That's it! You've created your first generator!</p></div></article><div class="margin-vert--xl"><div class="row"><div class="col"><a href="https://github.com/OpenAPITools/openapi-generator/edit/master/website/../docs/new-generator.md" target="_blank" rel="noreferrer noopener"><svg fill="currentColor" height="1.2em" width="1.2em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 40 40" style="margin-right:0.3em;vertical-align:sub"><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"></path></g></svg>Edit this page</a></div><div class="col text--right"><em><small>Last updated on <time datetime="2020-02-17T01:23:00.000Z" class="docLastUpdatedAt_1sqk">2020-2-17</time> by <strong>Sebastien Rosset</strong></small></em></div></div></div><div class="margin-vert--lg"><nav class="pagination-nav"><div class="pagination-nav__item"><a class="pagination-nav__link" href="/docs/contribute-building"><h5 class="pagination-nav__link--sublabel">Previous</h5><h4 class="pagination-nav__link--label">« Building the code</h4></a></div><div class="pagination-nav__item pagination-nav__item--next"><a class="pagination-nav__link" href="/docs/roadmap"><h5 class="pagination-nav__link--sublabel">Next</h5><h4 class="pagination-nav__link--label">Roadmap »</h4></a></div></nav></div></div></div><div class="col col--3"><div class="tableOfContents_TbNY"><ul class="contents contents__left-border"><li><a href="#required-files" class="contents__link">Required Files</a></li><li><a href="#newsh" class="contents__link">new.sh</a><ul><li><a href="#review-generated-config" class="contents__link">Review Generated Config</a></li><li><a href="#create-templates" class="contents__link">Create templates</a></li><li><a href="#build-it" class="contents__link">Build it</a></li><li><a href="#compile-sample" class="contents__link">Compile Sample</a></li><li><a href="#verify-output" class="contents__link">Verify output</a></li></ul></li></ul></div></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container"><div class="row footer__links"><div class="col footer__col"><h4 class="footer__title">Docs</h4><ul class="footer__items"><li class="footer__item"><a class="footer__link-item" href="/docs/customization">Customizing Generators</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/installation">Installation</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/integrations">Workflow Integrations</a></li></ul></div><div class="col footer__col"><h4 class="footer__title">Community</h4><ul class="footer__items"><li class="footer__item"><a class="footer__link-item" href="/users">User Showcase</a></li><li class="footer__item"><a class="footer__link-item" target="_blank" rel="noopener noreferrer" href="https://stackoverflow.com/questions/tagged/openapi-generator">Stack Overflow</a></li><li class="footer__item"><a class="footer__link-item" target="_blank" rel="noopener noreferrer" href="https://join.slack.com/t/openapi-generator/shared_invite/enQtNzAyNDMyOTU0OTE1LTY5ZDBiNDI5NzI5ZjQ1Y2E5OWVjMjZkYzY1ZGM2MWQ4YWFjMzcyNDY5MGI4NjQxNDBiMTlmZTc5NjY2ZTQ5MGM">Chat Room</a></li><li class="footer__item"><a class="footer__link-item" target="_blank" rel="noopener noreferrer" href="https://twitter.com/oas_generator">Twitter</a></li></ul></div><div class="col footer__col"><h4 class="footer__title">More</h4><ul class="footer__items"><li class="footer__item"><a class="footer__link-item" href="/blog">Blog</a></li><li class="footer__item"><a class="footer__link-item" target="_blank" rel="noopener noreferrer" href="https://github.com/OpenAPITools/openapi-generator">GitHub</a></li></ul></div></div><div class="text--center"><div class="margin-bottom--sm"><a href="https://openapi-generator.tech/" target="_blank" rel="noopener noreferrer" class="footerLogoLink_1Wg7"><img class="footer__logo" alt="OpenAPI Tools" src="/img/mono-logo.svg"></a></div>Copyright © 2020 OpenAPI-Generator Contributors (https://openapi-generator.tech)</div></div></footer>
|
|
</div>
|
|
|
|
<script src="/styles.eafa41c9.js"></script>
|
|
|
|
<script src="/runtime~main.696887b8.js"></script>
|
|
|
|
<script src="/main.297ad582.js"></script>
|
|
|
|
<script src="/1.f4a01129.js"></script>
|
|
|
|
<script src="/2.b8ded096.js"></script>
|
|
|
|
<script src="/1be78505.110344dd.js"></script>
|
|
|
|
<script src="/20ac7829.46a49cc5.js"></script>
|
|
|
|
<script src="/17896441.a6df2fe9.js"></script>
|
|
|
|
<script src="/10211c0a.823d1bf6.js"></script>
|
|
|
|
|
|
</body>
|
|
</html> |