golang.org/x/tools@v0.21.1-0.20240520172518-788d39e776b1/internal/jsonrpc2_v2/wire.go (about) 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 5 package jsonrpc2 6 7 import ( 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 14 var ( 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 42 const 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. 46 type 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. 56 type 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. 69 func NewError(code int64, message string) error { 70 return &WireError{ 71 Code: code, 72 Message: message, 73 } 74 } 75 76 func (err *WireError) Error() string { 77 return err.Message 78 } 79 80 func (err *WireError) Is(other error) bool { 81 w, ok := other.(*WireError) 82 if !ok { 83 return false 84 } 85 return err.Code == w.Code 86 }