README.md

# AMessage

"A message" is an Elixir struct w/ four required keys:

* to
* from
* subject
* body

## Um... isn't this kind of useless?

Probably :)

Some of us developers have trouble crafting messages with meaningful semantics, especially when the message is doing something mundane & generic.

```elixir
# what is the some_pid?
# why is it being updated?
# what's in some_data?
# I don't understand.  At all.
send(some_pid, {:update, some_data})
```    

By using `AMessage`, maybe it'll be easier for you to capture some of the essence of what you're trying to accomplish, giving someone else (maybe you at a later time) enough context to come up with a more meaningful semantic at a later date.

``````elixir
# OK, I see this module is sending updated endpoints to SomeModule
# What the heck is this AMessage ridiculousness?
# A more meaningful abstraction might be... <conversation happens>
# Try this => send(endpoints_repo, {:update, endpoints})
# Even better => EndpointsRepo.update(repo_pid, endpoints)
send(some_pid, %AMessage{from:    __MODULE__,
                         to:      EndpointsRepo,
                         subject: :update_endpoints},
                         body:    endpoints})
```

## Add it (to mix.exs)

```elixir
def deps do
  [{:a_message, "~> 1.0.0"}]
end
```