Generate the DTO (data transfer object) layer for your code - language agnostic by using plugins
WORK IN PROGRESS!!!
The long-term plan is to generate code for the definition the same as protocol buffers. But instead actually be "human-readable". So you will be able to define this DTO and have for instance the java/golang backend and javascript front-end code generated to do the send/receive marshaling.
Because it will generate "type-safe" code and not use reflection, we will also get compile-time safety.
In the example/out
dir you will see an example of how the placeholders are used in your project folder. Note that the format of placeholders are usually inside a commented line, like //{{BEGIN EMPLOYEE_PLACEHOLDER
}} and has another line after that for ending //{{END EMPLOYEE_PLACEHOLDER
}}. The reason for two lines is that after this generator "injected" the generated code it can still find where to replace/overwrite that section the next time it generates it.
Refer to the example
folder in this git repo. You will see simple_example.yml
file that is a demo setup of how your "DTO definition/setup" will look. The file nested_example.yml
is one with nested objects in your DTO.
Windows:
go get github.com/zero-boilerplate/dto-layer-generator
cd "%gopath%/src/github.com/zero-boilerplate/dto-layer-generator"
"%GOPATH%/bin/dto-layer-generator.exe" "example/simple_example.yml"
:: "%GOPATH%/bin/dto-layer-generator.exe" "example/nested_example.yml"
Linux:
go get github.com/zero-boilerplate/dto-layer-generator
cd "$gopath/src/github.com/zero-boilerplate/dto-layer-generator"
"$GOPATH/bin/dto-layer-generator.exe" "example/simple_example.yml"
# "$GOPATH/bin/dto-layer-generator.exe" "example/nested_example.yml"
Now have look at the above mentioned files (in the Placeholders section) to see their structs/classes generated from the input ...example.yml
file.
Supported types (using the builtin types of golang, newly added plugins should have a convert map like in the Java plugin where it calls ConvertTypeName
):
string
bool
byte
float32
float64
int
int8
int16
int32
int64
uint
uint8
uint16
uint32
uint64
It is always the simplest to just look at an example. See the java example in dir plugins/java.go
. But it boils down to that you should implement the interface plugins/Plugin
and call the RegisterPlugin()
method with the alias and your new plugin's instance. This registration is best done in the plugin's own file with the init()
func - like in the java example.
After updating code locally you can just call the go install
command in the %gopath%/src/github.com/zero-boilerplate/dto-layer-generator
dir to regenerate the binary into the %GOPATH%/bin
dir.