-
Notifications
You must be signed in to change notification settings - Fork 837
/
Copy pathitem_limiter.go
61 lines (51 loc) · 2 KB
/
item_limiter.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
54
55
56
57
58
59
60
61
/*
* Copyright 2023 CloudWeGo Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package limiter
import (
"github.com/cloudwego/configmanager/iface"
"github.com/cloudwego/configmanager/util"
)
var _ iface.ConfigValueItem = (*LimiterConfig)(nil)
// TypeLimiter serves as itemKey in ConfigValueImpl
const TypeLimiter iface.ItemType = "limiter_config"
var defaultLimiterConfig = &LimiterConfig{}
// LimiterConfig represents the configuration for kitex server limiter
// zero value means no limit.
type LimiterConfig struct {
ConnectionLimit int64 `json:"connection_limit"`
QPSLimit int64 `json:"qps_limit"`
}
// NewLimiterConfig decodes json bytes into a newly allocated LimiterConfig object
var NewLimiterConfig = util.JsonInitializer(func() iface.ConfigValueItem {
return &LimiterConfig{}
})
// CopyDefaultLimitConfig copies the default limiter configuration and returns a new instance of it
func CopyDefaultLimitConfig() iface.ConfigValueItem {
return defaultLimiterConfig.DeepCopy()
}
// DeepCopy makes a deep copy of LimiterConfig struct and returns a new instance of iface.ConfigValueItem
func (l *LimiterConfig) DeepCopy() iface.ConfigValueItem {
return &LimiterConfig{
ConnectionLimit: l.ConnectionLimit,
QPSLimit: l.QPSLimit,
}
}
// EqualsTo determines if the LimiterConfig is equal to the given ConfigValueItem.
func (l *LimiterConfig) EqualsTo(item iface.ConfigValueItem) bool {
o := item.(*LimiterConfig)
return l.ConnectionLimit == o.ConnectionLimit &&
l.QPSLimit == o.QPSLimit
}