defmodule KVS do require Record Enum.each(Record.extract_all(from_lib: "kvs/include/cursors.hrl"), fn {name, definition} -> Record.defrecord(name, definition) end) Enum.each(Record.extract_all(from_lib: "kvs/include/metainfo.hrl"), fn {name, definition} -> Record.defrecord(name, definition) end) Enum.each(Record.extract_all(from_lib: "kvs/include/kvs.hrl"), fn {name, definition} -> Record.defrecord(name, definition) end) defmacro __using__(opts \\ []) do imports = opts |> Macro.expand(__CALLER__) |> Keyword.get(:with, [:kvs]) Enum.map(imports, fn mod -> if Code.ensure_compiled?(mod) do upcased = Module.concat([String.upcase(to_string(mod))]) quote do import unquote(upcased) alias unquote(mod), as: unquote(upcased) end else IO.warn("🚨 Unknown module #{mod} was requested to be used by :kvs. Skipping.") end end) end end