Skip to content

Elixir library to encode/decode Legend of Runterra deck codes

License

Notifications You must be signed in to change notification settings

ed-flanagan/riot_lor

Repository files navigation

🃏 Riot LoR deck code library ⚗️

Package Docs Test Coverage

Yet another Elixir implementation of Riot's Legends of Runterra deck code library.

Installation

If using Hex, the package can be installed by adding :riot_lor to your list of dependencies in mix.exs:

def deps do
  [
    {:riot_lor, "~> 1.1.1"}
  ]
end

Usage

Documentation

Docs can be found at https://hexdocs.pm/riot_lor.

You can also read supplemental docs under the docs/ directory.

Examples

You can run the project locally with iex -S mix. You may want to configure IEx to

  • display lists of ints as lists, rather than charlists
  • limit inspect enum length to 4, in case your want to limit large outputs of decks

Inspect options

iex \
	--eval 'IEx.configure(inspect: [limit: 4, charlists: :as_lists])' \
	-S mix
iex(1)> IEx.configure(inspect: [limit: 4, charlists: :as_lists])
:ok

Decoding

iex(2)> deck_code = "CEAAECABAQJRWHBIFU2DOOYIAEBAMCIMCINCILJZAICACBANE4VCYBABAILR2HRL"
"CEAAECABAQJRWHBIFU2DOOYIAEBAMCIMCINCILJZAICACBANE4VCYBABAILR2HRL"
iex(3)> deck = Riot.LoR.DeckCode.decode!(deck_code)
%{
  %Riot.LoR.Card{fac: 2, num: 6, set: 1} => 2,
  %Riot.LoR.Card{fac: 2, num: 9, ...} => 2,
  %Riot.LoR.Card{fac: 2, ...} => 2,
  %Riot.LoR.Card{...} => 2,
  ...
}
iex(4)> Riot.LoR.Deck.code_count(deck)
[{"01IO006", 2}, {"01IO009", 2}, {"01IO012", ...}, {...}, ...]

Encoding

iex(5)> card_counts = [{"01DE001", 1}, {"05BC198", 1}]
[{"01DE001", 1}, {"05BC198", 1}]
iex(6)> deck = Riot.LoR.Deck.from_card_counts!(card_counts)
%{
  %Riot.LoR.Card{fac: 0, num: 1, set: 1} => 1,
  %Riot.LoR.Card{fac: 10, num: 198, set: 5} => 1
}
iex(7)> Riot.LoR.DeckCode.encode!(deck)
"CQAAAAQBAEAACAIFBLDAC"

Contributing

See the CONTRIBUTING.md file.

Legal

Licensed under the MIT License. See the LICENSE file for more details.

Per Riot's Core Policies:

The riot_lor project isn't endorsed by Riot Games and doesn't reflect the views or opinions of Riot Games or anyone officially involved in producing or managing Riot Games properties. Riot Games, and all associated properties are trademarks or registered trademarks of Riot Games, Inc.