Skip to content

Instantly share code, notes, and snippets.

@ssbb
Created August 14, 2024 12:54
Show Gist options
  • Save ssbb/0e81f58a78d14d4b285ede5f3b62e2cd to your computer and use it in GitHub Desktop.
Save ssbb/0e81f58a78d14d4b285ede5f3b62e2cd to your computer and use it in GitHub Desktop.
defmodule MyApp.Snippet do
defmacro defsnippet(name, do: snippet) do
quote do
snippets = Module.get_attribute(__MODULE__, :snippets) || []
snippets = [{unquote(name), unquote(snippet)} | snippets]
Module.put_attribute(__MODULE__, :snippets, snippets)
end
end
defmacro snippet(name) do
quote do
case Enum.find(@snippets, fn {k, _v} -> k == unquote(name) end) do
{_name, snippet} -> snippet
nil -> raise "Snippet #{unquote(name)} not found"
end
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment