Sashite.Snn (Sashite.Snn v2.0.0)

View Source

SNN (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

See: https://sashite.dev/specs/snn/1.0.0/

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

parse(input)

@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}

parse!(input)

@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

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

valid?(input)

@spec valid?(term()) :: boolean()

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