lib/helpers/enums.ex

defmodule Wordnik.Enums do
  @moduledoc """
  custom string types with documentation on accepted values
  """

  @typedoc """
  part of speech

  allowable values are:
      "noun",
      "adjective",
      "verb",
      "adverb",
      "interjection",
      "pronoun",
      "preposition",
      "abbreviation",
      "affix",
      "article",
      "auxiliary-verb",
      "conjunction",
      "definite-article",
      "family-name",
      "given-name",
      "idiom",
      "imperative",
      "noun-plural",
      "noun-posessive",
      "past-participle",
      "phrasal-prefix",
      "proper-noun",
      "proper-noun-plural",
      "proper-noun-posessive",
      "suffix",
      "verb-intransitive",
      "verb-transitive"
  """
  @type part_of_speech :: String.t()

  @typedoc """
  Source dictionary to return definitions from.

  allowed values are:
      "ahd-5",
      "century",
      "wiktionary",
      "webster",
      "wordnet"
  """
  @type source_dict :: String.t()

  @typedoc """
  Source dictionary to return definitions from. If 'all' is received,
  results are returned from all sources. If multiple values are received
  (e.g. 'century,wiktionary'), results are returned
  from the first specified dictionary that has definitions.
  If left blank, results are returned from the first dictionary
  that has definitions. By default, dictionaries are searched in
  this order: ahd-5, wiktionary, webster, century, wordnet

  allowed values are:
      "all",
      "ahd-5",
      "century",
      "wiktionary",
      "webster",
      "wordnet"
  """
  @type source_dictionaries :: String.t()

  @typedoc """
  type format values

  allowable values are:
      "ahd-5",
      "arpabet",
      "gcide-diacritical",
      "IPA"
  """
  @type type_format :: String.t()

  @typedoc """
  relationship type values

  allowable values are:
      "synonym",
      "antonym",
      "variant",
      "equivalent",
      "cross-reference",
      "related-word",
      "rhyme",
      "form",
      "etymologically-related-term",
      "hypernym",
      "hyponym",
      "inflected-form",
      "primary",
      "same-context",
      "verb-form",
      "verb-stem",
      "has-topic"
  """
  @type relationship_types :: String.t()

  @typedoc """
  CSV part-of-speech values to include

  allowable values are:
      "noun",
      "adjective",
      "verb",
      "adverb",
      "interjection",
      "pronoun",
      "preposition",
      "abbreviation",
      "affix",
      "article",
      "auxiliary-verb",
      "conjunction",
      "definite-article",
      "family-name",
      "given-name",
      "idiom",
      "imperative",
      "noun-plural",
      "noun-posessive",
      "past-participle",
      "phrasal-prefix",
      "proper-noun",
      "proper-noun-plural",
      "proper-noun-posessive",
      "suffix",
      "verb-intransitive",
      "verb-transitive"
  """
  @type include_part_of_speech :: String.t()

  @typedoc """
  CSV part-of-speech values to exclude

  allowable values are:
      "noun",
      "adjective",
      "verb",
      "adverb",
      "interjection",
      "pronoun",
      "preposition",
      "abbreviation",
      "affix",
      "article",
      "auxiliary-verb",
      "conjunction",
      "definite-article",
      "family-name",
      "given-name",
      "idiom",
      "imperative",
      "noun-plural",
      "noun-posessive",
      "past-participle",
      "phrasal-prefix",
      "proper-noun",
      "proper-noun-plural",
      "proper-noun-posessive",
      "suffix",
      "verb-intransitive",
      "verb-transitive"
  """
  @type exclude_part_of_speech :: String.t()

  @typedoc """
  Date format in yyyy-MM-dd format, ex: 2023-12-31
  """
  @type date :: String.t()

  @typedoc """
  setting to sort by alphabetical or total count

  allowable values:
      "alpha",
      "count"
  """
  @type sort_by :: String.t()

  @typedoc """
  setting to order by ascending or descending

  allowable values:
      "asc",
      "desc"
  """
  @type sort_order :: String.t()
end