View Source NimbleOptionsEx (nimble_options_ex v0.1.0)
Set of custom functions to enhance the UX with NimbleOptions.
Link to this section Summary
Link to this section Functions
Validates that the term passed implements Access behaviour.
Example:
iex> schema = [
...> container: [
...> required: true,
...> type: {:custom, NimbleOptionsEx, :access?, []},
...> doc: "The implementation of `Access` to be used as a storage"
...> ]
...> ]
iex> NimbleOptions.validate([container: %{}], schema)
{:ok, [container: %{}]}
iex> NimbleOptions.validate([container: [foo: :bar]], schema)
{:ok, [container: [foo: :bar]]}
iex> NimbleOptions.validate([container: [1, 2, 3]], schema)
{:error, %NimbleOptions.ValidationError{
message: "invalid value for :container option: expected a keyword list, got a list ‹[1, 2, 3]›",
key: :container, value: [1, 2, 3], keys_path: []}}
@spec behaviour(module() | any(), module() | []) :: {:ok, validated_option :: module()} | {:error, String.t()}
Validates a behaviour specified as a module or as a set of functions.
Example:
iex> schema = [
...> container: [
...> required: true,
...> type: {:custom, NimbleOptionsEx, :behaviour, [Supervisor]},
...> doc: "The implementation of `Supervisor` to be used as a supervisor"
...> ]
...> ]
iex> NimbleOptions.validate([container: DynamicSupervisor], schema)
{:ok, [container: DynamicSupervisor]}
iex> NimbleOptions.validate([container: DateTime], schema)
{:error, %NimbleOptions.ValidationError{
message: "invalid value for :container option: module ‹DateTime› does not implement requested callbacks ‹[init: 1]›",
key: :container, value: DateTime, keys_path: []}}If no arguments are given, the checker would make sure the module passed is indeed a module, available at the moment of invocation.
Please note, that Access behaviour is somewhat special, because
it’s supported for terms, such as maps %{foo: :bar} (not Map,)
keywords [foo: :bar] (not Keyword,) and structs %Strct{foo: :bar}
(not Strct module itself.) Use access?/1 validator to check
whether Access is supported by a term itself.