forked from mijia/modelq
-
Notifications
You must be signed in to change notification settings - Fork 0
/
option.go
132 lines (103 loc) · 2.5 KB
/
option.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
package gmq
import (
"errors"
"time"
)
// Tried to use option type for nullable columns, but found that may be a problem for json encoding
// Will not use this for now
var (
ErrOptionIsNone = errors.New("Option is not valid.")
)
type Option interface {
IsDefined() bool
}
type OptionInt interface {
Option
Get() (int, error)
}
func SomeInt(n int) OptionInt { return _OptionInt{n, true} }
func NoneInt() OptionInt { return _OptionInt{0, false} }
type OptionInt64 interface {
Option
Get() (int64, error)
}
func SomeInt64(n int64) OptionInt64 { return _OptionInt64{n, true} }
func NoneInt64() OptionInt64 { return _OptionInt64{0, false} }
type OptionString interface {
Option
Get() (string, error)
}
func SomeString(n string) OptionString { return _OptionString{n, true} }
func NoneString() OptionString { return _OptionString{"", false} }
type OptionTime interface {
Option
Get() (time.Time, error)
}
func SomeTime(n time.Time) OptionTime { return _OptionTime{n, true} }
func NoneTime() OptionTime { return _OptionTime{time.Now(), false} }
type OptionFloat64 interface {
Option
Get() (float64, error)
}
func SomeFloat64(n float64) OptionFloat64 { return _OptionFloat64{n, true} }
func NoneFloat64() OptionFloat64 { return _OptionFloat64{0, false} }
type _OptionInt struct {
value int
valid bool
}
func (o _OptionInt) Get() (int, error) {
if o.IsDefined() {
return o.value, nil
} else {
return 0, ErrOptionIsNone
}
}
func (o _OptionInt) IsDefined() bool { return o.valid }
type _OptionInt64 struct {
value int64
valid bool
}
func (o _OptionInt64) Get() (int64, error) {
if o.IsDefined() {
return o.value, nil
} else {
return 0, ErrOptionIsNone
}
}
func (o _OptionInt64) IsDefined() bool { return o.valid }
type _OptionFloat64 struct {
value float64
valid bool
}
func (o _OptionFloat64) Get() (float64, error) {
if o.IsDefined() {
return o.value, nil
} else {
return 0, ErrOptionIsNone
}
}
func (o _OptionFloat64) IsDefined() bool { return o.valid }
type _OptionString struct {
value string
valid bool
}
func (o _OptionString) Get() (string, error) {
if o.IsDefined() {
return o.value, nil
} else {
return "", ErrOptionIsNone
}
}
func (o _OptionString) IsDefined() bool { return o.valid }
type _OptionTime struct {
value time.Time
valid bool
}
func (o _OptionTime) Get() (time.Time, error) {
if o.IsDefined() {
return o.value, nil
} else {
return time.Now(), ErrOptionIsNone
}
}
func (o _OptionTime) IsDefined() bool { return o.valid }