This library generates Go mapping structures defined by JSON schema.
Generated code for schema.
<?php
namespace MyApp;
use Swaggest\GoCodeBuilder\JsonSchema\GoBuilder;
use Swaggest\GoCodeBuilder\JsonSchema\StructHookCallback;
use Swaggest\GoCodeBuilder\Templates\GoFile;
use Swaggest\GoCodeBuilder\Templates\Struct\StructDef;
use Swaggest\JsonSchema\Schema;
require_once __DIR__ . '/vendor/autoload.php';
$schemaData = json_decode(file_get_contents(__DIR__ . '/swagger-schema.json'));
$schema = Schema::import($schemaData);
$builder = new GoBuilder();
$builder->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());
Classes documentation.
Magic properties (vendor extensions) defined in schema enable special handling.
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"}
If true
schema type is converted to [<type>, "null"]
. Requires $enableXNullable
option.
A boolean
value to control ,omitempty
presence.
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.
You can use json-cli to generate Go structures from command line.