Current section
Files
Jump to
Current section
Files
lib/json_rpc/error.ex
defmodule JSONRPC.Error do
alias __MODULE__
defstruct [:code, :message, data: %{}]
@type t :: %Error{}
@parse_error -32700
@invalid_request -32600
@method_not_found -32601
@invalid_params -32602
@internal_error -32603
@server_error -32000
@spec new(map()) :: Error.t()
def new(%{"code" => code, "message" => message, "data" => data}) do
%Error{code: code, message: message, data: data}
end
def new(%{code: code, message: message, data: data}) do
%Error{code: code, message: message, data: data}
end
def new(%{"code" => code, "message" => message}) do
%Error{code: code, message: message}
end
def new(%{code: code, message: message}) do
%Error{code: code, message: message}
end
def new(_) do
internal_error()
end
@spec parse_error() :: Error.t()
def parse_error() do
%Error{code: @parse_error, message: "Parse error"}
end
@spec invalid_request() :: Error.t()
def invalid_request() do
%Error{code: @invalid_request, message: "Invalid Request"}
end
@spec method_not_found() :: Error.t()
def method_not_found(data \\ %{}) do
%Error{code: @method_not_found, message: "Method not found", data: data}
end
@spec invalid_params() :: Error.t()
def invalid_params(data \\ %{}) do
%Error{code: @invalid_params, message: "Invalid params", data: data}
end
@spec internal_error() :: Error.t()
def internal_error(data \\ %{}) do
%Error{code: @internal_error, message: "Internal error", data: data}
end
@spec server_error() :: Error.t()
def server_error(code \\ @server_error, data \\ %{}) do
%Error{code: code, message: "Server error", data: data}
end
@spec application_error(integer(), String.t(), any()) :: Error.t()
def application_error(code, message, data \\ %{}) do
%Error{code: code, message: message, data: data}
end
end