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  }