Current section

Files

Jump to
quenya_parser lib object operation.ex
Raw

lib/object/operation.ex

defmodule QuenyaParser.Object.Operation do
@moduledoc """
Operation object, we won't support servers, callbacks. operationId is a MUST.
"""
use TypedStruct
alias QuenyaParser.Object.{ExternalDocument, Operation, Parameter, RequestBody, Response}
typedstruct do
@typedoc "Operation object from the spec"
field(:tags, [String.t()], default: [])
field(:summary, String.t(), default: "")
field(:description, String.t(), default: "")
field(:external_docs, ExternalDocument.t())
field(:operation_id, String.t(), enforce: true)
field(:parameters, [Parameter.t()], default: [])
field(:request_body, %{required(String.t()) => RequestBody.t()}, default: %{})
field(:responses, %{required(String.t()) => Response.t()}, default: %{})
field(:deprecated, Boolean.t(), default: false)
field(:security, [%{required(String.t()) => [String.t()]}], default: [])
end
def new(uri, method, data) do
id = data["operationId"] || raise "Must define operationId for #{uri} with method #{method}. It will be used to generate code."
%Operation {
tags: data["tags"] || "",
summary: data["summary"] || "",
description: data["description"] || "",
external_docs: ExternalDocument.new(data["externalDocs"]),
operation_id: id,
parameters: Enum.map(data["parameters"] || [], fn p -> Parameter.new(id, p) end),
request_body: RequestBody.new(id, data["requestBody"]),
responses: Response.new(id, data["responses"]),
deprecated: data["deprecated"] || false,
security: data["security"] || []
}
end
end