EnhancedAccess.optional_key

You're seeing just the function optional_key, go back to EnhancedAccess module for more information.
Link to this function

optional_key(key)

Specs

optional_key(term()) ::
  Access.access_fun(data :: Access.container(), current_value :: term())

Allow for optional keys in the Access protocol

Examples

iex> get_in(%{a: %{b: 1}, c: 1}, [EnhancedAccess.all_keys(), EnhancedAccess.optional_key(:b)])
[1, nil]

iex> get_in(%{a: 1, c: %{b: 1}}, [EnhancedAccess.all_keys(), EnhancedAccess.optional_key(:b)])
[nil, 1]

iex> deeper_nesting = %{a: %{b: %{c: 1}}, d: %{b: %{c: 2}}, e: %{d: 1}}
iex> get_in(deeper_nesting, [EnhancedAccess.all_keys(), EnhancedAccess.optional_key(:b), :c])
[1, 2, nil]

iex> update_in(%{a: %{b: 1}, c: %{d: 2}}, [EnhancedAccess.all_keys(), EnhancedAccess.optional_key(:b)], &(&1 + 1))
%{a: %{b: 2}, c: %{d: 2}}

iex> update_in([a: [b: 1], c: [d: 2]], [EnhancedAccess.all_keys(), EnhancedAccess.optional_key(:b)], &(&1 + 1))
[a: [b: 2], c: [d: 2]]

iex> get_and_update_in(%{a: %{b: 1}, c: %{d: 2}}, [EnhancedAccess.all_keys(), EnhancedAccess.optional_key(:b)], &{&1, &1 + 1})
{[1, nil], %{a: %{b: 2}, c: %{d: 2}}}

iex> pop_in(%{a: %{b: 1}, c: %{d: 2}}, [EnhancedAccess.all_keys(), EnhancedAccess.optional_key(:b)])
{[1, nil], %{a: %{}, c: %{d: 2}}}