github.com/mundipagg/boleto-api@v0.0.0-20230620145841-3f9ec742599f/tmpl/template.go (about) 1 package tmpl 2 3 import ( 4 "bytes" 5 "html/template" 6 ) 7 8 // Builder e o padrao que vai transformar mensagens de entrada em mensagens de saida para os bancos 9 type Builder interface { 10 From(interface{}) Builder 11 To(string) Builder 12 Transform(...string) (string, error) 13 XML() Builder 14 } 15 16 type msgBuilder struct { 17 from interface{} 18 template string 19 head string 20 } 21 22 func (b msgBuilder) From(obj interface{}) Builder { 23 b.from = obj 24 return b 25 } 26 27 func (b msgBuilder) To(template string) Builder { 28 b.template = template 29 return b 30 } 31 func (b msgBuilder) XML() Builder { 32 b.head = `<?xml version="1.0" encoding="UTF-8"?>` 33 return b 34 } 35 36 func (b msgBuilder) Transform(partials ...string) (string, error) { 37 buf := bytes.NewBuffer(nil) 38 t := template.Must(template.New("transform").Funcs(funcMap).Parse(b.template)) 39 for _, p := range partials { 40 t, _ = t.Parse(p) 41 } 42 err := t.ExecuteTemplate(buf, "transform", b.from) 43 if err != nil { 44 return "", err 45 } 46 if b.head != "" { 47 h := b.head 48 b.head = "" 49 return h + buf.String(), nil 50 } 51 52 return buf.String(), nil 53 } 54 55 // New cria um novo builder 56 func New() Builder { 57 return msgBuilder{} 58 }