Sashite.Snn (Sashite.Snn v2.0.0)
View SourceSNN (Style Name Notation) implementation for Elixir.
SNN provides a human-readable naming system for game styles (Piece Styles) in abstract strategy board games. It uses PascalCase names with optional numeric suffixes to identify movement traditions or game variants.
Examples
iex> {:ok, snn} = Sashite.Snn.parse("Chess")
iex> snn.name
"Chess"
iex> snn = Sashite.Snn.parse!("Chess960")
iex> snn.name
"Chess960"
iex> Sashite.Snn.valid?("Shogi")
true
iex> Sashite.Snn.valid?("shogi")
false
Summary
Functions
Parses an SNN string into a StyleName.
Parses an SNN string into a StyleName, raising on error.
Reports whether the input is a valid SNN string.
Functions
@spec parse(String.t()) :: {:ok, Sashite.Snn.StyleName.t()} | {:error, atom()}
Parses an SNN string into a StyleName.
Parameters
input- The SNN string to parse
Returns
{:ok, %StyleName{}}on success{:error, reason}on failure
Error Reasons
:empty_input- String length is 0:input_too_long- String exceeds 32 characters:invalid_format- Does not match SNN format
Examples
iex> {:ok, snn} = Sashite.Snn.parse("Chess")
iex> snn.name
"Chess"
iex> {:ok, snn} = Sashite.Snn.parse("Chess960")
iex> snn.name
"Chess960"
iex> Sashite.Snn.parse("")
{:error, :empty_input}
iex> Sashite.Snn.parse("chess")
{:error, :invalid_format}
iex> Sashite.Snn.parse("123")
{:error, :invalid_format}
@spec parse!(String.t()) :: Sashite.Snn.StyleName.t()
Parses an SNN string into a StyleName, raising on error.
Parameters
input- The SNN string to parse
Returns
A %StyleName{} struct.
Raises
ArgumentErrorif the input is invalid
Examples
iex> snn = Sashite.Snn.parse!("Chess")
iex> snn.name
"Chess"
iex> snn = Sashite.Snn.parse!("Shogi")
iex> snn.name
"Shogi"
iex> Sashite.Snn.parse!("")
** (ArgumentError) empty input
iex> Sashite.Snn.parse!("chess")
** (ArgumentError) invalid format
Reports whether the input is a valid SNN string.
Examples
iex> Sashite.Snn.valid?("Chess")
true
iex> Sashite.Snn.valid?("Chess960")
true
iex> Sashite.Snn.valid?("A")
true
iex> Sashite.Snn.valid?("")
false
iex> Sashite.Snn.valid?("chess")
false
iex> Sashite.Snn.valid?(nil)
false