Last active
July 7, 2018 19:51
-
-
Save KamilLelonek/6ccc4daab69b41ed1f669544d86c5246 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
defmodule Pathlist do | |
@mersenne_prime 2_147_483_647 | |
def to_list(<<"m/", path::binary>>), do: {:private, to_list(path)} | |
def to_list(<<"M/", path::binary>>), do: {:public, to_list(path)} | |
def to_list(path) do | |
path | |
|> String.split("/") | |
|> Enum.map(&cast_to_integer/1) | |
end | |
defp cast_to_integer(level) do | |
level | |
|> String.reverse() | |
|> maybe_hardened(level) | |
end | |
defp maybe_hardened(<<"'", reversed_part::binary>>, _level) do | |
reversed_part | |
|> String.reverse() | |
|> String.to_integer() | |
|> Kernel.+(1) | |
|> Kernel.+(@mersenne_prime) | |
end | |
defp maybe_hardened(_reversed_part, level), do: String.to_integer(level) | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment