Sashite.Epin (Sashite.Epin v1.2.0)

Copy Markdown View Source

EPIN (Extended Piece Identifier Notation) implementation for Elixir.

EPIN extends PIN with an optional derivation marker (') that flags whether a piece uses a native or derived style.

Format

<pin>[']
  • PIN: Any valid PIN token (abbr, side, state, terminal)
  • Derivation marker: ' (derived) or absent (native)

Examples

iex> {:ok, epin} = Sashite.Epin.parse("K^'")
iex> epin.pin.abbr
:K
iex> epin.pin.terminal
true
iex> Sashite.Epin.Identifier.derived?(epin)
true

iex> {:ok, epin} = Sashite.Epin.parse("+R")
iex> Sashite.Epin.Identifier.to_string(epin)
"+R"

iex> Sashite.Epin.valid?("K^'")
true

iex> Sashite.Epin.valid?("invalid")
false

@see https://sashite.dev/specs/epin/1.0.0/

Summary

Functions

Parses an EPIN string into an Identifier.

Parses an EPIN string into an Identifier, raising on error.

Reports whether a string is a valid EPIN notation.

Functions

parse(string)

@spec parse(String.t()) :: {:ok, Sashite.Epin.Identifier.t()} | {:error, atom()}

Parses an EPIN string into an Identifier.

Parameters

  • string - The EPIN string to parse

Returns

  • {:ok, identifier} on success
  • {:error, reason} on failure

Examples

iex> {:ok, epin} = Sashite.Epin.parse("K")
iex> epin.pin.abbr
:K
iex> Sashite.Epin.Identifier.native?(epin)
true

iex> {:ok, epin} = Sashite.Epin.parse("K^'")
iex> epin.pin.terminal
true
iex> Sashite.Epin.Identifier.derived?(epin)
true

iex> Sashite.Epin.parse("invalid")
{:error, :invalid_pin}

iex> Sashite.Epin.parse("")
{:error, :empty_input}

parse!(string)

@spec parse!(String.t()) :: Sashite.Epin.Identifier.t()

Parses an EPIN string into an Identifier, raising on error.

Parameters

  • string - The EPIN string to parse

Returns

  • An Identifier struct on success

Raises

Examples

iex> epin = Sashite.Epin.parse!("K^'")
iex> Sashite.Epin.Identifier.to_string(epin)
"K^'"

iex> epin = Sashite.Epin.parse!("+R")
iex> epin.pin.state
:enhanced

valid?(string)

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

Reports whether a string is a valid EPIN notation.

Parameters

  • string - The string to validate

Returns

  • true if valid
  • false otherwise

Examples

iex> Sashite.Epin.valid?("K")
true

iex> Sashite.Epin.valid?("K^'")
true

iex> Sashite.Epin.valid?("+R^'")
true

iex> Sashite.Epin.valid?("invalid")
false

iex> Sashite.Epin.valid?("K''")
false

iex> Sashite.Epin.valid?(nil)
false