-
Notifications
You must be signed in to change notification settings - Fork 0
/
environment.go
113 lines (89 loc) · 4.07 KB
/
environment.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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
// Copyright 2020 The ZKits Project 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 environment
const (
// Development is the development environment, which is also the default
// runtime environment.
Development Env = "development"
// Testing is a test environment, usually used for initial quality acceptance.
Testing Env = "testing"
// Prerelease is a pre release environment, usually used for grayscale
// testing or quality acceptance.
Prerelease Env = "prerelease"
// Production is the production environment and the final deployment
// environment of the application.
Production Env = "production"
)
// The global default runtime environment manager.
var defaultManager = New()
// SetDefaultManager sets the global default runtime environment manager instance.
func SetDefaultManager(m Manager) {
defaultManager = m
}
// GetDefaultManager returns the global default runtime environment manager instance.
func GetDefaultManager() Manager {
return defaultManager
}
// Env type defines the runtime environment.
type Env string
// String method returns the current runtime environment string.
func (e Env) String() string { return string(e) }
// Is method returns whether the given runtime environment is equal to the
// current runtime environment.
func (e Env) Is(env Env) bool { return e == env }
// In method returns whether the current runtime environment is in the given
// runtime environment list.
func (e Env) In(envs []Env) bool {
for i, j := 0, len(envs); i < j; i++ {
if e.Is(envs[i]) {
return true
}
}
return false
}
// Get returns the current runtime environment.
func Get() Env { return defaultManager.Get() }
// Is returns whether the given runtime environment is equal to the
// current runtime environment.
func Is(env Env) bool { return defaultManager.Is(env) }
// In returns whether the current runtime environment is in the given
// runtime environment list.
func In(envs []Env) bool { return defaultManager.In(envs) }
// Register registers a custom runtime environment.
// If you want to add a custom environment, this method must be called
// before the Set() method.
func Register(env Env) { defaultManager.Register(env) }
// Registered determines whether the given runtime environment is already registered.
func Registered(env Env) bool { return defaultManager.Registered(env) }
// Lock locks the current runtime environment.
// After locking, the current runtime environment cannot be changed.
func Lock() { defaultManager.Lock() }
// Locked returns whether the current runtime environment is locked.
func Locked() bool { return defaultManager.Locked() }
// Set sets the current runtime environment.
// If the given runtime environment is not supported, ErrInvalidEnv error is returned.
// If the current runtime environment is locked, ErrLocked error is returned.
func Set(env Env) error { return defaultManager.Set(env) }
// SetAndLock sets and locks the current runtime environment.
// If the runtime environment settings fail, they are not locked.
func SetAndLock(env Env) error { return defaultManager.SetAndLock(env) }
// Listen adds a given runtime environment listener.
// If the given listener is nil, ignore it.
func Listen(listener Listener) { defaultManager.Listen(listener) }
// UnListen removes and returns to the recently added listener.
// If there is no listener to be removed, nil is returned.
func UnListen() Listener { return defaultManager.UnListen() }
// UnListenAll removes and returns all added listeners.
// If there is no listener to be removed, nil is returned.
func UnListenAll() []Listener { return defaultManager.UnListenAll() }