mirror of https://github.com/golang/go.git
75 lines
2.7 KiB
Go
75 lines
2.7 KiB
Go
// Copyright 2018 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package jsonrpc2
|
|
|
|
import (
|
|
"encoding/json"
|
|
)
|
|
|
|
// This file contains the go forms of the wire specification.
|
|
// see http://www.jsonrpc.org/specification for details
|
|
|
|
var (
|
|
// ErrParse is used when invalid JSON was received by the server.
|
|
ErrParse = NewError(-32700, "JSON RPC parse error")
|
|
// ErrInvalidRequest is used when the JSON sent is not a valid Request object.
|
|
ErrInvalidRequest = NewError(-32600, "JSON RPC invalid request")
|
|
// ErrMethodNotFound should be returned by the handler when the method does
|
|
// not exist / is not available.
|
|
ErrMethodNotFound = NewError(-32601, "JSON RPC method not found")
|
|
// ErrInvalidParams should be returned by the handler when method
|
|
// parameter(s) were invalid.
|
|
ErrInvalidParams = NewError(-32602, "JSON RPC invalid params")
|
|
// ErrInternal indicates a failure to process a call correctly
|
|
ErrInternal = NewError(-32603, "JSON RPC internal error")
|
|
|
|
// The following errors are not part of the json specification, but
|
|
// compliant extensions specific to this implementation.
|
|
|
|
// ErrServerOverloaded is returned when a message was refused due to a
|
|
// server being temporarily unable to accept any new messages.
|
|
ErrServerOverloaded = NewError(-32000, "JSON RPC overloaded")
|
|
// ErrUnknown should be used for all non coded errors.
|
|
ErrUnknown = NewError(-32001, "JSON RPC unknown error")
|
|
)
|
|
|
|
const wireVersion = "2.0"
|
|
|
|
// wireCombined has all the fields of both Request and Response.
|
|
// We can decode this and then work out which it is.
|
|
type wireCombined struct {
|
|
VersionTag string `json:"jsonrpc"`
|
|
ID interface{} `json:"id,omitempty"`
|
|
Method string `json:"method,omitempty"`
|
|
Params json.RawMessage `json:"params,omitempty"`
|
|
Result json.RawMessage `json:"result,omitempty"`
|
|
Error *wireError `json:"error,omitempty"`
|
|
}
|
|
|
|
// wireError represents a structured error in a Response.
|
|
type wireError struct {
|
|
// Code is an error code indicating the type of failure.
|
|
Code int64 `json:"code"`
|
|
// Message is a short description of the error.
|
|
Message string `json:"message"`
|
|
// Data is optional structured data containing additional information about the error.
|
|
Data json.RawMessage `json:"data,omitempty"`
|
|
}
|
|
|
|
// NewError returns an error that will encode on the wire correctly.
|
|
// The standard codes are made available from this package, this function should
|
|
// only be used to build errors for application specific codes as allowed by the
|
|
// specification.
|
|
func NewError(code int64, message string) error {
|
|
return &wireError{
|
|
Code: code,
|
|
Message: message,
|
|
}
|
|
}
|
|
|
|
func (err *wireError) Error() string {
|
|
return err.Message
|
|
}
|