forked from chanced/openapi
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathnumber.go
53 lines (43 loc) · 1.23 KB
/
number.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
package openapi
import (
"encoding/json"
"math/big"
"strconv"
)
// A Number represents a JSON / YAML number literal.
type Number json.Number
// String returns the literal text of the number.
func (n Number) String() string { return string(n) }
// Float64 returns the number as a float64.
func (n Number) Float64() (float64, error) {
return strconv.ParseFloat(string(n), 64)
}
// Int64 returns the number as an int64.
func (n Number) Int64() (int64, error) {
return strconv.ParseInt(string(n), 10, 64)
}
// BigRat returns a *big.Rat representation of n
func (n Number) BigRat() (*big.Rat, bool) {
return new(big.Rat).SetString(string(n))
}
// BigInt returns a new *big.Int from n
func (n Number) BigInt() (*big.Int, bool) {
return new(big.Int).SetString(string(n), 10)
}
// BigFloat returns a *big.Float
func (n Number) BigFloat(m big.RoundingMode) (*big.Float, error) {
f, _, err := big.ParseFloat(string(n), 10, 256, m)
return f, err
}
// MarshalJSON marshals json
func (n Number) MarshalJSON() ([]byte, error) { return []byte(n), nil }
// UnmarshalJSON unmarshals json
func (n *Number) UnmarshalJSON(data []byte) error {
var jn json.Number
err := json.Unmarshal(data, &jn)
if err != nil {
return err
}
*n = Number(jn)
return nil
}