You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

utils.go 1.9 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. package internal
  2. import (
  3. "strings"
  4. )
  5. func makeEtcdLockRequestKey(reqID string) string {
  6. return LOCK_REQUEST_DATA_PREFIX + "/" + reqID
  7. }
  8. func getLockRequestID(key string) string {
  9. return strings.TrimPrefix(key, LOCK_REQUEST_DATA_PREFIX+"/")
  10. }
  11. /*
  12. func parseLockData(str string) (lock lockData, err error) {
  13. sb := strings.Builder{}
  14. var comps []string
  15. escaping := false
  16. for _, ch := range strings.TrimSpace(str) {
  17. if escaping {
  18. if ch == 'n' {
  19. sb.WriteRune('\n')
  20. } else {
  21. sb.WriteRune(ch)
  22. }
  23. escaping = false
  24. continue
  25. }
  26. if ch == '/' {
  27. comps = append(comps, sb.String())
  28. sb.Reset()
  29. } else if ch == '\\' {
  30. escaping = true
  31. } else {
  32. sb.WriteRune(ch)
  33. }
  34. }
  35. comps = append(comps, sb.String())
  36. if len(comps) < 3 {
  37. return lockData{}, fmt.Errorf("string must includes 3 components devided by /")
  38. }
  39. return lockData{
  40. Path: comps[0 : len(comps)-2],
  41. Name: comps[len(comps)-2],
  42. Target: comps[len(comps)-1],
  43. }, nil
  44. }
  45. func lockDataToString(lock lockData) string {
  46. sb := strings.Builder{}
  47. for _, s := range lock.Path {
  48. sb.WriteString(lockDataEncoding(s))
  49. sb.WriteRune('/')
  50. }
  51. sb.WriteString(lockDataEncoding(lock.Name))
  52. sb.WriteRune('/')
  53. sb.WriteString(lockDataEncoding(lock.Target))
  54. return sb.String()
  55. }
  56. func lockDataEncoding(str string) string {
  57. sb := strings.Builder{}
  58. for _, ch := range str {
  59. if ch == '\\' {
  60. sb.WriteString("\\\\")
  61. } else if ch == '/' {
  62. sb.WriteString("\\/")
  63. } else if ch == '\n' {
  64. sb.WriteString("\\n")
  65. } else {
  66. sb.WriteRune(ch)
  67. }
  68. }
  69. return sb.String()
  70. }
  71. func lockDataDecoding(str string) string {
  72. sb := strings.Builder{}
  73. escaping := false
  74. for _, ch := range str {
  75. if escaping {
  76. if ch == 'n' {
  77. sb.WriteRune('\n')
  78. } else {
  79. sb.WriteRune(ch)
  80. }
  81. escaping = false
  82. continue
  83. }
  84. if ch == '\\' {
  85. escaping = true
  86. } else {
  87. sb.WriteRune(ch)
  88. }
  89. }
  90. return sb.String()
  91. }
  92. */

公共库

Contributors (1)