2016-11-04 23:44:49 +03:00
# protoc-gen-gotemplate
:open_file_folder: protocol generator + golang text/template (protobuf)
2016-11-07 12:17:25 +03:00
Generic protocol buffer generator backed by Golang's [text/template ](https://golang.org/pkg/text/template ).
2016-11-09 23:48:26 +03:00
---
This is a generator plugin for the Google Protocol Buffers compiler (`protoc`).
The plugin can generate files based on a template directory using the [Golang's `text/template` ](https://golang.org/pkg/text/template/ ) engine.
2016-11-07 12:17:25 +03:00
## Usage
2016-11-09 23:48:26 +03:00
`protoc-gen-gotemplate` requires a **template_dir** directory *(by default `./templates`)* .
2016-12-10 19:23:59 +03:00
Every files ending with `.tmpl` will be processed and written in the destination folder, following the file hierarchy of the `template_dir` , and removing the `.tmpl` extension.
2016-11-09 23:48:26 +03:00
---
```console
$> 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 a custom `template_dir` or enable `debug` :
```console
$> protoc --gotemplate_out=debug=true,template_dir=/path/to/template/directory:. input.proto
```
---
2016-11-07 12:17:25 +03:00
See [examples ](./examples ).
2016-12-10 19:23:59 +03:00
## Funcmap
2016-12-15 15:40:39 +03:00
This project uses [Masterminds/sprig ](https://github.com/Masterminds/sprig ) library and additional functions to extend the builtin [text/template ](https://golang.org/pkg/text/template ) helpers.
2016-12-10 19:23:59 +03:00
Non-exhaustive list of new helpers:
2016-12-15 15:41:32 +03:00
* **all the functions from [sprig ](https://github.com/Masterminds/sprig )**
2016-12-10 19:23:59 +03:00
* `json`
* `prettyjson`
2016-12-15 15:40:39 +03:00
* `first`
* `last`
See the project helpers for the complete list.
2016-12-10 19:23:59 +03:00
2016-11-07 12:17:25 +03:00
## Install
* Install the **Go** compiler and tools from https://golang.org/doc/install
* Install **protobuf** : `go get -u github.com/golang/protobuf/{proto,protoc-gen-go}`
* Install **protoc-gen-gotemplate** : `go get -u github.com/moul/protoc-gen-gotemplate`
## License
MIT