Skip to content

Commit 0b3da29

Browse files
committed
refactor(pathValues): extract pathValues as generic type
1 parent 74f02d5 commit 0b3da29

File tree

1 file changed

+18
-105
lines changed

1 file changed

+18
-105
lines changed

src/serverHandler/pathValues.go

Lines changed: 18 additions & 105 deletions
Original file line numberDiff line numberDiff line change
@@ -4,26 +4,26 @@ package serverHandler
44

55
type prefixFilter func(whole, prefix string) bool
66

7-
// pathInts
7+
// pathValues
88

9-
type pathInts struct {
9+
type pathValues[T any] struct {
1010
path string
11-
values []int
11+
values []T
1212
}
1313

14-
type pathIntsList []pathInts
14+
type pathValuesList[T any] []pathValues[T]
1515

16-
func (list pathIntsList) mergePrefixMatched(mergeWith []int, matchPrefix prefixFilter, refPath string) []int {
17-
var result []int
16+
func (list pathValuesList[T]) mergePrefixMatched(mergeWith []T, matchPrefix prefixFilter, refPath string) []T {
17+
var result []T
1818
if mergeWith != nil {
19-
result = make([]int, len(mergeWith))
19+
result = make([]T, len(mergeWith))
2020
copy(result, mergeWith)
2121
}
2222

2323
for i := range list {
2424
if matchPrefix(refPath, list[i].path) {
2525
if result == nil {
26-
result = []int{}
26+
result = []T{}
2727
}
2828
result = append(result, list[i].values...)
2929
}
@@ -36,8 +36,8 @@ func (list pathIntsList) mergePrefixMatched(mergeWith []int, matchPrefix prefixF
3636
}
3737
}
3838

39-
func (list pathIntsList) filterSuccessor(includeSelf bool, matchPrefix prefixFilter, refPath string) pathIntsList {
40-
var result pathIntsList
39+
func (list pathValuesList[T]) filterSuccessor(includeSelf bool, matchPrefix prefixFilter, refPath string) pathValuesList[T] {
40+
var result pathValuesList[T]
4141

4242
for i := range list {
4343
if !includeSelf && len(list[i].path) == len(refPath) {
@@ -55,107 +55,20 @@ func (list pathIntsList) filterSuccessor(includeSelf bool, matchPrefix prefixFil
5555
}
5656
}
5757

58-
// pathStrings
59-
60-
type pathStrings struct {
61-
path string
62-
values []string
63-
}
64-
65-
type pathStringsList []pathStrings
66-
67-
func (list pathStringsList) mergePrefixMatched(mergeWith []string, matchPrefix prefixFilter, refPath string) []string {
68-
var result []string
69-
if mergeWith != nil {
70-
result = make([]string, len(mergeWith))
71-
copy(result, mergeWith)
72-
}
58+
// pathInts
7359

74-
for i := range list {
75-
if matchPrefix(refPath, list[i].path) {
76-
if result == nil {
77-
result = []string{}
78-
}
79-
result = append(result, list[i].values...)
80-
}
81-
}
60+
type pathInts = pathValues[int]
61+
type pathIntsList = pathValuesList[int]
8262

83-
if mergeWith != nil && len(mergeWith) == len(result) {
84-
return mergeWith
85-
} else {
86-
return result
87-
}
88-
}
89-
90-
func (list pathStringsList) filterSuccessor(includeSelf bool, matchPrefix prefixFilter, refPath string) pathStringsList {
91-
var result pathStringsList
63+
// pathStrings
9264

93-
for i := range list {
94-
if !includeSelf && len(list[i].path) == len(refPath) {
95-
continue
96-
}
97-
if matchPrefix(list[i].path, refPath) {
98-
result = append(result, list[i])
99-
}
100-
}
101-
102-
if len(list) == len(result) {
103-
return list
104-
} else {
105-
return result
106-
}
107-
}
65+
type pathStrings = pathValues[string]
66+
type pathStringsList = pathValuesList[string]
10867

10968
// pathHeaders
11069

111-
type pathHeaders struct {
112-
path string
113-
values [][2]string
114-
}
115-
116-
type pathHeadersList []pathHeaders
117-
118-
func (list pathHeadersList) mergePrefixMatched(mergeWith [][2]string, matchPrefix prefixFilter, refPath string) [][2]string {
119-
var result [][2]string
120-
if mergeWith != nil {
121-
result = make([][2]string, len(mergeWith))
122-
copy(result, mergeWith)
123-
}
124-
125-
for i := range list {
126-
if matchPrefix(refPath, list[i].path) {
127-
if result == nil {
128-
result = [][2]string{}
129-
}
130-
result = append(result, list[i].values...)
131-
}
132-
}
133-
134-
if mergeWith != nil && len(mergeWith) == len(result) {
135-
return mergeWith
136-
} else {
137-
return result
138-
}
139-
}
140-
141-
func (list pathHeadersList) filterSuccessor(includeSelf bool, matchPrefix prefixFilter, refPath string) pathHeadersList {
142-
var result pathHeadersList
143-
144-
for i := range list {
145-
if !includeSelf && len(list[i].path) == len(refPath) {
146-
continue
147-
}
148-
if matchPrefix(list[i].path, refPath) {
149-
result = append(result, list[i])
150-
}
151-
}
152-
153-
if len(list) == len(result) {
154-
return list
155-
} else {
156-
return result
157-
}
158-
}
70+
type pathHeaders = pathValues[[2]string]
71+
type pathHeadersList = pathValuesList[[2]string]
15972

16073
// []string
16174

0 commit comments

Comments
 (0)