misc.go 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. package gofakeit
  2. import (
  3. "math/rand"
  4. "github.com/brianvoe/gofakeit/data"
  5. )
  6. const hashtag = '#'
  7. const questionmark = '?'
  8. // Check if in lib
  9. func dataCheck(dataVal []string) bool {
  10. var checkOk bool
  11. if len(dataVal) == 2 {
  12. _, checkOk = data.Data[dataVal[0]]
  13. if checkOk {
  14. _, checkOk = data.Data[dataVal[0]][dataVal[1]]
  15. }
  16. }
  17. return checkOk
  18. }
  19. // Check if in lib
  20. func intDataCheck(dataVal []string) bool {
  21. if len(dataVal) != 2 {
  22. return false
  23. }
  24. _, checkOk := data.IntData[dataVal[0]]
  25. if checkOk {
  26. _, checkOk = data.IntData[dataVal[0]][dataVal[1]]
  27. }
  28. return checkOk
  29. }
  30. // Get Random Value
  31. func getRandValue(dataVal []string) string {
  32. if !dataCheck(dataVal) {
  33. return ""
  34. }
  35. return data.Data[dataVal[0]][dataVal[1]][rand.Intn(len(data.Data[dataVal[0]][dataVal[1]]))]
  36. }
  37. // Get Random Integer Value
  38. func getRandIntValue(dataVal []string) int {
  39. if !intDataCheck(dataVal) {
  40. return 0
  41. }
  42. return data.IntData[dataVal[0]][dataVal[1]][rand.Intn(len(data.IntData[dataVal[0]][dataVal[1]]))]
  43. }
  44. // Replace # with numbers
  45. func replaceWithNumbers(str string) string {
  46. if str == "" {
  47. return str
  48. }
  49. bytestr := []byte(str)
  50. for i := 0; i < len(bytestr); i++ {
  51. if bytestr[i] == hashtag {
  52. bytestr[i] = byte(randDigit())
  53. }
  54. }
  55. if bytestr[0] == '0' {
  56. bytestr[0] = byte(rand.Intn(8)+1) + '0'
  57. }
  58. return string(bytestr)
  59. }
  60. // Replace ? with ASCII lowercase letters
  61. func replaceWithLetters(str string) string {
  62. if str == "" {
  63. return str
  64. }
  65. bytestr := []byte(str)
  66. for i := 0; i < len(bytestr); i++ {
  67. if bytestr[i] == questionmark {
  68. bytestr[i] = byte(randLetter())
  69. }
  70. }
  71. return string(bytestr)
  72. }
  73. // Generate random lowercase ASCII letter
  74. func randLetter() rune {
  75. return rune(byte(rand.Intn(26)) + 'a')
  76. }
  77. // Generate random ASCII digit
  78. func randDigit() rune {
  79. return rune(byte(rand.Intn(10)) + '0')
  80. }
  81. // Generate random integer between min and max
  82. func randIntRange(min, max int) int {
  83. if min == max {
  84. return min
  85. }
  86. return rand.Intn((max+1)-min) + min
  87. }
  88. func randFloat32Range(min, max float32) float32 {
  89. if min == max {
  90. return min
  91. }
  92. return rand.Float32()*(max-min) + min
  93. }
  94. func randFloat64Range(min, max float64) float64 {
  95. if min == max {
  96. return min
  97. }
  98. return rand.Float64()*(max-min) + min
  99. }
  100. // Categories will return a map string array of available data categories and sub categories
  101. func Categories() map[string][]string {
  102. types := make(map[string][]string)
  103. for category, subCategoriesMap := range data.Data {
  104. subCategories := make([]string, 0)
  105. for subType := range subCategoriesMap {
  106. subCategories = append(subCategories, subType)
  107. }
  108. types[category] = subCategories
  109. }
  110. return types
  111. }