talos

Форк
0
/
argsbuilder_interface.go 
56 строк · 1.4 Кб
1
// This Source Code Form is subject to the terms of the Mozilla Public
2
// License, v. 2.0. If a copy of the MPL was not distributed with this
3
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
4

5
package argsbuilder
6

7
// MergePolicy defines args builder args merging policy.
8
type MergePolicy int
9

10
const (
11
	// MergeOverwrite overwrite arg when merging.
12
	MergeOverwrite = iota
13
	// MergeAdditive concat argument lists.
14
	MergeAdditive
15
	// MergeDenied fail merge if another object has the arg defined.
16
	MergeDenied
17
)
18

19
// MergePolicies merge policy map.
20
type MergePolicies map[string]MergePolicy
21

22
// MergeOptions provides optional arguments for merge.
23
type MergeOptions struct {
24
	Policies MergePolicies
25
}
26

27
// MergeOption optional merge argument setter.
28
type MergeOption func(*MergeOptions)
29

30
// WithMergePolicies set merge policies during merge.
31
func WithMergePolicies(policies MergePolicies) MergeOption {
32
	return func(o *MergeOptions) {
33
		o.Policies = policies
34
	}
35
}
36

37
// WithDenyList disable merge for all keys in map.
38
func WithDenyList(denyList Args) MergeOption {
39
	return func(o *MergeOptions) {
40
		if o.Policies == nil {
41
			o.Policies = MergePolicies{}
42
		}
43

44
		for k := range denyList {
45
			o.Policies[k] = MergeDenied
46
		}
47
	}
48
}
49

50
// ArgsBuilder defines the requirements to build and manage a set of args.
51
type ArgsBuilder interface {
52
	MustMerge(Args, ...MergeOption)
53
	Merge(Args, ...MergeOption) error
54
	Set(string, string) ArgsBuilder
55
	Args() []string
56
}
57

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

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

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

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