33 lines
759 B
Elixir
33 lines
759 B
Elixir
defmodule PortingTools.ResourceLoc do
|
|
use GenServer, restart: :transient
|
|
require Logger
|
|
|
|
def start_link(_) do
|
|
GenServer.start_link(__MODULE__, nil, name: __MODULE__)
|
|
end
|
|
|
|
def init(_init_arg) do
|
|
Logger.info("Initializing Resourceloc server @ #{__MODULE__}")
|
|
{:ok, nil}
|
|
end
|
|
|
|
def resolve(str) do
|
|
GenServer.call(__MODULE__, {:resolve, str})
|
|
end
|
|
|
|
def handle_call({:resolve, str}, _from, state) do
|
|
Logger.info("Got resolve request")
|
|
|
|
try do
|
|
["mods", mod | rest] =
|
|
String.trim(str)
|
|
|> String.trim(<<?">>)
|
|
|> String.split("/", trim: true)
|
|
|
|
{:reply, ~s<new ResourceLocation("#{mod}", "#{Enum.join(rest, "/")}")>, state}
|
|
rescue
|
|
MatchError -> {:reply, nil, state}
|
|
end
|
|
end
|
|
end
|