-
Notifications
You must be signed in to change notification settings - Fork 0
/
types_func.go
135 lines (116 loc) · 3.51 KB
/
types_func.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
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
package f8n
import (
"strconv"
"strings"
"time"
)
// String Реализация интерфейса Stringify.
func (fm FilterMethod) String() string { return string(fm) }
// String Реализация интерфейса Stringify.
func (sd ByDirection) String() string { return string(sd) }
// String Реализация интерфейса Stringify.
func (fto FieldType) String() string { return string(fto) }
// String Реализация интерфейса Stringify.
func (fvo FilterValue) String() string { return fvo.Source }
// IsValueNil Возвращает "Истина" если поле может принимать значения NIL и получено значение фильтрации nil.
func (fvo FilterValue) IsValueNil() (ret bool) {
switch fvo.Type {
case TypeStringNil, TypeUint64Nil, TypeInt64Nil, TypeFloat64Nil, TypeBoolNil, TypeTimeNil:
ret = strings.ToLower(fvo.Source) == keyNilValue
}
return
}
// Value Возвращения значения в типе указанном у значения.
func (fvo FilterValue) Value() (ret any) {
var err error
switch fvo.Type {
case TypeString:
ret = fvo.Source
case TypeUint64:
ret, err = strconv.ParseUint(fvo.Source, 10, 64)
case TypeInt64:
ret, err = strconv.ParseInt(fvo.Source, 10, 64)
case TypeFloat64:
ret, err = strconv.ParseFloat(fvo.Source, 64)
case TypeBool:
ret, err = strconv.ParseBool(fvo.Source)
case TypeTime:
ret, err = time.Parse(time.RFC3339, fvo.Source)
default:
ret = fvo.Source
}
if err != nil {
ret = nil
}
return
}
// Test Тестирование соответствия значения указанному типу.
func (fvo FilterValue) Test() (err error) {
switch fvo.Type {
case TypeUint64:
_, err = strconv.ParseUint(fvo.Source, 10, 64)
case TypeInt64:
_, err = strconv.ParseInt(fvo.Source, 10, 64)
case TypeFloat64:
_, err = strconv.ParseFloat(fvo.Source, 64)
case TypeBool:
_, err = strconv.ParseBool(fvo.Source)
case TypeTime:
_, err = time.Parse(time.RFC3339, fvo.Source)
}
return
}
// Разбор строки в тип направления сортировки.
func parseByDirection(s string) (ret ByDirection) {
switch strings.TrimSpace(strings.ToLower(s)) {
case byAsc.String():
ret = byAsc
case byDesc.String():
ret = byDesc
default:
ret = byUnknown
}
return
}
// Разбор строки в тип фильтрации.
func parseFilterMethod(s string) (ret FilterMethod) {
switch strings.TrimSpace(strings.ToLower(s)) {
case filterEquivalent.String():
ret = filterEquivalent
case filterLessThan.String():
ret = filterLessThan
case filterLessThanOrEquivalent.String():
ret = filterLessThanOrEquivalent
case filterGreaterThan.String():
ret = filterGreaterThan
case filterGreaterThanOrEquivalent.String():
ret = filterGreaterThanOrEquivalent
case filterNotEquivalent.String():
ret = filterNotEquivalent
case filterLikeThan.String():
ret = filterLikeThan
case filterNotLikeThan.String():
ret = filterNotLikeThan
case filterIn.String():
ret = filterIn
case filterNotIn.String():
ret = filterNotIn
default:
ret = filterUnknown
}
return
}
// String Реализация интерфейса Stringify.
func (tmo TieMode) String() string { return string(tmo) }
// Разбор строки в тип режима фильтрации.
func parseTie(s string) (ret TieMode) {
switch strings.TrimSpace(strings.ToLower(s)) {
case tieAnd.String():
ret = tieAnd
case tieOr.String():
ret = tieOr
default:
ret = tieUnknown
}
return
}