diff --git a/docs/usage.md b/docs/usage.md index 6ff873b38e..5cfb1458ce 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -67,7 +67,7 @@ The OpenAPI input processor expects that the property `openapi` is defined in or The response and request payloads, since it is a JSON Schema variant, is [interpreted as a such](./interpretation_of_JSON_Schema.md). ## Generate Go models -TODO +Go is one of the many output languages we support. Check out this [basic example for a live demonstration](../examples/generate-go-models) ## Generate C# models TODO diff --git a/examples/README.md b/examples/README.md index 31aad40eb8..3a9887132e 100644 --- a/examples/README.md +++ b/examples/README.md @@ -25,3 +25,4 @@ This directory contains a series of self-contained examples that you can use as - [javascript-use-esm](./javascript-use-esm) - A basic example that generate the models to use ESM module system. - [javascript-use-cjs](./javascript-use-cjs) - A basic example that generate the models to use CJS module system. - [generate-java-models](./generate-java-models) - A basic example to generate Java data models. +- [generate-go-models](./generate-go-models) - A basic example to generate Go data models \ No newline at end of file diff --git a/examples/generate-go-models/README.md b/examples/generate-go-models/README.md new file mode 100644 index 0000000000..83874e7b14 --- /dev/null +++ b/examples/generate-go-models/README.md @@ -0,0 +1,17 @@ +# Go Data Models + +A basic example of how to use Modelina and output a Go data model. + +## How to run this example + +Run this example using: + +```sh +npm i && npm run start +``` + +If you are on Windows, use the `start:windows` script instead: + +```sh +npm i && npm run start:windows +``` diff --git a/examples/generate-go-models/__snapshots__/index.spec.ts.snap b/examples/generate-go-models/__snapshots__/index.spec.ts.snap new file mode 100644 index 0000000000..36a43dc738 --- /dev/null +++ b/examples/generate-go-models/__snapshots__/index.spec.ts.snap @@ -0,0 +1,10 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Should be able to render Go Models and should log expected output to console 1`] = ` +Array [ + "// Root represents a Root model. +type Root struct { + Email string +}", +] +`; diff --git a/examples/generate-go-models/index.spec.ts b/examples/generate-go-models/index.spec.ts new file mode 100644 index 0000000000..aec289cd64 --- /dev/null +++ b/examples/generate-go-models/index.spec.ts @@ -0,0 +1,13 @@ +const spy = jest.spyOn(global.console, 'log').mockImplementation(() => { return; }); +import {generate} from './index'; + +describe('Should be able to render Go Models', () => { + afterAll(() => { + jest.restoreAllMocks(); + }); + test('and should log expected output to console', async () => { + await generate(); + expect(spy.mock.calls.length).toEqual(2); + expect(spy.mock.calls[1]).toMatchSnapshot(); + }); +}); diff --git a/examples/generate-go-models/index.ts b/examples/generate-go-models/index.ts new file mode 100644 index 0000000000..5401dc8f93 --- /dev/null +++ b/examples/generate-go-models/index.ts @@ -0,0 +1,22 @@ +import { GoGenerator } from '../../src'; + +const generator = new GoGenerator(); +const jsonSchemaDraft7 = { + $schema: 'http://json-schema.org/draft-07/schema#', + type: 'object', + additionalProperties: false, + properties: { + email: { + type: 'string', + format: 'email' + } + } +}; + +export async function generate() : Promise { + const models = await generator.generate(jsonSchemaDraft7); + for (const model of models) { + console.log(model.result); + } +} +generate(); diff --git a/examples/generate-go-models/package-lock.json b/examples/generate-go-models/package-lock.json new file mode 100644 index 0000000000..b2134a6784 --- /dev/null +++ b/examples/generate-go-models/package-lock.json @@ -0,0 +1,10 @@ +{ + "name": "generate-go-models", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "hasInstallScript": true + } + } +} diff --git a/examples/generate-go-models/package.json b/examples/generate-go-models/package.json new file mode 100644 index 0000000000..f3a8d43bd8 --- /dev/null +++ b/examples/generate-go-models/package.json @@ -0,0 +1,10 @@ +{ + "config" : { "example_name" : "generate-go-models" }, + "scripts": { + "install": "cd ../.. && npm i", + "start": "../../node_modules/.bin/ts-node --cwd ../../ ./examples/$npm_package_config_example_name/index.ts", + "start:windows": "..\\..\\node_modules\\.bin\\ts-node --cwd ..\\..\\ .\\examples\\%npm_package_config_example_name%\\index.ts", + "test": "../../node_modules/.bin/jest --config=../../jest.config.js ./examples/$npm_package_config_example_name/index.spec.ts", + "test:windows": "..\\..\\node_modules\\.bin\\jest --config=..\\..\\jest.config.js examples/%npm_package_config_example_name%/index.spec.ts" + } +}