github.com/twilio/twilio-go@v1.20.1/twiml/twiml.go (about)

     1  package twiml
     2  
     3  import (
     4  	"strings"
     5  
     6  	"github.com/beevik/etree"
     7  )
     8  
     9  type Element interface {
    10  	GetName() string
    11  	GetText() string
    12  	GetAttr() (map[string]string, map[string]string)
    13  	GetInnerElements() []Element
    14  }
    15  
    16  func AddAllVerbs(response *etree.Element, verbs []Element) {
    17  	for _, verb := range verbs {
    18  		verbEl := createElement(verb)
    19  		response.AddChild(verbEl)
    20  	}
    21  }
    22  
    23  func createElement(element Element) *etree.Element {
    24  	el := etree.NewElement(element.GetName())
    25  	optAttr, paramAttr := element.GetAttr()
    26  	addPropertyToElement(el, element.GetText(), optAttr, paramAttr)
    27  	//Loop through all Inner Elements
    28  	if len(element.GetInnerElements()) != 0 {
    29  		for _, innerElement := range element.GetInnerElements() {
    30  			child := createElement(innerElement)
    31  			el.AddChild(child)
    32  		}
    33  	}
    34  	return el
    35  }
    36  
    37  func CreateDocument() (*etree.Document, *etree.Element) {
    38  	doc := etree.NewDocument()
    39  	doc.CreateProcInst("xml", `version="1.0" encoding="UTF-8"`)
    40  	element := doc.CreateElement("Response")
    41  	return doc, element
    42  }
    43  
    44  func ToXML(document *etree.Document) (string, error) {
    45  	return document.WriteToString()
    46  }
    47  
    48  func addPropertyToElement(treeElement *etree.Element, text string, optAttr map[string]string, paramAttr map[string]string) {
    49  	if text != "" {
    50  		treeElement.SetText(text)
    51  	}
    52  
    53  	for _, attr := range []map[string]string{paramAttr, optAttr} {
    54  		for k, v := range attr {
    55  			if v != "" {
    56  				treeElement.CreateAttr(formatAttrKey(k), v)
    57  			}
    58  		}
    59  	}
    60  }
    61  
    62  func formatAttrKey(s string) string {
    63  	return strings.ToLower(string(s[0])) + s[1:]
    64  }