diff options
| author | Stefan Majewsky <majewsky@gmx.net> | 2018-02-07 19:33:36 +0100 |
|---|---|---|
| committer | Stefan Majewsky <majewsky@gmx.net> | 2018-02-07 19:33:36 +0100 |
| commit | 801b5207dcbf3438e7612e1f7edc9de32ce0780c (patch) | |
| tree | 6f0454ec49bf769e361cfa393290efc68583ca67 /util | |
| parent | 8bddda344201d9f034b5e9c2e9c37a25caeb80cb (diff) | |
| download | go-schwift-801b5207dcbf3438e7612e1f7edc9de32ce0780c.tar.gz | |
switch from reflection to code generation
This allows me to make the API much simpler. More simplification
forthcoming in the following commit; I just want to make a cut since
`make test` is happy right now.
Diffstat (limited to 'util')
| -rwxr-xr-x | util/render_template.go | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/util/render_template.go b/util/render_template.go new file mode 100755 index 0000000..1db8840 --- /dev/null +++ b/util/render_template.go @@ -0,0 +1,63 @@ +///usr/bin/env go run "$0" "$@"; exit $! + +/****************************************************************************** +* +* Copyright 2018 Stefan Majewsky <majewsky@gmx.net> +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +package main + +import ( + "encoding/json" + "fmt" + "html/template" + "io/ioutil" + "os" + "strings" +) + +func main() { + input, err := ioutil.ReadAll(os.Stdin) + failIfError(err) + + sections := strings.SplitN(string(input), "\n---\n", 2) + if len(sections) != 2 { + fail("missing separator between data and template") + } + dataStr, templateStr := sections[0], sections[1] + + data := make(map[string]interface{}) + failIfError(json.Unmarshal([]byte(dataStr), &data)) + + tmpl, err := template.New("tmpl").Parse(templateStr) + failIfError(err) + + failIfError(tmpl.Execute(os.Stdout, data)) +} + +func failIfError(err error) { + if err != nil { + fail(err.Error()) + } +} + +func fail(msg string, args ...interface{}) { + if len(args) > 0 { + msg = fmt.Sprintf(msg, args...) + } + fmt.Fprintln(os.Stderr, msg) + os.Exit(1) +} |
