cubefs

Форк
0
91 строка · 2.4 Кб
1
// Copyright 2019 The Prometheus Authors
2
// Licensed under the Apache License, Version 2.0 (the "License");
3
// you may not use this file except in compliance with the License.
4
// You may obtain a copy of the License at
5
//
6
// http://www.apache.org/licenses/LICENSE-2.0
7
//
8
// Unless required by applicable law or agreed to in writing, software
9
// distributed under the License is distributed on an "AS IS" BASIS,
10
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11
// See the License for the specific language governing permissions and
12
// limitations under the License.
13

14
package util
15

16
import (
17
	"strconv"
18
)
19

20
// TODO(mdlayher): util packages are an anti-pattern and this should be moved
21
// somewhere else that is more focused in the future.
22

23
// A ValueParser enables parsing a single string into a variety of data types
24
// in a concise and safe way. The Err method must be invoked after invoking
25
// any other methods to ensure a value was successfully parsed.
26
type ValueParser struct {
27
	v   string
28
	err error
29
}
30

31
// NewValueParser creates a ValueParser using the input string.
32
func NewValueParser(v string) *ValueParser {
33
	return &ValueParser{v: v}
34
}
35

36
// Int interprets the underlying value as an int and returns that value.
37
func (vp *ValueParser) Int() int { return int(vp.int64()) }
38

39
// PInt64 interprets the underlying value as an int64 and returns a pointer to
40
// that value.
41
func (vp *ValueParser) PInt64() *int64 {
42
	if vp.err != nil {
43
		return nil
44
	}
45

46
	v := vp.int64()
47
	return &v
48
}
49

50
// int64 interprets the underlying value as an int64 and returns that value.
51
// TODO: export if/when necessary.
52
func (vp *ValueParser) int64() int64 {
53
	if vp.err != nil {
54
		return 0
55
	}
56

57
	// A base value of zero makes ParseInt infer the correct base using the
58
	// string's prefix, if any.
59
	const base = 0
60
	v, err := strconv.ParseInt(vp.v, base, 64)
61
	if err != nil {
62
		vp.err = err
63
		return 0
64
	}
65

66
	return v
67
}
68

69
// PUInt64 interprets the underlying value as an uint64 and returns a pointer to
70
// that value.
71
func (vp *ValueParser) PUInt64() *uint64 {
72
	if vp.err != nil {
73
		return nil
74
	}
75

76
	// A base value of zero makes ParseInt infer the correct base using the
77
	// string's prefix, if any.
78
	const base = 0
79
	v, err := strconv.ParseUint(vp.v, base, 64)
80
	if err != nil {
81
		vp.err = err
82
		return nil
83
	}
84

85
	return &v
86
}
87

88
// Err returns the last error, if any, encountered by the ValueParser.
89
func (vp *ValueParser) Err() error {
90
	return vp.err
91
}
92

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.