class Aws::Api::Builder

def build(definition, options = {})

def build(definition, options = {})
  if Seahorse::Model::Api === definition
    definition
  else
    Builder.new.build(customize(load_definition(definition)), options)
  end
end

def build(definition, options = {})

Returns:
  • (Seahorse::Model::Api) -

Parameters:
  • definition (Hash) --
def build(definition, options = {})
  api = build_api(definition)
  docs = build_docstring_provider(api, options)
  shapes = build_shape_map(definition, api, docs)
  build_operations(definition, api, shapes, docs)
  build_struct_classes(shapes, options)
  api
end

def build_api(definition)

def build_api(definition)
  api = Seahorse::Model::Api.new
  api.metadata = definition['metadata'] || {}
  api.version = api.metadata['apiVersion']
  if op = has_endpoint_operation?(definition['operations'])
    api.endpoint_operation = op
  end
  api
end

def build_docstring_provider(api, options)

def build_docstring_provider(api, options)
  if options[:docs] && ENV['DOCSTRINGS']
    docs = Json.load_file(options[:docs])
    Customizations.apply_doc_customizations(api, docs)
    Docs::DocstringProvider.new(docs)
  else
    Docs::NullDocstringProvider.new
  end
end

def build_operation(name, definition, shapes, docs)

def build_operation(name, definition, shapes, docs)
  http = definition['http'] || {}
  op = Seahorse::Model::Operation.new
  op.name = definition['name'] || name
  op.http_method = http['method']
  op.http_request_uri = http['requestUri'] || '/'
  op.documentation = docs.operation_docs(name)
  op.deprecated = !!definition['deprecated']
  op.endpoint_operation = !!definition['endpointoperation']
  op.input = shapes.shape_ref(definition['input'])
  op.output = shapes.shape_ref(definition['output'])
  op['authtype'] = definition['authtype'] unless definition['authtype'].nil?
  (definition['errors'] || []).each do |error|
    op.errors << shapes.shape_ref(error)
  end
  if definition['endpointdiscovery']
    op.endpoint_discovery = {}
    definition['endpointdiscovery'].each do |k, v|
      op.endpoint_discovery[k] = v
    end
  elsif definition['endpoint']
    op.endpoint_pattern = {}
    definition['endpoint'].each do |k, v|
      op.endpoint_pattern[k] = v
    end
  end
  op
end

def build_operations(definitions, api, shapes, docs)

def build_operations(definitions, api, shapes, docs)
  (definitions['operations'] || {}).each do |name, definition|
    operation = build_operation(name, definition, shapes, docs)
    api.add_operation(underscore(name), operation)
  end
end

def build_shape_map(definition, api, docs)

def build_shape_map(definition, api, docs)
  shapes = definition['shapes'] || {}
  api.metadata['shapes'] = ShapeMap.new(shapes, docs: docs)
end

def build_struct_classes(shapes, options)

def build_struct_classes(shapes, options)
  type_builder = options[:type_builder] || TypeBuilder.new(Module.new)
  shapes.each_structure do |shape|
    shape[:struct_class] = type_builder.build_type(shape, shapes)
  end
end

def customize(definition)

def customize(definition)
  Customizations.apply_api_customizations(definition)
  definition
end

def has_endpoint_operation?(ops)

def has_endpoint_operation?(ops)
  return nil if ops.nil?
  ops.each do |name, op|
    return underscore(name) if op['endpointoperation']
  end
  nil
end

def load_definition(definition)

def load_definition(definition)
  case definition
  when nil then {}
  when Hash then definition
  when String, Pathname then Json.load_file(definition)
  else raise ArgumentError, "invalid api definition #{definition}"
  end
end

def underscore(str)

def underscore(str)
  Seahorse::Util.underscore(str).to_sym
end