Sashite.Snn.Parser (Sashite.Snn v2.0.0)
View SourceSecure parser for SNN (Style Name Notation) strings.
Designed for untrusted input: validates bounds first, parses character by character, and enforces strict constraints at every step.
SNN Format
An SNN token is a PascalCase name with optional numeric suffix:
- Starts with exactly one uppercase letter (A-Z)
- Followed by zero or more letters (A-Z, a-z)
- Ends with zero or more digits (0-9)
Examples
iex> Sashite.Snn.Parser.parse("Chess")
{:ok, "Chess"}
iex> Sashite.Snn.Parser.parse("Chess960")
{:ok, "Chess960"}
iex> Sashite.Snn.Parser.parse("chess")
{:error, :invalid_format}
Summary
Functions
Parses an SNN string, validating its format.
Reports whether the input is a valid SNN string.
Functions
Parses an SNN string, validating its format.
Performs validation in order of computational cost:
- Type and length check (O(1) - immediate rejection of oversized input)
- First character check (O(1))
- Character-by-character parsing with state transitions
Examples
iex> Sashite.Snn.Parser.parse("Chess")
{:ok, "Chess"}
iex> Sashite.Snn.Parser.parse("Shogi")
{:ok, "Shogi"}
iex> Sashite.Snn.Parser.parse("Chess960")
{:ok, "Chess960"}
iex> Sashite.Snn.Parser.parse("A")
{:ok, "A"}
iex> Sashite.Snn.Parser.parse("")
{:error, :empty_input}
iex> Sashite.Snn.Parser.parse("chess")
{:error, :invalid_format}
iex> Sashite.Snn.Parser.parse("123")
{:error, :invalid_format}
Reports whether the input is a valid SNN string.
Examples
iex> Sashite.Snn.Parser.valid?("Chess")
true
iex> Sashite.Snn.Parser.valid?("Chess960")
true
iex> Sashite.Snn.Parser.valid?("chess")
false
iex> Sashite.Snn.Parser.valid?("")
false
iex> Sashite.Snn.Parser.valid?(nil)
false