One sort rule: a public field, direction, optional DB column + nulls placement.
@type direction() :: :asc | :desc
@type nulls() :: nil | :first | :last
@type t() :: %LiveFilter.Sort.Entry{ direction: direction(), field: atom(), nulls: nulls(), query_field: atom() | nil }