forked from TrueCloudLab/neoneo-go
6ee919747f
Close #1509
66 lines
1.8 KiB
Go
66 lines
1.8 KiB
Go
package response
|
|
|
|
import (
|
|
"encoding/json"
|
|
)
|
|
|
|
// Header is a generic JSON-RPC 2.0 response header (ID and JSON-RPC version).
|
|
type Header struct {
|
|
ID json.RawMessage `json:"id"`
|
|
JSONRPC string `json:"jsonrpc"`
|
|
}
|
|
|
|
// HeaderAndError adds an Error (that can be empty) to the Header, it's used
|
|
// to construct type-specific responses.
|
|
type HeaderAndError struct {
|
|
Header
|
|
Error *Error `json:"error,omitempty"`
|
|
}
|
|
|
|
// Raw represents a standard raw JSON-RPC 2.0
|
|
// response: http://www.jsonrpc.org/specification#response_object.
|
|
type Raw struct {
|
|
HeaderAndError
|
|
Result json.RawMessage `json:"result,omitempty"`
|
|
}
|
|
|
|
// AbstractResult is an interface which represents either single JSON-RPC 2.0 response
|
|
// or batch JSON-RPC 2.0 response.
|
|
type AbstractResult interface {
|
|
RunForErrors(f func(jsonErr *Error))
|
|
}
|
|
|
|
// Abstract represents abstract JSON-RPC 2.0 response, it differs from Raw in
|
|
// that Result field is an interface here.
|
|
type Abstract struct {
|
|
HeaderAndError
|
|
Result interface{} `json:"result,omitempty"`
|
|
}
|
|
|
|
// RunForErrors implements AbstractResult interface.
|
|
func (a Abstract) RunForErrors(f func(jsonErr *Error)) {
|
|
if a.Error != nil {
|
|
f(a.Error)
|
|
}
|
|
}
|
|
|
|
// AbstractBatch represents abstract JSON-RPC 2.0 batch-response.
|
|
type AbstractBatch []Abstract
|
|
|
|
// RunForErrors implements AbstractResult interface.
|
|
func (ab AbstractBatch) RunForErrors(f func(jsonErr *Error)) {
|
|
for _, a := range ab {
|
|
if a.Error != nil {
|
|
f(a.Error)
|
|
}
|
|
}
|
|
}
|
|
|
|
// Notification is a type used to represent wire format of events, they're
|
|
// special in that they look like requests but they don't have IDs and their
|
|
// "method" is actually an event name.
|
|
type Notification struct {
|
|
JSONRPC string `json:"jsonrpc"`
|
|
Event EventID `json:"method"`
|
|
Payload []interface{} `json:"params"`
|
|
}
|