# `JSONRPC2.Spec.Error`

  Struct which represents JSONRPC error.

# `code`

```elixir
@type code() :: integer()
```

# `data`

```elixir
@type data() :: String.t() | map() | keyword()
```

# `error`

```elixir
@type error() :: %{:code =&gt; code(), :message =&gt; message(), optional(:data) =&gt; data()}
```

# `message`

```elixir
@type message() :: String.t()
```

# `raw_code`

```elixir
@type raw_code() :: integer() | atom()
```

# `t`

```elixir
@type t() :: %JSONRPC2.Spec.Error{
  error: error(),
  id: JSONRPC2.Spec.id(),
  jsonrpc: String.t()
}
```

# `code2error`

```elixir
@spec code2error(atom()) :: {code(), message()}
```

# `new`

```elixir
@spec new(JSONRPC2.Spec.id(), atom()) :: t()
```

Create error struct with predefined errors.

Example:
    iex> Error.new("123", :invalid_request)
    %Error{id: "123", error: %{code: -32600, message: "Invalid request"}, jsonrpc: "2.0"}

# `new`

```elixir
@spec new(JSONRPC2.Spec.id(), raw_code(), message() | data()) :: t()
```

Create error struct.

Example:
    iex> Error.new("123", :invalid_params, %{"x" => ["is not a integer"]})
    %Error{id: "123", error: %{code: -32602, message: "Invalid params", data: %{"x" => ["is not a integer"]}}, jsonrpc: "2.0"}

    iex> Error.new("123", 500, "Some valuable error")
    %Error{id: "123", error: %{code: 500, message: "Some valuable error"}, jsonrpc: "2.0"}

# `new`

```elixir
@spec new(JSONRPC2.Spec.id(), raw_code(), message(), data()) :: t()
```

Create error struct with custom errors.

Example:

    iex> Error.new("123", 500, "Some valuable error", "details")
    %Error{id: "123", error: %{code: 500, message: "Some valuable error", data: "details"}, jsonrpc: "2.0"}

---

*Consult [api-reference.md](api-reference.md) for complete listing*
