class Aws::Rest::Response::Body

Public Class Methods

new(parser_class, rules) click to toggle source

@param [Class] parser_class @param [Seahorse::Model::ShapeRef] rules

# File lib/aws-sdk-core/rest/response/body.rb, line 12
def initialize(parser_class, rules)
  @parser_class = parser_class
  @rules = rules
end

Public Instance Methods

apply(body, data) click to toggle source

@param [IO] body @param [Hash, Struct] data

# File lib/aws-sdk-core/rest/response/body.rb, line 19
def apply(body, data)
  if event_stream?
    data[@rules[:payload]] = parse_eventstream(body)
  elsif streaming?
    # empty blob payloads are omitted
    data[@rules[:payload]] = body unless empty_blob_payload?(body)
  elsif @rules[:payload]
    data[@rules[:payload]] = parse(body.read, @rules[:payload_member])
  elsif !@rules.shape.member_names.empty?
    parse(body.read, @rules, data)
  end
end

Private Instance Methods

empty_blob_payload?(body) click to toggle source
# File lib/aws-sdk-core/rest/response/body.rb, line 34
def empty_blob_payload?(body)
  true if non_streaming_blob_payload? && empty_body?(body)
end
empty_body?(body) click to toggle source
# File lib/aws-sdk-core/rest/response/body.rb, line 43
def empty_body?(body)
  body.respond_to?(:size) && body.size.zero?
end
event_stream?() click to toggle source
# File lib/aws-sdk-core/rest/response/body.rb, line 47
def event_stream?
  @rules[:payload] && @rules[:payload_member].eventstream
end
non_streaming_blob_payload?() click to toggle source
# File lib/aws-sdk-core/rest/response/body.rb, line 38
def non_streaming_blob_payload?
  @rules[:payload_member].shape.is_a?(BlobShape) &&
    !@rules[:payload_member]['streaming']
end
parse(body, rules, target = nil) click to toggle source
# File lib/aws-sdk-core/rest/response/body.rb, line 58
def parse(body, rules, target = nil)
  @parser_class.new(rules).parse(body, target) if body.size > 0
end
parse_eventstream(body) click to toggle source
# File lib/aws-sdk-core/rest/response/body.rb, line 62
def parse_eventstream(body)
  # body contains an array of parsed event when they arrive
  @rules[:payload_member].shape.struct_class.new do |payload|
    body.each { |event| payload << event }
  end
end
streaming?() click to toggle source
# File lib/aws-sdk-core/rest/response/body.rb, line 51
def streaming?
  @rules[:payload] && (
    BlobShape === @rules[:payload_member].shape ||
    StringShape === @rules[:payload_member].shape
  )
end