|
|
@@ -12,11 +12,11 @@ import (
|
|
|
type ErrCode int
|
|
|
|
|
|
const (
|
|
|
- ErrParse ErrCode = -32700 // 解析错误: "Parse error"
|
|
|
- ErrInvalidRequest ErrCode = -32600 // 无效请求: "Invalid request"
|
|
|
- ErrMethodNotFound ErrCode = -32601 // 无效方法: "Method not found"
|
|
|
- ErrInvalidParams ErrCode = -32602 // 无效参数: "Invalid params"
|
|
|
- ErrInternal ErrCode = -32603 // 内部错误: "Internal error"
|
|
|
+ ErrParse ErrCode = -32700 // "Parse error"
|
|
|
+ ErrInvalidRequest ErrCode = -32600 // "Invalid request"
|
|
|
+ ErrMethodNotFound ErrCode = -32601 // "Method not found"
|
|
|
+ ErrInvalidParams ErrCode = -32602 // "Invalid params"
|
|
|
+ ErrInternal ErrCode = -32603 // "Internal error"
|
|
|
)
|
|
|
|
|
|
type Error struct {
|
|
|
@@ -28,6 +28,14 @@ func (e Error) Error() string {
|
|
|
return e.Message
|
|
|
}
|
|
|
|
|
|
+var errMessages = map[ErrCode]string{
|
|
|
+ ErrParse: "Parse error", // 解析错误
|
|
|
+ ErrInvalidRequest: "Invalid request", // 无效请求
|
|
|
+ ErrMethodNotFound: "Method not found", // 无效方法
|
|
|
+ ErrInvalidParams: "Invalid params", // 无效参数
|
|
|
+ ErrInternal: "Internal error", // 内部错误
|
|
|
+}
|
|
|
+
|
|
|
type Request struct {
|
|
|
JSONRPC string `json:"jsonrpc"` // 版本号, 固定: "2.0"
|
|
|
Method string `json:"method"` // 调用方法, 执行函数名
|
|
|
@@ -154,32 +162,24 @@ func BuildResult(req *Request, result any) (*Response, error) {
|
|
|
|
|
|
// 构建错误应答
|
|
|
func BuildError(req *Request, code ErrCode, message string) *Response {
|
|
|
- if req.ID == nil { // 通知类型, 不用应答
|
|
|
- return nil
|
|
|
- }
|
|
|
+ id := (*int)(nil)
|
|
|
|
|
|
- wmsg := message
|
|
|
+ if code != ErrParse && req != nil && req.ID != nil {
|
|
|
+ id = req.ID
|
|
|
+ }
|
|
|
|
|
|
- switch code {
|
|
|
- case ErrParse:
|
|
|
- wmsg = "解析错误"
|
|
|
- case ErrInvalidRequest:
|
|
|
- wmsg = "无效请求"
|
|
|
- case ErrMethodNotFound:
|
|
|
- wmsg = "无效调用"
|
|
|
- case ErrInvalidParams:
|
|
|
- wmsg = "无效参数"
|
|
|
- case ErrInternal:
|
|
|
- wmsg = "内部错误"
|
|
|
+ emsg, ok := errMessages[code]
|
|
|
+ if !ok {
|
|
|
+ emsg = message
|
|
|
}
|
|
|
|
|
|
return &Response{
|
|
|
JSONRPC: "2.0",
|
|
|
Error: &Error{
|
|
|
Code: code,
|
|
|
- Message: wmsg,
|
|
|
+ Message: emsg,
|
|
|
},
|
|
|
- ID: req.ID,
|
|
|
+ ID: id,
|
|
|
}
|
|
|
}
|
|
|
|