Class: A2A::Faraday::Middleware::REST::Response
- Inherits:
-
Faraday::Middleware
- Object
- Faraday::Middleware
- A2A::Faraday::Middleware::REST::Response
- Defined in:
- lib/a2a/faraday/middleware/rest/response.rb
Overview
Faraday response middleware for the A2A HTTP+JSON/REST binding.
Unlike the JSON-RPC binding, REST responses have no envelope —the body IS the result directly. Errors are signaled via HTTP status codes with application/problem+json bodies.
Reads env.request.context to determine which Schema class to instantiate. If no operation is set, passes through.
Instance Method Summary collapse
Instance Method Details
#on_complete(env) ⇒ Object
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/a2a/faraday/middleware/rest/response.rb', line 22 def on_complete(env) operation = env.request.context&.dig(:a2a_operation) return unless operation if env.status >= 400 parsed = env.body if parsed.is_a?(Hash) = parsed["title"] || parsed["message"] || parsed.to_s data = parsed["detail"] else = parsed.to_s data = nil end raise A2A::RestError.new(, http_status: env.status, data: data) end parsed = env.body return if parsed.nil? if parsed.is_a?(String) return if parsed.empty? parsed = JSON.parse(parsed) end schema_class = operation.response_schema unless schema_class env.body = parsed return end env.body = schema_class.new(parsed) rescue JSON::ParserError # Leave body as-is if JSON parsing fails end |