-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathvalues.go
More file actions
101 lines (87 loc) · 2.56 KB
/
values.go
File metadata and controls
101 lines (87 loc) · 2.56 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
package request
import (
"fmt"
"net"
"strconv"
"time"
)
// Value - тип строки, с возможностью его преобразования в иные значения
type Value string
// MustInt - функция для преобразования строки значения в целое число
func (rv Value) MustInt() int {
res, err := strconv.Atoi(string(rv))
if err != nil {
return 0
}
return res
}
// MustUint64 - функция для преобразования строки значения в целое число
func (rv Value) MustUint64() uint64 {
res, err := strconv.ParseUint(string(rv), 10, 64)
if err != nil {
res = 0
}
return res
}
// MustInt64 - функция для преобразования строки значения в целое число
func (rv Value) MustInt64() int64 {
res, err := strconv.ParseInt(string(rv), 10, 64)
if err != nil {
res = 0
}
return res
}
// MustBool - функция для преобразования строки значения в булево
func (rv Value) MustBool() bool {
res, err := strconv.ParseBool(string(rv))
if err != nil {
return false
}
return res
}
// String - функция возвращает строковое значение
func (rv Value) String() string {
return string(rv)
}
// MustMAC - функция проверит и вернет MAC адрес в правильном виде или возвратит пустую строку
func (rv Value) MustMAC() string {
hw, err := net.ParseMAC(rv.String())
if err != nil {
return ""
}
itsNullMAC := true
for _, b := range hw {
if b != 0 {
itsNullMAC = false
break
}
}
if itsNullMAC {
return ""
}
return fmt.Sprintf("%02x-%02x-%02x-%02x-%02x-%02x", hw[0], hw[1], hw[2], hw[3], hw[4], hw[5])
}
// MustTime - функция преобразует значение строки к значению time.Time
func (rv Value) MustTime() time.Time {
var (
result time.Time
err error
)
// пробуем RFC3389Nano
if result, err = time.Parse(time.RFC3339Nano, string(rv)); err == nil {
return result
}
// пробуем RFC3389
if result, err = time.Parse(time.RFC3339, string(rv)); err == nil {
return result
}
// пробуем обратный
if result, err = time.Parse("2006-01-02", string(rv)); err == nil {
return result
}
// пробуем преобразовать в int и интепретируем, как timestamp
if value, err := strconv.ParseInt(string(rv), 10, 64); err == nil && value != 0 {
return time.Unix(value, 0)
}
return time.Time{}
}