-
Notifications
You must be signed in to change notification settings - Fork 9
/
types.go
41 lines (33 loc) · 958 Bytes
/
types.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
// Copyright 2022 Namespace Labs Inc; All rights reserved.
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
package knobs
import (
"github.com/spf13/pflag"
"google.golang.org/protobuf/types/known/anypb"
"google.golang.org/protobuf/types/known/wrapperspb"
)
type Value interface {
get() any
decode(*anypb.Any) (any, error)
setupFlags(flags *pflag.FlagSet, name, description string)
}
func BoolValue[V bool](defaultValue bool) Value {
return &boolv{value: defaultValue}
}
type boolv struct {
value bool
}
func (b *boolv) get() any {
return b.value
}
func (b *boolv) decode(any *anypb.Any) (any, error) {
bv := &wrapperspb.BoolValue{}
if err := any.UnmarshalTo(bv); err != nil {
return nil, err
}
return bv.Value, nil
}
func (b *boolv) setupFlags(flags *pflag.FlagSet, name, description string) {
flags.BoolVar(&b.value, name, b.value, description)
}