# `Quiddity.Error`
[🔗](https://github.com/d-led/ex.quiddity/blob/main/lib/quiddity/error.ex#L1)

A refusal from the engine, with the code a caller can branch on.

The codes are quiddity's own vocabulary, so a caller who reads its
documentation is not learning a second one:

  * `"unreadable"` — the file is not there, or cannot be opened;
  * `"broken_step"` — the kernel read it and refused it (parse, unsupported,
    incomplete, or past a bound it keeps);
  * `"bad_request"` — the question was malformed: not three numbers, a camera
    with no direction, a face the part does not have;
  * `"unresolved_geometry"` — a face the ray meets has a surface the kernel
    cannot intersect, so the answer would be a guess;
  * `"internal"` — a document that could not be written.

A refusal is a *value*, not an exception: a tool that cannot answer still
answers, and says what to try next.

# `t`

```elixir
@type t() :: %Quiddity.Error{
  __exception__: term(),
  code: String.t(),
  message: String.t()
}
```

# `new`

```elixir
@spec new({String.t(), String.t()}) :: t()
```

A refusal, from the engine's `{code, message}` pair.

---

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