defmodule ExAws.CloudSearch.QueryParser do @moduledoc """ A wrapper for query parsers. The base case is that the query is a string, in which case the query is passed through unmodified. """ @type query_mode :: nil | :simple | :structured | :lucene | :dismax @doc """ Attempt to parse the query provided. If the parser sets a particular mode, that value will be returned with the query; otherwise the query mode will be `nil`, indicating that the parser cannot determine the type of query. """ @spec parse(nil | String.t() | struct) :: {String.t(), query_mode} def parse(query) def parse(nil) do {nil, nil} end def parse(query) when is_binary(query) do {query, nil} end if Code.ensure_loaded?(CSQuery.Expression) do def parse(%CSQuery.Expression{} = query) do {CSQuery.Expression.to_query(query), :structured} end end def parse(%mod{}) when is_atom(mod) do missing_query_parser(mod) end defp missing_query_parser(type) do raise ExAws.Error, "Missing CloudSearch query parser for type #{type}. Please see docs." end end