...
1
2
3 package opt
4
5 import (
6 "fmt"
7
8 "github.com/mailru/easyjson/jlexer"
9 "github.com/mailru/easyjson/jwriter"
10 )
11
12
13
14
15 type Float64 struct {
16 V float64
17 Defined bool
18 }
19
20
21 func OFloat64(v float64) Float64 {
22 return Float64{V: v, Defined: true}
23 }
24
25
26 func (v Float64) Get(deflt float64) float64 {
27 if !v.Defined {
28 return deflt
29 }
30 return v.V
31 }
32
33
34 func (v Float64) MarshalEasyJSON(w *jwriter.Writer) {
35 if v.Defined {
36 w.Float64(v.V)
37 } else {
38 w.RawString("null")
39 }
40 }
41
42
43 func (v *Float64) UnmarshalEasyJSON(l *jlexer.Lexer) {
44 if l.IsNull() {
45 l.Skip()
46 *v = Float64{}
47 } else {
48 v.V = l.Float64()
49 v.Defined = true
50 }
51 }
52
53
54 func (v Float64) MarshalJSON() ([]byte, error) {
55 w := jwriter.Writer{}
56 v.MarshalEasyJSON(&w)
57 return w.Buffer.BuildBytes(), w.Error
58 }
59
60
61 func (v *Float64) UnmarshalJSON(data []byte) error {
62 l := jlexer.Lexer{Data: data}
63 v.UnmarshalEasyJSON(&l)
64 return l.Error()
65 }
66
67
68
69 func (v Float64) IsDefined() bool {
70 return v.Defined
71 }
72
73
74 func (v Float64) String() string {
75 if !v.Defined {
76 return "<undefined>"
77 }
78 return fmt.Sprint(v.V)
79 }
80
View as plain text