defmodule PortingTools.Mappings.Agent do use Agent, restart: :transient require Logger def start_link(_) do Agent.start_link(&init/0, name: __MODULE__) end def init() do Logger.info("Reading mappings") mappings = File.ls!("mappings") |> Stream.flat_map(&File.stream!("mappings/#{&1}")) |> Stream.map(&String.split(&1, ",")) |> Enum.reduce(%{}, fn [remapped, orig | _], map -> Map.put(map, remapped, orig) end) Logger.info("Done reading mappings") mappings end def map(key) do Agent.get(__MODULE__, &Map.get(&1, key)) end end