"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[4997],{3905:function(e,t,r){r.d(t,{Zo:function(){return s},kt:function(){return g}});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var u=n.createContext({}),p=function(e){var t=n.useContext(u),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},s=function(e){var t=p(e.components);return n.createElement(u.Provider,{value:t},e.children)},m="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,u=e.parentName,s=l(e,["components","mdxType","originalType","parentName"]),m=p(r),d=a,g=m["".concat(u,".").concat(d)]||m[d]||c[d]||o;return r?n.createElement(g,i(i({ref:t},s),{},{components:r})):n.createElement(g,i({ref:t},s))}));function g(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,i=new Array(o);i[0]=d;var l={};for(var u in t)hasOwnProperty.call(t,u)&&(l[u]=t[u]);l.originalType=e,l[m]="string"==typeof e?e:a,i[1]=l;for(var p=2;p use Swagger core v3 (see ",(0,o.kt)("a",{parentName:"li",href:"https://github.com/OpenAPITools/openapi-generator/issues/27%5B#27%5D"},"https://github.com/OpenAPITools/openapi-generator/issues/27[#27]"),")"))),(0,o.kt)("li",{parentName:"ul"},"Documentation"),(0,o.kt)("li",{parentName:"ul"},"Static pages, preferably on gh-pages, devoted to each generator"),(0,o.kt)("li",{parentName:"ul"},"Explain generator options"),(0,o.kt)("li",{parentName:"ul"},"Centralized docs on generated code usage/examples/configuration")),(0,o.kt)("h2",{id:"medium-term"},"Medium-term"),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"Feature set, well-defined API (code and templates), and extensibility improvements.")),(0,o.kt)("h3",{id:"api"},"API"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Typed representation of the model bound to our templates. As it is, everything is treated as an Object, and this can lead to changes in the interface which might be unexpected from the template perspective."),(0,o.kt)("li",{parentName:"ul"},"Feature set (potential generators to add; not an exhaustive list)",(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"Azure functions (node.js, server)"),(0,o.kt)("li",{parentName:"ul"},"Finagle HTTP Client (Scala, client)"),(0,o.kt)("li",{parentName:"ul"},"Finagle Http Server (Scala, server)"),(0,o.kt)("li",{parentName:"ul"},"Finatra (Scala, server)"),(0,o.kt)("li",{parentName:"ul"},"Kotlin Spring MVC/Springboot (server)"),(0,o.kt)("li",{parentName:"ul"},"C++ Server, any framework (server)")))),(0,o.kt)("h3",{id:"general"},"General"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Migrate from Maven to Gradle"),(0,o.kt)("li",{parentName:"ul"},"Java 9+ support"),(0,o.kt)("li",{parentName:"ul"},"Feature set (other options to investigate)"),(0,o.kt)("li",{parentName:"ul"},"SPI plugins",(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"Templating engine"),(0,o.kt)("li",{parentName:"ul"},"Language extensions"),(0,o.kt)("li",{parentName:"ul"},"Custom extensions (e.g. allowing users to load support for ",(0,o.kt)("a",{parentName:"li",href:"https://github.com/Azure/azure-rest-api-specs"},"azure-rest-api-specs"),")"))),(0,o.kt)("li",{parentName:"ul"},"Customizable templating engines (handlebars support)"),(0,o.kt)("li",{parentName:"ul"},"Unit-testing templates (to previously mentioned explicit type as an interface to the template)"),(0,o.kt)("li",{parentName:"ul"},"Reduce coupling"),(0,o.kt)("li",{parentName:"ul"},"Make types extending ",(0,o.kt)("inlineCode",{parentName:"li"},"CodegenConfig")," become the generation entrypoint"),(0,o.kt)("li",{parentName:"ul"},"Allow current ",(0,o.kt)("inlineCode",{parentName:"li"},"CodegenConfig")," types to define templating engine"),(0,o.kt)("li",{parentName:"ul"},"Allow current ",(0,o.kt)("inlineCode",{parentName:"li"},"CodegenConfig")," types to modify workflow (currently encapsulated in ",(0,o.kt)("inlineCode",{parentName:"li"},"DefaultGenerator")," and tightly coupled to the template engine"),(0,o.kt)("li",{parentName:"ul"},'Clearer reuse of "language" features, outside of "generator" types. That is, rather than enforcing polymorphic sharing of "language" which currently allows the super type to redefine framework-specific mapping functionality, generators could compose one or more language support types.'),(0,o.kt)("li",{parentName:"ul"},"Define template deprecation/removal process")),(0,o.kt)("h2",{id:"long-term"},"Long-term"),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"Expanding tooling offered, integrations, potentially SaaS offering to partially fund efforts.")),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Generator UI wrappers",(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"Move jimschubert/intellij-swagger-codegen plugin under the org, and rename"),(0,o.kt)("li",{parentName:"ul"},"Look into an Eclipse UI wrapper around the generator"),(0,o.kt)("li",{parentName:"ul"},"Look at Visual Studio Code (and/or Atom, sublime text) integration"))),(0,o.kt)("li",{parentName:"ul"},"Provide a native GUI for viewing/editing specs. Most tools are currently geared toward developers, but often times it may be non-technical business users who are interested in an API."),(0,o.kt)("li",{parentName:"ul"},"A paid service (SaaS) for generation may be enticing for some users. Such a service would allow for statistics (mentioned earlier in telemetry)"),(0,o.kt)("li",{parentName:"ul"},"Additional tools"),(0,o.kt)("li",{parentName:"ul"},"node.js build system(s) integration (grunt/gulp/webpack/etc)"),(0,o.kt)("li",{parentName:"ul"},"ruby gem"),(0,o.kt)("li",{parentName:"ul"},"others (which may require previously mentioned SaaS API)")))}d.isMDXComponent=!0}}]);