-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmockGuessType.go
More file actions
118 lines (103 loc) · 2.81 KB
/
mockGuessType.go
File metadata and controls
118 lines (103 loc) · 2.81 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
package mock
import (
"reflect"
"strings"
"github.com/antlabs/mock/city"
"github.com/antlabs/mock/country"
"github.com/antlabs/mock/gid"
"github.com/antlabs/mock/ipv4"
"github.com/antlabs/mock/name"
"github.com/antlabs/mock/timex"
"github.com/antlabs/mock/urlx"
)
const (
URL = "url"
UserName = "username"
NickName = "nickname"
ID = "id"
Time = "time"
fixEmail = "email"
Country = "country"
Ipv4 = "ipv4"
// 省
Province = "province"
// 市
City = "city"
// 区
District = "district"
)
// 猜测string的实际类型
// 第一个返回值是错误, 第二个返回值决定是否继续猜测, false表示不继续猜测
func guessStringType(v reflect.Value, sf reflect.StructField, opt *Options) (err error, ok bool) {
fieldName := sf.Name
// TODO 优化成map查表函数
if strings.Contains(strings.ToLower(fieldName), URL) {
v.SetString(urlx.URL())
return nil, false
}
// 如果字段名是Name,那么就随机生成一个名字
if strings.Contains(strings.ToLower(fieldName), UserName) {
// TODO 需要修改
v.SetString(name.Name(name.WithChinese()))
return nil, false
}
// 昵称
if strings.Contains(strings.ToLower(fieldName), NickName) {
v.SetString(name.Name(name.WithChinese()))
return nil, false
}
// 如果字段名是ID,那么就生成一个uuid
// 忽略大小写搜索id
if strings.Contains(strings.ToLower(fieldName), ID) {
v.SetString(gid.GID())
return nil, false
}
// 如果字段名是Time,那么就随机生成一个时间
if strings.Contains(strings.ToLower(fieldName), Time) {
v.SetString(timex.TimeRFC3339String(timex.WithMin(opt.Min), timex.WithMax(opt.Max)))
return nil, false
}
// 如果字段名是email,那么就随机生成一个email
if strings.Contains(strings.ToLower(fieldName), fixEmail) {
e, err := Email()
if err != nil {
return err, false
}
v.SetString(e)
return nil, false
}
// 如果字段是country, 那么就随机生成一个国家
if strings.Contains(strings.ToLower(fieldName), Country) {
v.SetString(country.Country(opt.CountryChina))
return nil, false
}
// 如果字段是country, 那么就随机生成一个国家
if strings.Contains(strings.ToLower(fieldName), Ipv4) {
v.SetString(ipv4.IPv4())
return nil, false
}
// 省
if strings.Contains(strings.ToLower(fieldName), Province) {
province := city.Province()
v.SetString(province)
if opt.Province == "" {
opt.Province = province
}
return nil, false
}
// 市
if strings.Contains(strings.ToLower(fieldName), City) {
city := city.City(city.WithProvinceName(opt.Province))
v.SetString(city)
if opt.City == "" {
opt.City = city
}
return nil, false
}
// 区
if strings.Contains(strings.ToLower(fieldName), District) {
v.SetString(city.District(city.WithCityName(opt.City)))
return nil, false
}
return nil, true
}