Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/swaggest/go-code-builder
JSON Schema enabled Go code building abstraction for PHP
https://github.com/swaggest/go-code-builder
code-generator go json-schema json-schema-generator php-library
Last synced: 4 days ago
JSON representation
JSON Schema enabled Go code building abstraction for PHP
- Host: GitHub
- URL: https://github.com/swaggest/go-code-builder
- Owner: swaggest
- License: mit
- Created: 2017-03-27T09:30:16.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2022-09-15T08:12:55.000Z (about 2 years ago)
- Last Synced: 2024-09-23T03:23:46.997Z (about 2 months ago)
- Topics: code-generator, go, json-schema, json-schema-generator, php-library
- Language: Go
- Homepage:
- Size: 732 KB
- Stars: 3
- Watchers: 2
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# Swaggest JSON-schema enabled Go code builder
[![Build Status](https://travis-ci.org/swaggest/go-code-builder.svg?branch=master)](https://travis-ci.org/swaggest/go-code-builder)
[![codecov](https://codecov.io/gh/swaggest/go-code-builder/branch/master/graph/badge.svg)](https://codecov.io/gh/swaggest/go-code-builder)
![Code lines](https://sloc.xyz/github/swaggest/go-code-builder/?category=code)
![Comments](https://sloc.xyz/github/swaggest/go-code-builder/?category=comments)This library generates Go mapping structures defined by [JSON schema](http://json-schema.org/).
## Example
[Generated code](tests/resources/go/swagger/entities.go) for [schema](tests/resources/swagger-schema.json).
```php
structCreatedHook = new StructHookCallback(function (StructDef $structDef, $path, $schema) use ($builder) {
if ('#' === $path) {
$structDef->setName('SwaggerSchema');
} elseif (0 === strpos($path, '#/definitions/')) {
$name = $builder->codeBuilder->exportableName(substr($path, strlen('#/definitions/')));
$structDef->setName($name);
}
});
$builder->getType($schema);$goFile = new GoFile('swagger');
foreach ($builder->getGeneratedStructs() as $generatedStruct) {
$goFile->getCode()->addSnippet($generatedStruct->structDef);
}
$goFile->getCode()->addSnippet($builder->getCode());
```## API Documentation
Classes [documentation](API.md).
## Schema extensions
Magic properties (vendor extensions) defined in schema enable special handling.
### `x-go-type`
Can have a value string or an object. Contains type reference that can be used instead of generated type.
If `$ignoreXGoType` option is `true` value of vendor extension is disregarded and type is generated.
Value examples:
* `"[]myorg.com/go-null-types::nulltypes.NullString"`
* `"myorg.com/my-app/order.Entity"`
* `"float64"`
* `{"import": {"package": "my-package/domain/orders"}, "type": "Order"}`
* `{"import": {"package": "my-package", "alias": "mp"}, "type": "Order"}`### `x-nullable`, `nullable`
If `true` schema type is converted to `[, "null"]`. Requires `$enableXNullable` option.
### `x-omitempty`
A `boolean` value to control `,omitempty` presence.
### `x-generate`
A `boolean` value to control whether property should be added to generated `struct`.
Property with `"x-generate": false` will be skipped.
If `GoBuilder` option `requireXGenerate` is set to `true` only properties with `"x-generate": true` will be generated.## CLI Tool
You can use [json-cli](https://github.com/swaggest/json-cli#gengo) to generate Go structures from command line.