utils.go 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. package gin
  2. import (
  3. "encoding/xml"
  4. "path"
  5. )
  6. type H map[string]interface{}
  7. // Allows type H to be used with xml.Marshal
  8. func (h H) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
  9. start.Name = xml.Name{
  10. Space: "",
  11. Local: "map",
  12. }
  13. if err := e.EncodeToken(start); err != nil {
  14. return err
  15. }
  16. for key, value := range h {
  17. elem := xml.StartElement{
  18. Name: xml.Name{Space: "", Local: key},
  19. Attr: []xml.Attr{},
  20. }
  21. if err := e.EncodeElement(value, elem); err != nil {
  22. return err
  23. }
  24. }
  25. if err := e.EncodeToken(xml.EndElement{Name: start.Name}); err != nil {
  26. return err
  27. }
  28. return nil
  29. }
  30. func joinGroupPath(elems ...string) string {
  31. joined := path.Join(elems...)
  32. lastComponent := elems[len(elems)-1]
  33. // Append a '/' if the last component had one, but only if it's not there already
  34. if len(lastComponent) > 0 && lastComponent[len(lastComponent)-1] == '/' && joined[len(joined)-1] != '/' {
  35. return joined + "/"
  36. }
  37. return joined
  38. }
  39. func filterFlags(content string) string {
  40. for i, a := range content {
  41. if a == ' ' || a == ';' {
  42. return content[:i]
  43. }
  44. }
  45. return content
  46. }