typeschema / reflection
This library helps to generate a TypeSchema specification using reflection
Fund package maintenance!
chriskapp
Patreon
www.paypal.me/fusioapi
Requires
- typeschema/model: ^0.1
Requires (Dev)
- phpunit/phpunit: ^10.0
- vimeo/psalm: ^5.0
README
This library provides a fully level 5 compliant reflector class to automatically build a TypeSchema specification based on a class using reflection. Through this you can easily transform your DTO classes into a TypeSchema specification.
Since the TypeSchema specification contains all information of each DTO you can transform the spec again back into DTO classes or also any other output which is supported by TypeSchema. This can help to re-use your DTO classes in different environments or also to generate other specifications.
Level 5 compliant means that this library supports all features of TypeSchema and you can transform your Java-Class into a TypeSchema specification and then use the TypeSchema specification to generate a Java-Class which can be again turned into a TypeSchema specification without any information loss.
Reflector Generator Reflector
| | |
PHP Class ---> TypeSchema ---> PHP Class ---> TypeSchema
In this case the first TypeSchema specification is always equal to the last TypeSchema specification.
Usage
To use this library you only need to create a Reflector
instance which returns a TypeSchema
model.
This model can then be transformed into a JSON string using the Jackson ObjectMapper
.
<?php // build TypeSchema specification $reflector = new Reflector(); $spec = $reflector->build(Student::class); // serialize to json $objectMapper = new ObjectMapper(new SchemaManager()); $json = $objectMapper->writeJson($spec);
Generator
We provide a hosted version of the code generator at our website.
To transform a TypeSchema specification into code you can use our generator
docker image. Simply run docker-compose up
which reads the typeschema.json
specification from the output/
folder and writes the generated code back into this folder.
services:
generator:
image: apiootech/typeschema-generator:0.6
environment:
# possible formats: csharp, go, java, php, python, rust, typescript
FORMAT: "php"
NAMESPACE: ""
SOURCE: "typeschema.json"
volumes:
- ./output:/usr/src/typeschema/output
For more advanced integration options please take a look at the SDKgen project which offers various integration options like a CLI, GitHub action or REST API.
Tests
For more examples you can take a look at the ReflectorTest which implements all level 5 tests of the TypeSchema specification.