# `MapSorter.SortSpec`
[🔗](https://github.com/RaymondLoranger/map_sorter/blob/main/lib/map_sorter/sort_spec.ex#L1)

Defines sort spec types and generates square brackets access syntax strings.

# `key`

```elixir
@type key() :: Map.key() | [Map.key()]
```

Sort spec key

# `sort_dir`

```elixir
@type sort_dir() :: :asc | :desc
```

Sort direction

# `t`

```elixir
@type t() ::
  key()
  | {key(), module()}
  | {sort_dir(), key()}
  | {sort_dir(), {key(), module()}}
```

Sort spec

# `brackets`

```elixir
@spec brackets(key()) :: String.t()
```

Generates a square brackets access syntax string from a sort spec `key`.

## Examples

    iex> import MapSorter.SortSpec
    iex> brackets([:birth, :date])
    "[:birth][:date]"

    iex> import MapSorter.SortSpec
    iex> brackets([:address, CITY, :state])
    "[:address][CITY][:state]"

    iex> import MapSorter.SortSpec
    iex> brackets([:dob])
    "[:dob]"

    iex> import MapSorter.SortSpec
    iex> brackets(:dob)
    "[:dob]"

    iex> import MapSorter.SortSpec
    iex> brackets(DOB)
    "[DOB]"

    iex> import MapSorter.SortSpec
    iex> brackets([1, <<1, 2, 3>>, 3.14, DOB])
    "[1][<<1, 2, 3>>][3.14][DOB]"

    iex> import MapSorter.SortSpec
    iex> brackets([DOB, "3.14", 3.14, 0, {1, 2}, :likes])
    ~s<[DOB]["3.14"][3.14][0][{1, 2}][:likes]>

    iex> import MapSorter.SortSpec
    iex> brackets([{[:birth, :date], Date}, :likes])
    "[{[:birth, :date], Date}][:likes]"

    iex> import MapSorter.SortSpec
    iex> brackets([{:desc, {[:birth, :date], Date}}, :likes])
    "[{:desc, {[:birth, :date], Date}}][:likes]"

    iex> import MapSorter.SortSpec
    iex> brackets(~c"abc")
    ~s<[~c"abc"]>

---

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