1 Star 0 Fork 0

sy_183 / go-common

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
state.go 1.46 KB
一键复制 编辑 原始数据 按行查看 历史
sy_183 提交于 2023-02-27 19:27 . 纵横视频存储服务v1.1
package lifecycle
import (
"strings"
)
const (
StateClosed = State(iota)
StateStarting
StateRunning
StateClosing
)
type StateInfo struct {
State State
UpperName string
LowerName string
}
var StateInfos = []StateInfo{
{State: StateClosed, UpperName: "CLOSED"},
{State: StateStarting, UpperName: "STARTING"},
{State: StateRunning, UpperName: "RUNNING"},
{State: StateClosing, UpperName: "CLOSING"},
}
func init() {
for i := range StateInfos {
StateInfos[i].LowerName = strings.ToLower(StateInfos[i].UpperName)
}
}
type State int
func (s State) Closed() bool {
return s == StateClosed
}
func (s State) Starting() bool {
return s == StateStarting
}
func (s State) Running() bool {
return s == StateRunning
}
func (s State) Closing() bool {
return s == StateClosing
}
func (s State) String() string {
for _, info := range StateInfos {
if s == info.State {
return info.UpperName
}
}
return "UNKNOWN"
}
func (s State) check() {
if s > StateClosing {
panic(NewUnknownStateError("", s))
}
}
func (s *State) ToClosed() {
s.check()
*s = StateClosed
}
func (s *State) ToStarting() {
s.check()
if s.Running() {
panic(NewStateNotAllowSwitchError("", StateRunning.String(), StateStarting.String()))
}
*s = StateStarting
}
func (s *State) ToRunning() {
s.check()
*s = StateRunning
}
func (s *State) ToClosing() {
s.check()
if s.Closed() {
panic(NewStateNotAllowSwitchError("", StateClosed.String(), StateClosing.String()))
}
*s = StateClosing
}
1
https://gitee.com/sy_183/go-common.git
git@gitee.com:sy_183/go-common.git
sy_183
go-common
go-common
v1.0.4

搜索帮助