forked from admpub/nging
-
Notifications
You must be signed in to change notification settings - Fork 0
/
errors.go
182 lines (146 loc) · 4.23 KB
/
errors.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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
/*
Nging is a toolbox for webmasters
Copyright (C) 2018-present Wenhui Shen <swh@admpub.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published
by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package common
import (
"encoding/gob"
"errors"
"strings"
"github.com/webx-top/echo"
"github.com/webx-top/echo/code"
)
func init() {
gob.Register(&Success{})
}
var (
// - JSON
//ErrUserNotLoggedIn 用户未登录
ErrUserNotLoggedIn = echo.NewError(`User not logged in`, code.Unauthenticated)
//ErrUserNotFound 用户不存在
ErrUserNotFound = echo.NewError(`User does not exist`, code.UserNotFound)
//ErrUserNoPerm 用户无权限
ErrUserNoPerm = echo.NewError(`User has no permission`, code.NonPrivileged)
//ErrUserDisabled 用户已被禁用
ErrUserDisabled = echo.NewError(`User has been disabled`, code.UserDisabled)
//ErrBalanceNoEnough 余额不足
ErrBalanceNoEnough = echo.NewError(`Balance is not enough`, code.BalanceNoEnough)
//ErrCaptcha 验证码错误
ErrCaptcha = echo.NewError(`Captcha is incorrect`, code.CaptchaError)
// - Operation
//ErrRepeatOperation 重复操作
ErrRepeatOperation = echo.NewError(`Repeat operation`, code.RepeatOperation)
//ErrUnsupported 不支持
ErrUnsupported = echo.NewError(`Unsupported`, code.Unsupported)
//ErrOperationTimeout 操作超时
ErrOperationTimeout = echo.NewError(`Operation timeout`, code.OperationTimeout)
//ErrOperationFail 操作失败
ErrOperationFail = echo.NewError(`Operation fail`, code.Failure)
// - HTTP
//ErrResponseFormatError 响应格式错误
ErrResponseFormatError = echo.NewError(`Response format error`, code.AbnormalResponse)
//ErrRequestTimeout 提交超时
ErrRequestTimeout = echo.NewError(`Request timeout`, code.RequestTimeout)
//ErrRequestFail 提交失败
ErrRequestFail = echo.NewError(`Request fail`, code.RequestFailure)
// - Watcher
// ErrIgnoreConfigChange 忽略配置文件更改
ErrIgnoreConfigChange = errors.New(`Ignore configuration file changes`)
// - Checker
// ErrNext 需要继续向下检查
ErrNext = errors.New("Next")
)
// DefaultNopMessage 默认空消息
var DefaultNopMessage Messager = &NopMessage{}
// Errors 多个错误信息
type Errors []error
func (e Errors) Error() string {
s := make([]string, len(e))
for k, v := range e {
s[k] = v.Error()
}
return strings.Join(s, "\n")
}
func (e Errors) String() string {
return e.Error()
}
// NopMessage 空消息
type NopMessage struct {
}
// Error 错误信息
func (n *NopMessage) Error() string {
return ``
}
// Success 成功信息
func (n *NopMessage) Success() string {
return ``
}
// String 信息字符串
func (n *NopMessage) String() string {
return ``
}
// Messager 信息接口
type Messager interface {
Successor
error
}
// IsMessage 判断err是否为Message
func IsMessage(err interface{}) bool {
_, y := err.(Messager)
return y
}
// Message 获取err中的信息接口
func Message(err interface{}) Messager {
if v, y := err.(Messager); y {
return v
}
return DefaultNopMessage
}
// NewOk 创建成功信息
func NewOk(v string) Successor {
return &Success{
Value: v,
}
}
// Success 成功信息
type Success struct {
Value string
}
// Success 成功信息
func (s *Success) Success() string {
return s.Value
}
func (s *Success) String() string {
return s.Value
}
// Successor 成功信息接口
type Successor interface {
Success() string
}
// IsError 是否是错误信息
func IsError(err interface{}) bool {
_, y := err.(error)
return y
}
// IsOk 是否是成功信息
func IsOk(err interface{}) bool {
_, y := err.(Successor)
return y
}
// OkString 获取成功信息
func OkString(err interface{}) string {
if v, y := err.(Successor); y {
return v.Success()
}
return ``
}