module Roda::RodaPlugins::JsonParser::RequestMethods

def POST

parse the request body as JSON. Ignore an empty request body.
If the Content-Type header in the request includes "json",
def POST
  env = @env
  if post_params = env["roda.json_params"]
    return post_params
  end
  unless (input = env["rack.input"]) && (content_type = self.content_type) && content_type.include?('json')
    return super
  end
  str = _read_json_input(input)
  return super if str.empty?
  begin
    json_params = parse_json(str)
  rescue
    roda_class.opts[:json_parser_error_handler].call(self)
  end
  wrap = roda_class.opts[:json_parser_wrap]
  if wrap == :always || (wrap == :unless_hash && !json_params.is_a?(Hash))
    json_params = {"_json"=>json_params}
  end
  env["roda.json_params"] = json_params
  json_params
end

def _read_json_input(input)

def _read_json_input(input)
  input.read
end

def _read_json_input(input)

def _read_json_input(input)
  input.rewind
  str = input.read
  input.rewind
  str
end

def parse_json(str)

def parse_json(str)
  args = [str]
  args << self if roda_class.opts[:json_parser_include_request]
  roda_class.opts[:json_parser_parser].call(*args)
end