GoPLS Viewer

Home|gopls/internal/jsonrpc2_v2/wire.go
1// Copyright 2018 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5package jsonrpc2
6
7import (
8    "encoding/json"
9)
10
11// This file contains the go forms of the wire specification.
12// see http://www.jsonrpc.org/specification for details
13
14var (
15    // ErrParse is used when invalid JSON was received by the server.
16    ErrParse = NewError(-32700"JSON RPC parse error")
17    // ErrInvalidRequest is used when the JSON sent is not a valid Request object.
18    ErrInvalidRequest = NewError(-32600"JSON RPC invalid request")
19    // ErrMethodNotFound should be returned by the handler when the method does
20    // not exist / is not available.
21    ErrMethodNotFound = NewError(-32601"JSON RPC method not found")
22    // ErrInvalidParams should be returned by the handler when method
23    // parameter(s) were invalid.
24    ErrInvalidParams = NewError(-32602"JSON RPC invalid params")
25    // ErrInternal indicates a failure to process a call correctly
26    ErrInternal = NewError(-32603"JSON RPC internal error")
27
28    // The following errors are not part of the json specification, but
29    // compliant extensions specific to this implementation.
30
31    // ErrServerOverloaded is returned when a message was refused due to a
32    // server being temporarily unable to accept any new messages.
33    ErrServerOverloaded = NewError(-32000"JSON RPC overloaded")
34    // ErrUnknown should be used for all non coded errors.
35    ErrUnknown = NewError(-32001"JSON RPC unknown error")
36    // ErrServerClosing is returned for calls that arrive while the server is closing.
37    ErrServerClosing = NewError(-32002"JSON RPC server is closing")
38    // ErrClientClosing is a dummy error returned for calls initiated while the client is closing.
39    ErrClientClosing = NewError(-32003"JSON RPC client is closing")
40)
41
42const wireVersion = "2.0"
43
44// wireCombined has all the fields of both Request and Response.
45// We can decode this and then work out which it is.
46type wireCombined struct {
47    VersionTag string          `json:"jsonrpc"`
48    ID         interface{}     `json:"id,omitempty"`
49    Method     string          `json:"method,omitempty"`
50    Params     json.RawMessage `json:"params,omitempty"`
51    Result     json.RawMessage `json:"result,omitempty"`
52    Error      *wireError      `json:"error,omitempty"`
53}
54
55// wireError represents a structured error in a Response.
56type wireError struct {
57    // Code is an error code indicating the type of failure.
58    Code int64 `json:"code"`
59    // Message is a short description of the error.
60    Message string `json:"message"`
61    // Data is optional structured data containing additional information about the error.
62    Data json.RawMessage `json:"data,omitempty"`
63}
64
65// NewError returns an error that will encode on the wire correctly.
66// The standard codes are made available from this package, this function should
67// only be used to build errors for application specific codes as allowed by the
68// specification.
69func NewError(code int64message stringerror {
70    return &wireError{
71        Code:    code,
72        Messagemessage,
73    }
74}
75
76func (err *wireErrorError() string {
77    return err.Message
78}
79
80func (err *wireErrorIs(other errorbool {
81    wok := other.(*wireError)
82    if !ok {
83        return false
84    }
85    return err.Code == w.Code
86}
87
MembersX
wireCombined.Result
wireCombined.Error
wireError
wireError.Message
wireError.Data
NewError.message
wireError.Is.err
wireCombined.ID
wireError.Is.other
wireCombined.Params
wireCombined.Method
NewError.code
wireError.Error.err
wireCombined.VersionTag
wireCombined
wireError.Code
NewError
wireError.Error
wireError.Is
wireVersion
Members
X