# `Parrhesia.Protocol.Filter`

NIP-01 filter validation and matching.

# `validation_error`

```elixir
@type validation_error() ::
  :invalid_filters
  | :empty_filters
  | :too_many_filters
  | :invalid_filter
  | :invalid_filter_key
  | :invalid_ids
  | :invalid_authors
  | :invalid_kinds
  | :invalid_since
  | :invalid_until
  | :invalid_limit
  | :invalid_search
  | :too_many_tag_values
  | :invalid_tag_filter
```

# `error_message`

```elixir
@spec error_message(validation_error()) :: String.t()
```

# `matches_any?`

```elixir
@spec matches_any?(map(), [map()]) :: boolean()
```

# `matches_filter?`

```elixir
@spec matches_filter?(map(), map()) :: boolean()
```

# `validate_filter`

```elixir
@spec validate_filter(map()) :: :ok | {:error, validation_error()}
```

# `validate_filters`

```elixir
@spec validate_filters([map()]) :: :ok | {:error, validation_error()}
```

---

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