-
Notifications
You must be signed in to change notification settings - Fork 0
/
util.go
119 lines (100 loc) · 2.32 KB
/
util.go
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
119
package main
import (
"go/ast"
"go/token"
"os"
"path/filepath"
"sort"
"strings"
"github.com/huaweicloud/terraform-provider-huaweicloud/huaweicloud/config"
)
type CloudUri struct {
url string
httpMethod string
resourceType string
operationId string
filePath string
serviceCatalog config.ServiceCatalog
}
func sliceContains(s []string, e string) bool {
for _, a := range s {
if a == e {
return true
}
}
return false
}
func findAllFunc(f *ast.File, fset *token.FileSet) []*ast.FuncDecl {
funcs := []*ast.FuncDecl{}
for _, d := range f.Decls {
if fn, isFn := d.(*ast.FuncDecl); isFn {
funcs = append(funcs, fn)
}
}
return funcs
}
func removeDuplicateValues(array []string) []string {
keys := make(map[string]bool)
list := []string{}
for _, entry := range array {
if _, value := keys[entry]; !value {
keys[entry] = true
list = append(list, entry)
}
}
return list
}
func removeDuplicateCloudUri(array []CloudUri) []CloudUri {
keys := make(map[string]CloudUri)
list := []string{}
rt := []CloudUri{}
for _, v := range array {
entry := v.url + v.httpMethod + v.resourceType
entry = strings.ToLower(entry)
if _, ok := keys[entry]; !ok {
keys[entry] = v
list = append(list, entry)
}
}
sort.Strings(list)
for i := 0; i < len(list); i++ {
item := list[i]
rt = append(rt, keys[item])
}
return rt
}
func filePathExists(path string) bool {
_, err := os.Stat(path) //os.Stat获取文件信息
if err != nil {
if os.IsExist(err) {
return true
}
return false
}
return true
}
func mapToStandardHttpMethod(httpMethod string) string {
if strings.HasPrefix(httpMethod, "DeleteWith") {
return "delete"
}
return strings.ToLower(httpMethod)
}
func getCatalogFromName(fileName string) (*config.ServiceCatalog, string) {
var catalog string
baseName := filepath.Base(fileName)
parts := strings.Split(baseName, "_")
length := len(parts)
if parts[0] == "data" && length >= 4 {
catalog = parts[3]
}
if parts[0] == "resource" && length >= 3 {
catalog = parts[2]
}
if serviceCategory := parseEndPointByClient(catalog); serviceCategory != nil {
return serviceCategory, serviceCategory.Product
}
return nil, strings.ToUpper(catalog)
}
func parseEndPointByClient(clientName string) *config.ServiceCatalog {
return config.GetServiceCatalog(clientName)
}