# frozen_string_literal: true

require 'stringio'

module AwsLambda
  class Marshaller
    class << self
      # By default, JSON-parses the raw request body. This can be overwritten
      # by users who know what they are doing.
      def marshall_request(raw_request)
        content_type = raw_request['Content-Type']
        if content_type == 'application/json'
          JSON.parse(raw_request.body)
        else
          raw_request.body # return it unaltered
        end
      end

      # By default, just runs #to_json on the method's response value.
      # This can be overwritten by users who know what they are doing.
      # The response is an array of response, content-type.
      # If returned without a content-type, it is assumed to be application/json
      # Finally, StringIO/IO is used to signal a response that shouldn't be
      # formatted as JSON, and should get a different content-type header.
      def marshall_response(method_response)
        case method_response
        when StringIO, IO
          [method_response, 'application/unknown']
        else
          method_response.to_json # application/json is assumed
        end
      end
    end
  end
end
