utils.go 883 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. package gin
  2. import (
  3. "encoding/xml"
  4. "reflect"
  5. "runtime"
  6. )
  7. type H map[string]interface{}
  8. // Allows type H to be used with xml.Marshal
  9. func (h H) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
  10. start.Name = xml.Name{
  11. Space: "",
  12. Local: "map",
  13. }
  14. if err := e.EncodeToken(start); err != nil {
  15. return err
  16. }
  17. for key, value := range h {
  18. elem := xml.StartElement{
  19. Name: xml.Name{Space: "", Local: key},
  20. Attr: []xml.Attr{},
  21. }
  22. if err := e.EncodeElement(value, elem); err != nil {
  23. return err
  24. }
  25. }
  26. if err := e.EncodeToken(xml.EndElement{Name: start.Name}); err != nil {
  27. return err
  28. }
  29. return nil
  30. }
  31. func filterFlags(content string) string {
  32. for i, a := range content {
  33. if a == ' ' || a == ';' {
  34. return content[:i]
  35. }
  36. }
  37. return content
  38. }
  39. func funcName(f interface{}) string {
  40. return runtime.FuncForPC(reflect.ValueOf(f).Pointer()).Name()
  41. }