Skip to content

Instantly share code, notes, and snippets.

@josevalim
Created May 25, 2012 18:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save josevalim/fb133f91db77a9938d57 to your computer and use it in GitHub Desktop.
Save josevalim/fb133f91db77a9938d57 to your computer and use it in GitHub Desktop.
defrecord Sample, foo: 0, bar:
defmodule GenServer do
defmacro from_record(record) do
Enum.map record.__record__(:fields), fn({name,_}) ->
quote do
def handle_call(unquote(name), from, record) do
apply record, name, []
end
def handle_call({ name, value }, from, record) do
apply record, name, [value]
end
end
end
end
end
defmodule MyServer do
@behavior :gen_server
def init(_) do
{ :ok, Sample.new }
end
GenServer.from_record(Sample)
# Implement other callbacks
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment