Module: Insika::Server::A2A::Protocol
- Defined in:
- lib/insika/server/a2a/protocol.rb
Overview
JSON-RPC 2.0 envelope. PURE — receives the already deserialized Hash (raw JSON parsing belongs to Server::App). NEVER raises.
Constant Summary collapse
- VERSION =
"2.0"
Class Method Summary collapse
-
.error(id, code, message, data: nil) ⇒ Object
{ jsonrpc:, id:, error: { code:, message:, data? } }.
-
.parse(body) ⇒ Object
-> [:ok, { id:, method:, params: }] | [:error, { id:, code:, message: }].
-
.result(id, result) ⇒ Object
{ jsonrpc:, id:, result: }.
Class Method Details
.error(id, code, message, data: nil) ⇒ Object
{ jsonrpc:, id:, error: { code:, message:, data? } }
32 33 34 35 36 |
# File 'lib/insika/server/a2a/protocol.rb', line 32 def self.error(id, code, , data: nil) err = { code: code, message: } err[:data] = data unless data.nil? { jsonrpc: VERSION, id: id, error: err } end |
.parse(body) ⇒ Object
-> [:ok, { id:, method:, params: }] | [:error, { id:, code:, message: }]
14 15 16 17 18 19 20 21 22 23 24 |
# File 'lib/insika/server/a2a/protocol.rb', line 14 def self.parse(body) return err(nil, Errors::INVALID_REQUEST, "request must be a JSON-RPC object") unless body.is_a?(Hash) id = body["id"] # missing -> nil (we always respond; no notifications in this slice) return err(id, Errors::INVALID_REQUEST, "jsonrpc must be '2.0'") unless body["jsonrpc"] == VERSION method = body["method"] return err(id, Errors::INVALID_REQUEST, "method missing") unless method.is_a?(String) && !method.empty? [:ok, { id: id, method: method, params: body["params"] || {} }] end |
.result(id, result) ⇒ Object
{ jsonrpc:, id:, result: }
27 28 29 |
# File 'lib/insika/server/a2a/protocol.rb', line 27 def self.result(id, result) { jsonrpc: VERSION, id: id, result: result } end |