protocol generator + golang text/template (protobuf) Edit
500K+
protoc-gen-gotemplate:open_file_folder: protocol generator + golang text/template (protobuf)
A generic code/script/data generator based on Protobuf.
This project is a generator plugin for the Google Protocol Buffers compiler (protoc).
The plugin parses protobuf files, generates an ast, and walks a local templates directory to generate files using the Golang's text/template engine.
protobuf files are parsed by protocast is generated by protoc-gen-go helpersast is given to Golang's text/template engine for each user template files
protoc-gen-gotemplate requires a template_dir directory (by default ./templates).
Every file ending with .tmpl will be processed and written to the destination folder, following the file hierarchy of the template_dir, and remove the .tmpl extension.
$> ls -R
input.proto templates/doc.txt.tmpl templates/config.json.tmpl
$> protoc --gotemplate_out=. input.proto
$> ls -R
input.proto templates/doc.txt.tmpl templates/config.json.tmpl
doc.txt config.json
You can specify custom options, as follow:
$> protoc --gotemplate_out=debug=true,template_dir=/path/to/template/directory:. input.proto
| Option | Default Value | Accepted Values | Description |
|---|---|---|---|
template_dir | ./template | absolute or relative path | path to look for templates |
destination_dir | . | absolute or relative path | base path to write output |
single-package-mode | false | true or false | if true, protoc won't accept multiple packages to be compiled at once (!= from all), but will support Message lookup across the imported protobuf dependencies |
debug | false | true or false | if true, protoc will generate a more verbose output |
all | false | true or false | if true, protobuf files without Service will also be parsed |
Shipping the templates with your project is very smart and useful when contributing on git-based projects.
Another workflow consists in having a dedicated repository for generic templates which is then versioned and vendored with multiple projects (npm package, golang vendor package, ...)
See examples.
This project uses Masterminds/sprig library and additional functions to extend the builtin text/template helpers.
Non-exhaustive list of new helpers:
addboolFieldExtensioncamelCasecontainsdividefieldMapKeyTypefieldMapValueTypefirstgetEnumValuegetMessageTypegetProtoFilegoNormalizegoTypeWithPackagegoTypegoZeroValuehaskellTypehttpBodyhttpPathhttpPathsAdditionalBindingshttpVerbindexint64FieldExtensionisFieldMapisFieldMessageTimeStampisFieldMessageisFieldRepeatedjsSuffixReservedjsTypejsonkebabCaselastleadingCommentleadingDetachedCommentslowerCamelCaselowerFirstlowerGoNormalizemultiplynamespacedFlowTypeprettyjsonreplaceDictshortTypesnakeCasesplitArraystringFieldExtensionstringMethodOptionsExtensionstringsubtracttrailingCommenttrimstrupperFirsturlHasVarsFromMessageSee the project helpers for the complete list.
go get -u github.com/golang/protobuf/{proto,protoc-gen-go}go get -u moul.io/protoc-gen-gotemplateUsage:
$> docker run --rm -v "$(pwd):$(pwd)" -w "$(pwd)" moul/protoc-gen-gotemplate -I. --gotemplate_out=./output/ ./*.proto
protoc-gen-gotemplateMIT
Content type
Image
Digest
Size
81.3 MB
Last updated
almost 5 years ago
docker pull moul/protoc-gen-gotemplate