Current section

Files

Jump to
osu_ex lib api enums.ex
Raw

lib/api/enums.ex

defmodule OsuEx.API.Enums do
@moduledoc "Utility functions for handling enum values."
@doc """
Translates the game mode enum to an atom and vice versa.
## Examples
iex> OsuEx.API.Enums.mode(0)
:standard
iex> OsuEx.API.Enums.mode(:taiko)
1
"""
def mode(_m)
@spec mode(0..3) :: atom
def mode(0), do: :standard
def mode(1), do: :taiko
def mode(2), do: :catch
def mode(3), do: :mania
@spec mode(atom) :: 0..3
def mode(:standard), do: 0
def mode(:taiko), do: 1
def mode(:catch), do: 2
def mode(:mania), do: 3
@doc """
Translates the approved status enum to an atom and vice versa.
## Examples
iex> OsuEx.API.Enums.approved(-2)
:graveyard
iex> OsuEx.API.Enums.approved(:wip)
-1
"""
def approved(_a)
@spec approved(-2..4) :: atom
def approved(-2), do: :graveyard
def approved(-1), do: :wip
def approved(0), do: :pending
def approved(1), do: :ranked
def approved(2), do: :approved
def approved(3), do: :qualified
def approved(4), do: :loved
@spec approved(atom) :: -2..4
def approved(:graveyard), do: -2
def approved(:wip), do: -1
def approved(:pending), do: 0
def approved(:ranked), do: 1
def approved(:approved), do: 2
def approved(:qualified), do: 3
def approved(:loved), do: 4
@doc """
Translates the genre enum to an atom and vice versa.
## Examples
iex> OsuEx.API.Enums.genre(0)
:any
iex> OsuEx.API.Enums.genre(:unspecified)
1
"""
def genre(_g)
@spec genre(0..7 | 9..10) :: atom
def genre(0), do: :any
def genre(1), do: :unspecified
def genre(2), do: :video_game
def genre(3), do: :anime
def genre(4), do: :rock
def genre(5), do: :pop
def genre(6), do: :other
def genre(7), do: :novelty
def genre(9), do: :hip_hop
def genre(10), do: :electronic
@spec genre(atom) :: 0..7 | 9..10
def genre(:any), do: 0
def genre(:unspecified), do: 1
def genre(:video_game), do: 2
def genre(:anime), do: 3
def genre(:rock), do: 4
def genre(:pop), do: 5
def genre(:other), do: 6
def genre(:novelty), do: 7
def genre(:hip_hop), do: 9
def genre(:electronic), do: 10
@doc """
Translates the language enum to an atom and vice versa.
## Examples
iex> OsuEx.API.Enums.language(0)
:any
iex> OsuEx.API.Enums.language(:other)
1
"""
def language(_l)
@spec language(0..11) :: atom
def language(0), do: :any
def language(1), do: :other
def language(2), do: :english
def language(3), do: :japanese
def language(4), do: :chinese
def language(5), do: :instrumental
def language(6), do: :korean
def language(7), do: :french
def language(8), do: :german
def language(9), do: :swedish
def language(10), do: :spanish
def language(11), do: :italian
@spec language(atom) :: 0..11
def language(:any), do: 0
def language(:other), do: 1
def language(:english), do: 2
def language(:japanese), do: 3
def language(:chinese), do: 4
def language(:instrumental), do: 5
def language(:korean), do: 6
def language(:french), do: 7
def language(:german), do: 8
def language(:swedish), do: 9
def language(:spanish), do: 10
def language(:italian), do: 11
@doc """
Translates the scoring type enum to an atom and vice versa.
## Examples
iex> OsuEx.API.Enums.scoring_type(0)
:score
iex> OsuEx.API.Enums.scoring_type(:accuracy)
1
"""
def scoring_type(_s)
@spec scoring_type(0..3) :: atom
def scoring_type(0), do: :score
def scoring_type(1), do: :accuracy
def scoring_type(2), do: :combo
def scoring_type(3), do: :score_v2
@spec scoring_type(atom) :: 0..3
def scoring_type(:score), do: 0
def scoring_type(:accuracy), do: 1
def scoring_type(:combo), do: 2
def scoring_type(:score_v2), do: 3
@doc """
Translates the team type enum to an atom and vice versa.
## Examples
iex> OsuEx.API.Enums.team_type(0)
:head_to_head
iex> OsuEx.API.Enums.team_type(:tag_coop)
1
"""
def team_type(_t)
@spec team_type(0..3) :: atom
def team_type(0), do: :head_to_head
def team_type(1), do: :tag_coop
def team_type(2), do: :team_vs
def team_type(3), do: :tag_team_vs
@spec team_type(atom) :: 0..3
def team_type(:head_to_head), do: 0
def team_type(:tag_coop), do: 1
def team_type(:team_vs), do: 2
def team_type(:tag_team_vs), do: 3
@doc """
Translates the team enum to an atom and vice versa.
## Examples
iex> OsuEx.API.Enums.team(1)
:blue
iex> OsuEx.API.Enums.team(:red)
2
"""
def team(_t)
@spec team(1..2) :: atom
def team(1), do: :blue
def team(2), do: :red
@spec team(atom) :: 1..2
def team(:blue), do: 1
def team(:red), do: 2
end