module Grape::Formatter

def builtin_formatters

def builtin_formatters
  @builtin_formatters ||= {
    json: Grape::Formatter::Json,
    jsonapi: Grape::Formatter::Json,
    serializable_hash: Grape::Formatter::SerializableHash,
    txt: Grape::Formatter::Txt,
    xml: Grape::Formatter::Xml
  }
end

def formatter_for(api_format, **options)

def formatter_for(api_format, **options)
  spec = formatters(**options)[api_format]
  case spec
  when nil
    ->(obj, _env) { obj }
  when Symbol
    method(spec)
  else
    spec
  end
end

def formatters(**options)

def formatters(**options)
  builtin_formatters.merge(default_elements).merge!(options[:formatters] || {})
end