class Seahorse::Client::Plugins::Endpoint::Handler

def apply_path_params(uri, context)

def apply_path_params(uri, context)
  path = uri.path.sub(/\/$/, '')
  path += context.operation.http_request_uri.split('?')[0]
  input = context.operation.input
  uri.path = path.gsub(/{\w+\+?}/) do |placeholder|
    if placeholder.include?('+')
      placeholder = placeholder[1..-3]
      greedy = true
    else
      placeholder = placeholder[1..-2]
    end
    name, shape = input.member_by_location_name(placeholder)
    param = context.params[name]
    if greedy
      param = param.gsub(/[^\/]+/) { |v| escape(v) }
    else
      escape(param)
    end
  end
end

def apply_querystring_params(uri, context)

def apply_querystring_params(uri, context)
  parts = []
  parts << context.operation.http_request_uri.split('?')[1]
  parts.compact!
  if input = context.operation.input
    params = context.params
    input.members.each do |member_name, member|
      if member.location == 'querystring' && !params[member_name].nil?
        param_name = member.location_name
        param_value = params[member_name]
        parts << "#{param_name}=#{escape(param_value.to_s)}"
      end
    end
  end
  uri.query = parts.empty? ? nil : parts.join('&')
end

def build_endpoint(context)

def build_endpoint(context)
  uri = URI.parse(context.config.endpoint.to_s)
  apply_path_params(uri, context)
  apply_querystring_params(uri, context)
  uri
end

def call(context)

def call(context)
  context.http_request.endpoint = build_endpoint(context)
  @handler.call(context)
end

def escape(string)

def escape(string)
  Util.uri_escape(string)
end