@type segment() :: {:key, String.t()} | {:index, integer()} | :wildcard | :length
@spec delete(term(), String.t()) :: {:ok, term()} | :error
@spec get(term(), String.t()) :: {:ok, term()} | :error
@spec parse(String.t()) :: [segment()]
@spec set(term(), String.t(), term()) :: {:ok, term()} | {:error, term()}